Langkah ke Konten Utama
Studi Kasus

Bagaimana Rapido Cloud mengelola Penerbitan Semantik dengan Capgo CapacitorUpdater

Artikel ini menjelaskan cara saya mengatur penerbitan semantik untuk mengelola rilis aplikasi yang menggunakan Capgo CapacitorUpdater

Bagaimana Rapido Cloud mengelola Rilis Semantik dengan Capgo CapacitorUpdater

1. Pengenalan

Pada Rapido Cloud (www.rapido.cloud), saya sedang mengembangkan aplikasi seluler untuk klien Salesforce agar dapat dengan mudah mengdeploy aplikasi seluler yang terbranding sendiri tanpa harus melewati loop yang sulit menggunakan Salesforce Mobile SDK atau Salesforce Mobile Publisher.

Saya telah mengembangkan aplikasi seluler ini pada platform modern dan “standar” dengan komponen dan alat yang luas, termasuk Ionic 8, Angular 18, TypeScript, Capacitor dan sekarang Capgo CapacitorUpdater. Ini lebih mudah untuk dihandle oleh klien yang tidak ingin mengelola spesifik Salesforce seperti Lightning Web Components; dan lebih mudah dan lebih murah bagi saya untuk merekrut pengembang dan pengelola aplikasi seluler Ionic + Angular.

Artikel ini menjelaskan desain, pilihan, dan implementasi saya yang membuat Capgo dan semantic-release suatu keputusan yang sangat mudah untuk mengelola semua pengiriman otomatis melalui Github Actions. Semua ini dirancang, diuji, dan dokumentasi selama periode uji coba gratis 14 hari yang menyenangkan dari Capgo CapacitorUpdater.

Mengapa menggunakan Capgo ? Mengapa menggunakan semantic-release ?

Capgo CapacitorUpdater attracted me with its promise to make mobile app deployments much more simple, much more rapid and flexible than going through the standard Apple AppStore/Google PlayStore delivery process. This is my first mobile application which I am pushing to the stores, having concentrated in the past on web apps, usually developed on the Salesforce Experience Cloud.

Saya sangat takut akan kurva belajar untuk membuat ini sukses, tetapi saya berhasil mengirimkan aplikasi saya ke Apple TestFlight dengan mudah. Saya kemudian dapat menggunakan Capgo CapacitorUpdater untuk mengirimkan update saya lebih cepat.

My first requirement and test case was to deploy for myself to test my app as a real mobile app on my own phone, instead of testing in a mobile emulator or in a simulator via the Nexus mobile browser suggested by IIonic. That’s because my app uses native features such as Geolocation or accessing the Photo Gallery and Camera. Not having the past experience of testing a Capacitor mobile app, I wasn’t sure if everything was going to work properly : nothing better than to test the real app, in real conditions !

So Capgo CapacitorUpdater helped me update my application on my mobile, live, 1 minute after saving a new feature or fix in my source code : so relieving, and so flexible, and easy to set up !

3. Model cabang dan rilis saya, dan bagaimana semantic-release berintegrasi

Jadi sekarang saya memiliki pengiriman ke Capgo server saya berjalan dengan benar, saya perlu otomatisasi ini dan mengintegrasikannya ke dalam pipeline CI/CD saya.

Ini adalah cara saya mengorganisir model cabang dan rilis saya

Untuk setiap aplikasi, baik mobile, web, atau Salesforce :

  • development cabang yang berasal dari feature/... , dan mereka diintegrasikan ke maindan kemudian diintegrasikan ke dalam main yang merupakan acuan untuk sebagian besar cabang pengembangan, di luar perawatan dan fitur khusus untuk pengiriman kustom (lebih lanjut tentang ini di bawah)
  • Rilis Deploymen dipicu. dan mereka diintegrasikan ke yang mungkin : production, cabang rilis pra (alpha, beta, nightly, dst.) dan juga cabang khusus pelanggan atau konteks untuk pengiriman khusus
  • pengiriman diluncurkan oleh permintaan pull pengiriman diluncurkan oleh permintaan pull karena saya tidak menggunakan pengiriman yang dipicu tag karena semantic release mengelola tag dan semua yang lain untuk saya.

Secara dasarnya, ini adalah Gitlab Flow :

Gitlab Flow

Gitlab Flow - sumber https://faun.dev/c/stories/manuelherrera/strategi-branching-git-di-2022

Catatan sampingan tentang bagaimana semantic-release bekerja :

Dalam cabang pengiriman, ketika semantic-release diaktifkan, maka akan secara otomatis menghitung nomor versi baru pada cabang ini, tergantung pada nomor versi sebelumnya pada cabang dan perbaikan atau fitur yang disampaikan. Perbaikan akan membuat versi patch baru, sedangkan fitur akan membuat versi minor baru. Selain itu, juga secara otomatis termasuk alpha, betadst. dalam nomor versi.

