Lompat ke konten utama
Studi Kasus

Bagaimana Rapido Cloud mengelola Rilis Semantik dengan Capgo CapacitorUpdater

Ini adalah cara saya mengatur rilis semantik untuk mengelola rilis aplikasi saya yang menggunakan Capgo CapacitorUpdater

Kredit Artikel

Martin Donadieu

Pengarang

Valeria

Pengulas

Jordan

Pengedit

Bagaimana Rapido Cloud mengelola Rilis Semantik dengan Capgo CapacitorUpdater

1. Pengenalan

At Rapido Cloud (www.rapido.cloudSaya sedang mengembangkan sebuah 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 pemelihara Ionic + Angular aplikasi seluler.

Artikel ini menjelaskan desain, pilihan dan implementasi saya yang membuat Capgo dan semantic-release sukses tanpa perlu berpikir keras untuk mengelola semua deployments secara otomatis melalui Github Actions. Semua ini dirancang, diuji dan dokumentasi selama periode uji coba gratis 14 hari dari Capgo CapacitorUpdater.

2. Mengapa menggunakan Capgo ? Mengapa menggunakan semantic-release ?

Capgo CapacitorUpdater menarik perhatian saya dengan janji untuk membuat proses pengiriman aplikasi seluler lebih sederhana, lebih cepat dan lebih fleksibel daripada proses pengiriman standar Apple AppStore/Google PlayStore.

Saya awalnya takut dengan kurva belajar untuk membuat ini sukses tapi saya berhasil menginstal aplikasi saya ke Apple TestFlight dengan mudah. Saya kemudian dalam posisi untuk menggunakan Capgo CapacitorUpdater untuk menginstal 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 !

Jadi Capgo CapacitorUpdater membantu saya mengupdate aplikasi saya di ponsel saya, secara langsung, 1 menit setelah menyimpan fitur baru atau perbaikan di sumber code : begitu menghibur, dan begitu fleksibel, dan mudah untuk diatur!

3. Model cabang dan rilis saya, dan bagaimana semantic-release berada di dalamnya

Sekarang saya telah menginstal aplikasi saya ke Capgo server dengan benar, saya perlu mengotomatisasi ini dan memasukkannya ke dalam pipeline CI/CD saya.

Ini adalah cara saya mengorganisir model cabang dan rilis saya

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

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

Secara sederhana, ini adalah Gitlab Flow :

Gitlab Flow

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

Catatan sampingan tentang bagaimana semantic-release bekerja :

In cabang pengembangan, ketika semantic-release diaktifkan, maka akan secara otomatis menghitung nomor versi baru pada cabang ini, tergantung pada nomor versi sebelumnya pada tag cabang dan perbaikan atau fitur yang disampaikan. Perbaikan akan membuat versi patch baru, sedangkan fitur akan membuat versi minor baru. Ini juga secara otomatis termasuk prerelease alpha, betadan lain-lain dalam nomor versi.

Semantic release menghasilkan daftar perubahan dari komit Anda, mengelompokkan perbaikan dan fitur seperti yang ditentukan dalam komit konvensional (lihat https://www.conventionalcommits.org/en/about) dan dikonfigurasi dalam semantic release.

Juga akan memperbarui semua pull request dan masalah terkait yang sudah diintegrasikan ke dalam Github dan menghubungkannya ke tag dan rilis. Akhirnya, dalam rilis ini Github, akan menambahkan aset seperti code, biner jika perlu, CHANGELOG.mddan lain-lain.

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

Jadi apa yang saya inginkan semantic release untuk lakukan pada Capgo pengembangan adalah sebagai berikut.

Saya ingin semantic release menghasilkan nomor versi

Capgo telah mengembangkan dan mendokumentasikan versi mereka sendiri dari “Conventional Commits” standard-version alat, dengan repositori mereka yang di- fork standard-version (https://github.com/Cap-go/versi-standar), dan versi mereka sendiri 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 pada blog mereka skema versi yang digunakan oleh Capgo dalam penggunaan mereka (https://capgo.app/blog/cara-versi-bekerja-di-capgo/) Bundel JavaScript mengikuti versi semver 'standar' 'Semantic Versioning' (https://semver.org) yang juga mengikuti (tentu saja !) semantic-release So itu bagus, dan merupakan kelegaan bagi saya karena saya menggunakan

]} semantic-release secara luas.

Saya juga ingin semantik release menghasilkan pengiriman aplikasi pada saluran yang berbeda.

Sebagaimana disebutkan di atas, saya perlu mengirimkan versi prerelease dari cabang seperti alpha, beta, nightly dan lain-lain. production-customer-jones, production-customer-doetetapi juga versi khusus pelanggan pada cabang seperti

Capgo provides the “channels” feature which is exactly what semantic release also supports, so I am excited to make them work together. These also fit in with the different branch builds managed by XCode Cloud (see more about this below).

__CAPGO_KEEP_0__ menyediakan fitur “saluran” yang tepat apa yang juga didukung oleh semantik release, jadi saya sangat bersemangat untuk membuat mereka bekerja sama. Fitur ini juga sesuai dengan pengiriman cabang yang berbeda yang dikelola oleh XCode Cloud (lihat lebih lanjut tentang ini di bawah). 1.0.0-alpha.1Nomor versi semver yang dihasilkan oleh semantik release pada prereleases seperti 1.0.0-alpha.2, etc. Although not documented explicitly, these version numbers are supported by Capgo, which is great news for me : I will use semantic release channels and prerelease to generate versions of my app with Capgo channels.

5. How can I use Capgo to release my application ?

To automate deployment of your app bundles to Capgo, you need to use the Capgo CLI command bundle uploadMeskipun tidak secara eksplisit dokumentasi, nomor versi ini didukung oleh __CAPGO_KEEP_0__, yang merupakan berita baik bagi saya : saya akan menggunakan saluran semantik release dan prerelease untuk menghasilkan versi aplikasi saya dengan __CAPGO_KEEP_1__ saluran dan __CAPGO_KEEP_2__ saluran. npx @capgo/cli@latest bundle upload --help untuk mendapatkan berbagai pilihan unggah.

npx @capgo/cli bundle upload --channel $CHANNEL --apikey $CAPGO_APIKEY --bundle $VERSION --bundle-url $CAPGO_APPID
  • CHANNEL is the Capgo channel to which we want to deploy (eg alpha)
  • CHANNEL adalah saluran __CAPGO_KEEP_0__ ke mana kami ingin mengirimkan (misalnya 1.0.0-alpha.1)
  • CAPGO_APIKEY is provided by Capgo to uniquely identify your CI/CD pipeline login
  • CAPGO_APIKEY disediakan oleh Capgo untuk mengidentifikasi unik login pipeline CI/CD Anda com.mystartup.mysuperapp)

