Langkapi ke konten utama
Studi Kasus

Bagaimana Rapido Cloud mengelola Rilis Semantik dengan Capgo CapacitorUpdater

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

Kredit Artikel

Martin Donadieu

Pengarang

Valeria

Pengulas

Jordan

Editor

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 dimiliki 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 aplikasi seluler Ionic + Angular.

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

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

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

Ketika saya pertama kali menggunakan Capgo CapacitorUpdater, saya cukup takut dengan kurva belajar untuk membuat aplikasi ini sukses, tetapi saya berhasil mengirimkan aplikasi saya ke Apple TestFlight dengan mudah.

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 !

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

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

Sekarang saya telah mengirimkan aplikasi saya ke Capgo server dengan benar, saya perlu otomatisasi ini dan mengintegrasikannya ke dalam pipeline CI/CD saya.

Inilah cara saya mengatur cabang dan model rilis saya

Untuk setiap aplikasi, baik mobile, web atau Salesforce :

  • pengembangan dilakukan pada feature/... cabang yang berasal dari main, dan mereka diintegrasikan ke main yang merupakan acuan untuk sebagian besar cabang pengembangan, di luar perawatan dan fitur khusus untuk pengiriman khusus (lebih lanjut tentang ini di bawah)
  • pengiriman dilakukan secara otomatis 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 ini dipicu oleh permintaan pull. Deploymen ini dipicu oleh pull request yang sedang diintegrasikan ke cabang deployment. Saya tidak menggunakan deploymen yang dipicu oleh tag karena semantic release mengelola tag dan semua yang lain untuk saya.

Secara singkat, 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 :

Pada cabang deployment, ketika semantic-release dipicu, 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 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.

It akan juga memperbarui semua permintaan pull yang telah diintegrasikan (Github, dalam kasus saya) dan masalah terkait dengan komentar yang menghubungkannya ke tag dan rilis. Akhirnya, dalam rilis ini Github, itu akan menambahkan aset seperti sumber code, biner jika perlu, CHANGELOG.md, dll.

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

Jadi apa yang saya inginkan rilis semantik untuk melakukan untuk Capgo adalah sebagai berikut.

Saya ingin rilis semantik menghasilkan nomor versi