Pengeluaran semantik menghasilkan daftar perubahan dari komit Anda, mengelompokkan perbaikan dan fitur sesuai dengan konvensi komit (lihat) https://www.conventionalcommits.org/en/abouthttps://www.conventionalcommits.org/en/about

It will also update all your git (Github, in my case) merged pull requests and related issues with comments linking them to the tag and release. Finally, in this Github release, it will attach assets such as source code, binaries if necessary, CHANGELOG.md, etc.

4. Cabang, rilis/prereleas, saluran dalam semantic release dan di Capgo

4. Cabang, rilis/prereleases, saluran dalam rilis semantik dan di Capgo

Saya ingin semantic release menghasilkan nomor versi

Capgo have developed and documented their own version of the “Conventional Commits” standard-version alat ini, dengan repositori mereka yang diubah standard-version (https://github.com/Cap-go/standard-versionhttps://__CAPGO_KEEP_0__.com/Cap-go/standard-version", capacitor-standard-version (https://github.com/Cap-go/capacitor-versi-standar) juga termasuk capacitor-plugin-standard-version (https://github.com/Cap-go/capacitor-plugin-standar-versi) repositori. Mereka telah mendokumentasikan skema versi yang digunakan oleh Capgo dalam penggunaan mereka (https://capgo.app/blog/cara-versi-bekerja-di-capgo/JavaScript bundle mengikuti "semver" versi "Semantic Versioning" standar.versi standar) which semantic-release juga mengikuti (tentu saja !)

So that’s great, and is a relief for me because I use semantic-release extensively.

Saya juga ingin rilis semantik menghasilkan pengiriman aplikasi pada saluran yang berbeda

As disebutkan di atas, saya perlu mengdeploy versi prerelease dari cabang seperti alpha, beta, nightly Tapi juga versi khusus pelanggan pada cabang seperti production-customer-jones, production-customer-doe, dll.

Capgo menyediakan fitur “saluran” yang tepat apa yang juga didukung oleh semantic release, jadi saya sangat bersemangat untuk membuatnya bekerja sama. Fitur ini juga sesuai dengan berbagai jenis build cabang yang dikelola oleh XCode Cloud (lihat lebih lanjut di bawah).

Nomor versi semver yang dihasilkan oleh semantic release pada prereleases seperti 1.0.0-alpha.1Suatu build berikutnya pada cabang ini akan meningkatkan nomor build menjadi 1.0.0-alpha.2, dll. Meskipun tidak secara eksplisit dokumentasi, nomor versi ini didukung oleh Capgo, yang merupakan berita baik bagi saya : saya akan menggunakan saluran semantic release dan prerelease untuk menghasilkan versi aplikasi saya dengan Capgo saluran.

5. Bagaimana saya bisa menggunakan Capgo untuk merilis aplikasi saya?

Untuk mengautomatisasi pengiriman paket aplikasi Anda ke Capgo, Anda perlu menggunakan perintah Capgo CLI. bundle upload. Ketik npx @capgo/cli@latest bundle upload --help untuk mendapatkan banyak pilihan unggahan. Di antara pilihan tersebut, kita akan menggunakan :

npx @capgo/cli bundle upload --channel $CHANNEL --apikey $CAPGO_APIKEY --bundle $VERSION --bundle-url $CAPGO_APPID
  • SALURAN adalah saluran Capgo ke mana kita ingin mengunggah (misalnya alpha)
  • Versi adalah dihasilkan oleh semantic release (misalnya 1.0.0-alpha.1)
  • CAPGO_APIKEY disediakan oleh Capgo untuk mengidentifikasi unik pipeline login CI/CD Anda
  • CAPGO_APPID disediakan oleh Capgo untuk mengidentifikasi aplikasi Anda (misalnya com.mystartup.mysuperapp)

6. Pengaturan rilis semantik + Capgo CapacitorUpdate

Jadi, bagaimana semua ini terintegrasi?

Paket aplikasi versi yang dibangun dengan rilis semantik dan Github Actions

Paket aplikasi versi yang dibangun dengan rilis semantik dan Github Actions

Automasi rilis semantik dengan Github Actions

Keindahan rilis semantik adalah bahwa otomatisasi pengiriman, dalam bentuk alur kerja Github Actions, sangat sederhana. Ini akan terlihat sangat mirip di platform CI/CD lain.

# ./github/workflows/release.yml

name: Release

on:
  workflow_dispatch:
  push:
    branches: [alpha, alpha-nocapgo, dev-rupert]    # <--- adapt this

env:
  CAPGO_APPID: com.mystartup.mysuperapp             # <--- adapt this
  CAPGO_APIKEY: ${{ secrets.CAPGO_APIKEY }}

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version: 24
          cache: "npm"
      - run: npm install
      - run: npx semantic-release
        env:
          DEBUG: true
          GITHUB_TOKEN: ${{ github.token }}

Hanya instal lingkungan NodeJS, kemudian panggil rilis semantik.

Untuk setiap mzerge di cabang yang terdaftar di branchesrilis semantik akan mengaktifkan pengiriman. Tetapkan CAPGO_APIKEY In repositori Anda. Perbarui CAPGO_APPID Sini.

Sikap perilaku dari rilis semantik ditetapkan dalam .releaserc.json Berikut adalah pengaturan saya, dijelaskan di bawah ini :

// .releaserc.json

{
  "branches": [
    {
      "name": "release",
      "channel": "production"
    },
    {
      "name": "alpha",
      "channel": "alpha",
      "prerelease": "alpha"
    },
    {
      "name": "alpha-nocapgo",
      "channel": "alpha",
      "prerelease": "alpha-nocapgo"
    },
    {
      "name": "dev-rupert",
      "channel": "development",
      "prerelease": "development"
    },
    {
      "name": "dev-paul",
      "channel": "development",
      "prerelease": "development"
    }
  ],
  "ci": true,
  "debug": true,
  "dryRun": false,
  "repositoryUrl": "https://github.com/RupertBarrow/mysuperapp",

  "verifyConditions": ["@semantic-release/github"],

  "plugins": [
    [
      "@semantic-release/commit-analyzer",
      {
        "preset": "angular",
        "releaseRules": [
          { "type": "breaking", "release": "major" },
          { "type": "feat", "release": "minor" },
          { "type": "fix", "release": "patch" },
          { "type": "ci", "release": "patch" },
          { "type": "doc", "release": "patch" },
          { "type": "docs", "release": "patch" },
          { "type": "refactor", "scope": "core-*", "release": "minor" },
          { "type": "refactor", "release": "patch" },

          { "scope": "no-release", "release": false }
        ]
      }
    ],

    "@semantic-release/release-notes-generator",

    ["@semantic-release/changelog", { "changelogFile": "CHANGELOG.md" }],

    [
      "@semantic-release/git",
      {
        "assets": ["package.json", "CHANGELOG.md", "ios/App/App.xcodeproj/project.pbxproj"],
        "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
      }
    ],

    ["@semantic-release/github", { "assets": ["CHANGELOG.md"] }],

    [
      "@semantic-release/exec",
      {
        "prepareCmd": "npm run build",
        "publishCmd": "npm add -D @capgo/cli && npx @capgo/cli bundle upload --channel ${branch.channel} --apikey $CAPGO_APIKEY --bundle ${nextRelease.version} --bundle-url $CAPGO_APPID"
      }
    ]
  ]
}
  • branches :
    • branches mengatur konfigurasi cabang ("nameDitautkan ke saluran Capgo (channeldan bagaimana versi prarelease akan disebut ("prereleaseContohnya, jika branch.prerelease = "development"Cabang akan masing-masing mendeploykan aplikasi ke x.y.z-development.n
    • pengiriman ke alphaand alpha-nocapgo cabang akan menerbitkan aplikasi pada alphasaluran, tetapi dengan nama prerelease yang berbeda dalam nomor versi
    • pengiriman ke cabang pengembang dev-rupertatau dev-paul akan mengirimkan kedua aplikasi ke developmentsaluran di Capgo, semua dengan yang sama developmentKata kunci pre-release dalam nomor versi
  • verifyConditions : in the first stage of semantic release, it checks that it has the correct access to Github. I hope to add an authentication check for the Capgo CLI here later
  • @semantic-release/commit-analyzer Semua hal standard tentang rilis semantik - lihat dokumentasi mereka (https://github.com/semantic-release/semantic-release?tab=readme-ov-file#format-pesan-komit)
  • @semantic-release/release-notes-generator Menghasilkan file perubahan sebagai CHANGELOG.md
  • @semantic-release/git Berikut file yang telah diperbarui oleh Ionic build aplikasi dan pekerjaan release semantik:package.json, CHANGELOG.md and ios/App/App.xcodeproj/project.pbxproj - Saya tidak membangun untuk Android, belum)
  • @semantic-release/github : Mengaitkan CHANGELOG.md berkas ke dalam rilis Github sebagai aset
  • @semantic-release/execGunakan 2 perintah ini untuk mempersiapkan pembangunan aplikasi.prepareCmddan kemudian untuk efektif membangun dan mengdeploy bundle aplikasi ke server-server Capgo.publishCmd)

You will notice that their is no fiddling around with explaining how we want the version number to be calculated and incremented, how we need to generate a changelog, a Github tag or release, etc. : everything is handled by default by semantic release, with minimal configuration.

Membangun biner baru dengan XCode Cloud

Integrating all this with XCode Cloud building new versions of the application binary is simple (I am not yet deploying on Google Play, but that build should be similar) :

  • Saya mengatur proses XCode Cloud untuk membangun ketika ada perubahan pada cabang yang saya inginkan (misalnya) production)
  • pada cabang ini, saya atur XCode Cloud untuk membangun hanya ketika CHANGELOG.md file telah diperbarui. Ini diperbarui setelah setiap versi yang dihasilkan oleh rilis semantik
  • Saya dapat memicu pembangunan pada cabang yang berbeda untuk meniru pengaliran untuk saluran yang berbeda. Pada setiap konfigurasi pembangunan XCode Cloud pada cabang yang berbeda, saya mengatur variabel lingkungan secara manual dengan nilai __CAPGO_KEEP_0__ branch.channel diatur dalam releaserc.json (ya, ini adalah duplikasi manual) dan kemudian, jika saya ingin, saya bisa mengunduh aplikasi AppStore yang berbeda untuk setiap aplikasi klien yang diinstal dari cabang rilis khusus, seperti yang disebutkan sebelumnya.