Capgo_APPID disediakan oleh __CAPGO_KEEP_1__ untuk mengidentifikasi unik aplikasi (misalnya

6. Konfigurasi semantic release + __CAPGO_KEEP_0__ CapacitorUpdate saya

App bundle versions built with semantic release and Github Actions

Versi aplikasi bundel yang dibangun dengan semantic release dan Github Actions

Versi aplikasi bundel yang dibangun dengan semantic release dan Github Actions

Automasi release semantic dengan Github Actions

# ./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 }}

Keindahan dari release semantic adalah bahwa otomatisasi pengiriman, dalam bentuk alur kerja __CAPGO_KEEP_0__ Actions, sangat sederhana. Ini akan terlihat sangat mirip di platform CI/CD lainnya.

For setiap merge ke cabang yang terdaftar di branches, rilis semantik akan mengaktifkan proses deploy. Atur CAPGO_APIKEY di rahasia repository Anda. Perbarui CAPGO_APPID di sini.

perilaku rilis semantik ditentukan di file konfigurasi. .releaserc.json Konfigurasi file ini menjelaskan pengaturan cabang (

// .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 ), yang dikaitkan dengan saluran __CAPGO_KEEP_0__ (name), mapped to the Capgo channel (channel) . Misalnya, jika prereleasenomor versi yang dihasilkan oleh rilis semantik akan menjadi branch.prerelease = "development"proses deploy ke x.y.z-development.n
    • deployments to the alphadan alpha-nocapgo cabang akan mengirimkan aplikasi ke saluran, tetapi dengan nama prerelease yang berbeda dalam nomor versi alphaatau
    • akan mengirimkan ke saluran pada __CAPGO_KEEP_0__, semua dengan kata kunci prerelease yang sama dalam nomor versi dev-rupert: pada tahap pertama dari rilis semantik, ia memeriksa apakah memiliki akses yang benar ke __CAPGO_KEEP_0__. Saya berharap dapat menambahkan pengecekan autentikasi untuk __CAPGO_KEEP_1__ __CAPGO_KEEP_2__ di sini kemudian dev-paul : hal-hal standar rilis semantik - lihat dokumentasi mereka ( developmenthttps://Capgo.com/semantic-release/semantic-release?tab=readme-ov-file#commit-message-format development: menghasilkan file riwayat perubahan sebagai
  • 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 saluran pada __CAPGO_KEEP_0__, semua dengan kata kunci prerelease yang sama dalam nomor versihttps://github.com/semantic-release/semantic-release?tab=readme-ov-file#commit-message-format)
  • @semantic-release/release-notes-generator saluran CHANGELOG.md
  • @semantic-release/git : komit berikutnya file yang telah diperbarui oleh Ionic build aplikasi dan oleh pekerjaan semantic release (package.json, CHANGELOG.md dan ios/App/App.xcodeproj/project.pbxproj - Saya tidak membangun untuk Android, belum
  • @semantic-release/github : tambahkan file ke rilis __CAPGO_KEEP_0__ sebagai aset CHANGELOG.md file to the Github release as an asset
  • @semantic-release/exec) dan kemudian untuk membangun dan mengdeploy bundle aplikasi ke server __CAPGO_KEEP_0__ (prepareCmdAnda akan melihat bahwa tidak ada fiddling dengan menjelaskan bagaimana kita ingin versi nomor untuk dihitung dan ditingkatkan, bagaimana kita perlu menghasilkan log perubahan, tag Capgo atau rilis, dll. : segalanya diatur secara otomatis oleh semantic release, dengan konfigurasi minimal.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.

Mengintegrasikan semua ini dengan XCode Cloud membangun versi baru dari aplikasi biner adalah sederhana (Saya belum mengdeploy ke Google Play, tetapi pembangunan itu seharusnya sama) :

Saya mengatur proses XCode Cloud untuk membangun ketika ada perubahan pada cabang yang saya inginkan untuk digunakan (misalnya

  • Saya mengatur XCode Cloud untuk membangun hanya ketika production)
  • ada perubahan pada cabang tersebut 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 pengiriman untuk saluran yang berbeda. Pada setiap konfigurasi pembangunan XCode Cloud pada cabang yang berbeda, saya menetapkan variabel lingkungan secara manual dengan nilai dari branch.channel Ditetapkan pada releaserc.json (ya, ini adalah duplikasi manual) dan kemudian, jika saya ingin, saya dapat mengirimkan aplikasi AppStore yang berbeda untuk setiap aplikasi pelanggan yang disesuaikan yang diunduh dari cabang rilis yang disesuaikan, seperti yang disebutkan sebelumnya.

Membangun biner aplikasi pada XCode Cloud dengan Capgo saluran

Membangun biner aplikasi pada 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 percobaan, dan hasilnya adalah sebagai berikut :

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

Langkah selanjutnya

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

Saya berharap dapat menambahkan verifikasi pra-pembangunan yang lebih baik dari Capgo ke konfigurasi rilis semantik saya. bundle upload prasyarat

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

Pengarang - Rupert Barrow

Saya memiliki lebih dari 22 tahun pengalaman dengan Salesforce, sebagai klien dan pengguna, sebagai mitra dan integrator, arsitek, pengembang, analis bisnis, dan konsultan. Saya mendirikan dan mengelola Altius Services sebagai COO dan CTO selama 13 tahun, sebuah mitra SI Salesforce sukses di Perancis, sebelum melanjutkan petualangan baru sebagai solopreneur Salesforce dengan produk penawaran saya di Saya memiliki produk penawaran di Anda dapat menemukan saya di LinkedIn di

https://linkedin.com/in/rbarrow Anda dapat melihat penawaran Salesforce kami di .

https://www.rapido-companion.app Saya telah memiliki alur rilis semantik yang bersih, sederhana, dan dapat diulang kembali untuk aplikasi mobile masa depan yang dikembangkan dengan Ionic + Angular + __CAPGO_KEEP_0__. dan 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 pengiriman pembaruan hidup, hubungkannya dengan Capgo Live Updates for the product workflow in Capgo Live Updates, untuk detail implementasi di Overview, Ringkasan untuk detail implementasi di Ringkasan, untuk detail implementasi di Fitur Pengaturan Perbarui untuk detail implementasi di Pengaturan Perbarui, dan Jenis Perbarui untuk detail implementasi di Jenis Perbarui.

Live updates for Capacitor apps

Update Langsung untuk Aplikasi Capgo

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

Bantuan Manusia dari Martin

Mulai Sekarang

Capgo gives you the best insights you need to create a truly professional mobile app.