Capgo telah mengembangkan dan mendokumentasikan versi mereka sendiri dari “Conventional Commits” standard-version alat, dengan fork repo mereka standard-version (https://github.com/Cap-go/standard-version) dan versi mereka sendiri capacitor-standard-version (https://github.com/Cap-go/capacitor-standard-version) serta capacitor-plugin-standard-version (https://github.com/Cap-go/capacitor-plugin-standard-version) repos. They have documented on their blog the version scheme used by Capgo in their deployemnts (https://capgo.app/blog/how-version-work-in-capgo/) yang mengikuti semver "Semantic Versioning" (https://semver.org) yang juga mengikuti (tentu saja !) semantic-release Jadi itu sangat bagus, dan merupakan kelegaan bagi saya karena saya menggunakan

secara luas. semantic-release Saya juga ingin semantik release menghasilkan pengembangan aplikasi pada saluran yang berbeda

Seperti yang disebutkan di atas, saya perlu mengembangkan versi prerelease dari cabang seperti

dan juga versi khusus pelanggan pada cabang seperti alpha, beta, nightly , dll. production-customer-jones, production-customer-doedll.

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

Nomor versi semver yang dihasilkan oleh rilis semantik pada versi pra-rilis tampak seperti 1.0.0-alpha.1. Pembangunan berikutnya pada cabang ini akan meningkatkan nomor pembangunan menjadi 1.0.0-alpha.2, dst. Meskipun tidak secara eksplisit dokumentasi, nomor versi ini didukung oleh Capgo, yang merupakan berita baik bagi saya : saya akan menggunakan saluran rilis semantik dan versi pra-rilis untuk menghasilkan versi aplikasi saya dengan saluran Capgo.

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

Untuk mengautomatisasi pengiriman paket aplikasi ke Capgo, Anda perlu menggunakan perintah Capgo CLI bundle upload. Tipe npx @capgo/cli@latest bundle upload --help untuk mendapatkan berbagai pilihan unggah. 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 yang ingin kita unggah (misal alpha)
  • VERSINYA dihasilkan oleh rilis semantik (misal 1.0.0-alpha.1)
  • CAPGO_APIKEY disediakan oleh Capgo untuk mengidentifikasi unik login CI/CD Anda
  • CAPGO_APPID disediakan oleh Capgo untuk mengidentifikasi unik aplikasi Anda (misal com.mystartup.mysuperapp)

6. Pengaturan rilis semantik saya + Capgo CapacitorUpdate

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 menginstal lingkungan NodeJS, kemudian memanggil rilis semantik.

Untuk setiap merge pada cabang yang terdaftar di branchesrilis semantik akan mengaktifkan pengiriman. Atur CAPGO_APIKEY di rahasia repository Anda. Perbarui CAPGO_APPID di sini.

context: Halaman/area: Situs web pemasaran Capgo. Peran: Kalimat situs web. Dilihat di: komponen harga/Faq.astro. Kunci pesan `di sini` (Di sini). .releaserc.json konfigurasi file. 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 menetapkan konfigurasi cabang (name), mapped to the Capgo channel (channel) dan bagaimana nomor versi pra-rilis akan disebut (prerelease). Misalnya, jika branch.prerelease = "development"nomor versi yang dihasilkan oleh semantic release akan menjadi x.y.z-development.n
    • deploymen ke alphadan alpha-nocapgo cabang akan sama-sama mendeploymen aplikasi ke saluran alphatetapi dengan nama pra-rilis yang berbeda dalam nomor versi
    • deploymen ke cabang pengembang dev-rupertatau dev-paul akan mengirimkan kedua-duanya ke saluran pada __CAPGO_KEEP_0__, semua dengan kata kunci prerelease pada nomor versi developmentsaluran pada Capgo, semua dengan kata kunci prerelease pada nomor versi developmentprerelease pada nomor versi
  • verifyConditions : Pada tahap pertama dari rilis semantik, ia memeriksa apakah memiliki akses yang benar ke Github. Saya berharap dapat menambahkan pengecekan autentikasi untuk Capgo CLI di sini kemudian
  • @semantic-release/commit-analyzer : Rilis semantik standar - lihat dokumentasi mereka (https://github.com/semantic-release/semantic-release?tab=readme-ov-file#commit-message-format)
  • @semantic-release/release-notes-generator : Membuat file riwayat perubahan sebagai CHANGELOG.md
  • @semantic-release/git : Mengirimkan berikut file yang telah diperbarui oleh Ionic build aplikasi dan oleh pekerjaan rilis semantik (package.json, CHANGELOG.md dan ios/App/App.xcodeproj/project.pbxproj context
  • @semantic-release/github dan CHANGELOG.md file to the Github release as an asset
  • @semantic-release/exec: gunakan perintah-perintah ini untuk mempersiapkan pembangunan aplikasi (prepareCmd) dan kemudian untuk membangun dan mengdeploy bundle aplikasi ke server-server Capgo (publishCmd)

Anda akan melihat bahwa tidak ada lagi perlu menjelaskan bagaimana cara menghitung dan meningkatkan versi aplikasi, bagaimana cara membuat log perubahan, tag atau rilis Github, dll. : semua itu diatur secara otomatis oleh semantic release dengan konfigurasi minimal.

Pembangunan biner baru dengan XCode Cloud

Mengintegrasikan semua ini dengan XCode Cloud untuk membangun versi baru dari aplikasi biner sangatlah mudah (saya belum mengdeploy ke Google Play, tetapi pembangunan untuk build tersebut seharusnya sama) :

  • Saya mengatur proses XCode Cloud untuk membangun ketika ada perubahan pada cabang yang saya inginkan (misalnya production)
  • Pada cabang ini, saya mengatur XCode Cloud untuk membangun hanya ketika file CHANGELOG.md diupdate. Ini diupdate setelah setiap versi yang dihasilkan oleh semantic release
  • Saya dapat memicu pembangunan pada cabang-cabang yang berbeda untuk meniru proses pengembangan untuk saluran-saluran yang berbeda. Pada setiap konfigurasi pembangunan XCode Cloud pada cabang yang berbeda, saya mengatur variabel lingkungan secara manual dengan nilai dari branch.channel yang ditetapkan pada releaserc.json (ya, ini adalah duplikasi manual) dan kemudian, jika saya ingin, saya dapat mengdeploy aplikasi AppStore yang berbeda untuk setiap aplikasi klien yang disesuaikan yang diambil dari cabang rilis yang disesuaikan, seperti yang disebutkan sebelumnya.

Pembangunan biner aplikasi pada XCode Cloud dengan saluran-saluran Capgo

Membangun biner aplikasi di XCode Cloud dengan Capgo saluran

7. Kesimpulan

Secara keseluruhan, saya sangat senang telah dapat mengintegrasikan Capgo CapacitorUpdater ke dalam pipeline rilis semantik saya secara 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 secara otomatis mengunggah Capgo bundle aplikasi, juga menggunakan Capgo saluran
  • Hal ini sesuai dengan pembangunan awan XCode dari biner aplikasi

Langkah selanjutnya

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

Saya berharap dapat menambahkan verifikasi pra-pembangunan yang lebih baik dari Capgo ke dalam konfigurasi rilis semantik saya. bundle upload Saya telah memiliki pipeline rilis semantik yang bersih, sederhana, dan dapat diulang untuk aplikasi mobile masa depan yang dikembangkan dengan Ionic + Angular + __CAPGO_KEEP_0__.

I now have a clean, simple an reproducible semantic release pipeline for future mobile apps developed with Ionic + Angular + Capacitor.

Membangun aplikasi di XCode Cloud dengan __CAPGO_KEEP_0__ saluran

I telah memiliki pengalaman lebih dari 22 tahun di Salesforce, sebagai klien dan pengguna, sebagai mitra dan integrator, arsitek, pengembang, analis bisnis dan konsultan. Saya co-founding dan co-managing Altius Services sebagai COO dan CTO selama 13 tahun, sebuah mitra SI Salesforce sukses di Perancis, sebelum memulai petualangan baru sebagai Salesforce solopreneur dengan produk saya Rapido Cloud Temukan saya di LinkedIn di

https://linkedin.com/in/rbarrow Temukan penawaran Salesforce kami di.

https://www.rapido-companion.app dan https://www.rapido.cloud (dalam pengembangan). Teruskan dari Bagaimana Rapido Cloud mengelola Release Semantik dengan __CAPGO_KEEP_0__ CapacitorUpdater

Keep going from How Rapido Cloud manage Semantic Release with Capgo CapacitorUpdater

protectedTokens How Rapido Cloud mengelola Rilis Semantik dengan Capgo CapacitorUpdater untuk merencanakan pengiriman update hidup, hubungkannya dengan Capgo Live Updates untuk alur kerja produk di Capgo Live Updates Ringkasan untuk detail implementasi di Ringkasan Fitur untuk detail implementasi di Fitur Sikap Update untuk detail implementasi di Sikap Update, dan Jenis Update __CAPGO_KEEP_0__ CapacitorUpdater

Pembaruan Langsung untuk Capacitor aplikasi

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

Bantuan Manusia dari Martin

Mulai Sekarang

Terbaru dari Blog Kami

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