Membangun biner aplikasi di XCode Cloud dengan Capgo saluran

Membangun biner aplikasi di XCode Cloud dengan Capgo saluran

7. Kesimpulan

Kesimpulan, saya sangat senang telah dapat mengintegrasikan Capgo CapacitorUpdater ke dalam pipeline rilis semantik standar saya, dengan cepat dalam jangka waktu 14 hari trial, dan hasilnya adalah sebagai berikut:

  • nomor versi bundle dihasilkan secara otomatis oleh rilis semantik dan kompatibel dengan Capgo server
  • rilis semantik secara otomatis mengunduh bundle aplikasi Capgo, juga menggunakan Capgo saluran
  • ini sesuai dengan pembangunan XCode Cloud biner aplikasi

Next steps

Saya sedang dalam fase pengembangan aplikasi ini. Saya akan segera membuatnya tersedia untuk tester melalui TestFlight (untuk iOS). Mengingat kekuatan Capgo, saya pasti akan mengunduh versi gratis aplikasi ke AppStore untuk tes, yang akan diperbarui secara teratur dengan Capgo selama tes. Saya kemudian akan mengunduh versi lain (berbayar) aplikasi ke AppStore, di bawah rekaman lain, dan juga memperbarui itu secara teratur dengan Capgo.

I hope to add better pre-build verification of Capgo bundle upload prasyarat ke dalam konfigurasi rilis semantik saya.

Saya memiliki sekarang alur rilis semantik yang bersih, sederhana, dan dapat diulang untuk aplikasi seluler masa depan yang dikembangkan dengan Ionic + Angular + Capacitor.

Penulis - Rupert Barrow

I have over 22 years’ experience of Salesforce, as a client and user, as a partner and integrator, architect, developer, business analyst and consultant. I co-founded and co-managed Altius Services as COO and CTO for 13 years, a successful Salesforce SI partner in France, before setting off on a new adventure as a Salesforce solopreneur with my Rapido Cloud https://linkedin.com/in/rbarrow

Anda dapat melihat penawaran Salesforce kami di https://www.rapido-companion.app.

Anda dapat melihat penawaran Salesforce kami di https://www.rapido.cloud and https://www.rapido.cloud (dalam pengembangan).

Teruskan dari Cara Rapido Cloud Mengelola Rilis Semantik dengan Capgo CapacitorUpdater

Jika Anda menggunakan Cara Rapido Cloud Mengelola Rilis Semantik dengan Capgo CapacitorUpdater untuk merencanakan live update pengiriman, hubungkannya dengan Capgo Pembaruan Langsung untuk alur kerja produk dalam Capgo Live Updates, Overview Untuk detail implementasi di Ringkasan. Features Untuk detail implementasi di Fitur, untuk detail implementasi di Fitur, untuk detail implementasi di Behavior Perbarui, dan Jenis Pembaruan Untuk detail implementasi dalam Jenis Update.

Update instan untuk Capacitor aplikasi

Ketika bug layer web masih aktif, kirimkan perbaikan melalui Capgo daripada menunggu hari-hari untuk persetujuan toko aplikasi. Pengguna mendapatkan update di latar belakang sementara perubahan native tetap dalam jalur review normal.

Terbaru dari Blog kami

Capgo memberikan Anda wawasan terbaik yang Anda butuhkan untuk membuat aplikasi mobile profesional yang sebenarnya.