Zum Hauptinhalt springen
Fallstudie

Wie Rapido Cloud Capgo CapacitorUpdater für die semantische Veröffentlichung verwendet

This is how I set up semantic release to manage releases of my applications which use Capgo CapacitorUpdater

How Rapido Cloud manage Semantic Release with Capgo CapacitorUpdater

1. Einleitung

Bei Rapido Cloud (www.rapido.cloud), I am developing a mobile application for Salesforce clients to easily deploy their own branded mobile application without having to go through the difficult loops of using the Salesforce Mobile SDK or the Salesforce Mobile Publisher.

I have developed this mobile app on a modern and “standard” platform with widespread components and tools including Ionic 8, Angular 18, TypeScript, Capacitor and now Capgo CapacitorUpdater. These are more simple to handle for clients who do not want to manage Salesforce platform specifics such as Lightning Web Components; and its easier and cheaper for me to recruit developers and maintainers of Ionic + Angular mobile applications.

This article explains my design, my choices and implementation which make Capgo and semantic-release ein sehr erfolgreiches Low-Hang-Frucht für die automatische Verwaltung aller Bereitstellungen über Github Actions ermöglicht. Alles wurde während der schönen 14-tägigen kostenlosen Testzeit von Capgo CapacitorUpdater entworfen, getestet und dokumentiert.

2. Warum Capgo verwenden? Warum semantic-release verwenden?

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.

I was rather afraid of the learning curve to make this successful but I got my app onto Apple TestFlight quite easily. I was then in position to use Capgo CapacitorUpdater to deploy my updates much faster.

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 halfierte mir die Aktualisierung meiner Anwendung auf meinem Mobilgerät, live, 1 Minute nach dem Speichern einer neuen Funktion oder eines Fixes in meinem Quellcode code : so erleichternd und so flexibel und leicht zu konfigurieren !

3. Mein Branching- und Release-Modell und wie semantic-release hineinpasst

Jetzt habe ich meine Lieferung auf Capgo-Servern korrekt eingerichtet, ich muss dies automatisieren und in meine CI/CD-Pipeline einfügen.

Dies ist meine Organisation meines Branching- und Release-Modells

Für jede Anwendung, sei es mobile, Web oder Salesforce :

  • Entwicklung wird durchgeführt auf feature/... Zweigen ab main, und sie werden in main welches das Referenzpunkt für die meisten Entwicklungsbranchen ist, außerhalb von Wartung und spezifischen Funktionen für benutzerdefinierte Lieferungen (mehr dazu unten)
  • Deployments werden ausgelöst aus Release-Zweigen welche möglicherweise : production, Vorabversionen (alpha, beta, nightly, usw.) und auch Kunden- oder Kontextspezifische Zweig für benutzerdefinierte Lieferungen
  • Deployments werden durch einen Pull-Request ausgelöst Deployments werden durch einen Pull-Request ausgelöst, da ich keine tag-gesteuerten Deployments verwende, da semantic release die Tags und alles andere für mich verwaltet.

Im Grunde ist dies der Gitlab Flow :

Gitlab Flow

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

Eine Nebenbemerkung zu wie semantic-release funktioniert :

In einem Deployment-Zweig, wenn semantic-release ausgelöst wird, wird es automatisch die neue Versionsnummer auf diesem Zweig berechnen, je nach Versionsnummer des vorherigen Tags auf dem Zweig und den gelieferten Fixes oder Features. Fixes werden eine neue Patchversion erstellen, während Features eine neue Minorversion erstellen. Es wird auch automatisch die Vorabversion alpha, beta, usw. in der Versionsnummer einbeziehen.

Semantic release generiert die Änderungsliste aus Ihren Commits, gruppiert Fixes und Features wie in conventional Commits (siehe https://www.conventionalcommits.org/de/ueber) und konfiguriert in semantic release.

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. Zweige, Releases/Vorversionen, Kanäle in semantic release und in Capgo

So was ich von semantic release für Capgo-Deployments erwarten möchte, ist Folgendes.

Ich möchte, dass semantic release die Versionsnummer generiert.

Capgo have developed and documented their own version of the “Conventional Commits” standard-version Binärdateien falls erforderlich usw. erfolgen. standard-version (https://github.com/Cap-go/standard-version__CAPGO_KEEP_0__ capacitor-standard-version (https://github.com/Cap-go/capacitor-standard-version) sowie auch capacitor-plugin-standard-version (https://github.com/Cap-go/capacitor-Plugin-Standardversion) Repositories. Sie haben auf ihrem Blog die Versionsnummerierung beschrieben, die Capgo in ihren Bereitstellungen verwendet (https://capgo.app/blog/wie-versionen-in-capgo-funktionieren/) JavaScript-Bundles folgen der 'standard' semver 'Semantic Versioning' (https://semver.org) which semantic-release auch folgt (natürlich !)

Das ist großartig und eine Erleichterung für mich, da ich semantic-release extensively.

Ich möchte auch, dass semantic release App-Deployments auf verschiedenen Kanälen generiert

As erwähnt oben, muss ich eine Vorschauversion von Zweigen wie alpha, beta, nightly etc., aber auch Kunden spezifische Versionen auf Zweigen wie production-customer-jones, production-customer-doe, etc.

Capgo bietet die „Kanäle“-Funktion, die genau das unterstützt, was auch semantic release unterstützt, also bin ich begeistert, sie zusammenzubringen. Diese passen auch zu den verschiedenen Zweig-Builder, die von XCode Cloud verwaltet werden (siehe mehr darüber unten).

Semver-Versionen, die von semantic release auf Vorschauversionen generiert werden, sehen wie 1.0.0-alpha.1Successive Builds auf diesem Zweig werden die Buildnummer um eins erhöhen auf 1.0.0-alpha.2, etc. Obwohl dies nicht explizit dokumentiert ist, werden diese Versionsnummern von Capgo unterstützt, was großartige Nachrichten für mich ist: Ich werde semantic release-Kanäle und Vorschauversionen verwenden, um Versionen meiner App mit Capgo-Kanälen zu generieren.

5. Wie kann ich Capgo verwenden, um meine Anwendung zu veröffentlichen ?

Um die Bereitstellung Ihrer App-Bundles zu Capgo zu automatisieren, müssen Sie den Capgo CLI-Befehl verwenden bundle upload. Typen npx @capgo/cli@latest bundle upload --help um die zahlreichen Upload-Optionen zu erhalten. Unter denen werden wir die folgenden verwenden :

npx @capgo/cli bundle upload --channel $CHANNEL --apikey $CAPGO_APIKEY --bundle $VERSION --bundle-url $CAPGO_APPID
  • CHANNEL ist der Capgo-Kanal, auf den wir deployen möchten (z.B. alpha)
  • VERSION wird durch semantic release generiert (z.B. 1.0.0-alpha.1)
  • CAPGO_APIKEY wird von Capgo zur eindeutigen Identifizierung Ihres CI/CD-Pipelines-Logins bereitgestellt
  • CAPGO_APPID wird von Capgo zur eindeutigen Identifizierung Ihrer Anwendung (z.B. com.mystartup.mysuperapp)

6. Meine semantic release + Capgo CapacitorUpdate-Einrichtung

Schließlich passt sich alles zusammen?

Mit semantic release und Github Actions erstellte App-Bundle-Versionen

Mit semantic release und Github Actions erstellte App-Bundle-Versionen

Semantic release-Automatisierung mit Github Actions

Die Schönheit von semantic release besteht darin, dass die Bereitstellungsautomatisierung in Form einer Github-Action-Workflow sehr einfach ist. Dies wird auf anderen CI/CD-Plattformen sehr ähnlich aussehen.

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

Dies installiert einfach die NodeJS-Umgebung und ruft dann semantic release auf.

Für jeden Merge auf einer in branchessemantic release wird für jeden Merge auf einer in CAPGO_APIKEY In Ihrem Repository-Schlüssel. Aktualisieren Sie Ihr CAPGO_APPID Hier.

Die Verhaltensweise von semantic release wird in ihrem .releaserc.json Konfigurationsdatei. Hier sind meine Einstellungen, wie unten erklärt:

// .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 Konfiguriert die Verhaltensweise der Zweige (name ), die dem Capgo Kanal ( channel) und wie die Versionsnummer der Vorkonfiguration genannt wird ("prereleaseBeispielsweise, wenn branch.prerelease = "development"Die von semantic release generierte Versionsnummer wird x.y.z-development.n
    • Deployments auf alphaand alpha-nocapgo Zweige werden beide die App auf das alphaKanal, aber mit unterschiedlichen Voreinstellungen in der Versionsnummer
    • Implementierungen auf den Entwicklerzweigen dev-rupertoder dev-paul werden beide auf den developmentKanal auf Capgo deployen, alle mit derselben developmentVoreinstellungs-Schlüsselwort in der Versionsnummer
  • verifyConditions : Im ersten Stadium der semantischen Veröffentlichung überprüft es, ob es die richtigen Zugriffsrechte auf Github hat. Ich hoffe, ich kann eine Authentifizierungsprüfung für den Capgo CLI hier später hinzufügen
  • @semantic-release/commit-analyzer : Standardmäßige semantische Veröffentlichung - siehe ihre Dokumentation (https://github.com/semantic-release/semantic-release?tab=README-ov-file#commit-message-format)
  • @semantic-release/release-notes-generator : Erstelle das Changelog-File als CHANGELOG.md
  • @semantic-release/git Die folgenden Dateien werden mit dem Ionic-Build der Anwendung und durch die Arbeit mit semantic release aktualisiert und werden daher mit dem Commit übernommen:package.json, CHANGELOG.md und ios/App/App.xcodeproj/project.pbxproj - Ich baue noch nicht für Android, noch nicht)
  • @semantic-release/github : füge dem CHANGELOG.md Datei als Asset zur Github-Veröffentlichung hinzu
  • @semantic-release/exec: verwende diese 2 Befehle, um die App-Build vorzubereiten (prepareCmd) und dann effektiv die App-Bundle auf die Capgo-Server zu deployen (publishCmd)

Sie werden feststellen, dass keine Zeit damit verbracht wird, zu erklären, wie wir die Versionsnummer berechnen und erhöhen möchten, wie wir eine Änderungsliste, eine Github-Marke oder -Veröffentlichung generieren müssen, usw. : Alles wird von semantic release standardmäßig mit minimaler Konfiguration gehandhabt.

Erstellung neuer Binärdateien mit XCode Cloud

Integrieren Sie alle diese Funktionen mit der Erstellung neuer Versionen des Anwendungsbinärs mit XCode Cloud. (Ich baue noch nicht auf Google Play, aber die Build sollte ähnlich sein) :

  • Ich stelle einen XCode Cloud-Prozess ein, um zu bauen, wenn es eine Änderung auf der von mir gewünschten Branch gibt (z.B. production)
  • auf dieser Branch setze ich XCode Cloud ein, um nur zu bauen, wenn die CHANGELOG.md Datei aktualisiert wird. Dies wird nach jeder von semantic release generierten Version aktualisiert
  • Ich kann Builds auf verschiedenen Branches auslösen, um die Bereitstellung für verschiedene Kanäle zu simulieren. In jeder Konfiguration von XCode Cloud-Build auf einem anderen Branch setze ich eine Umgebungsvariable manuell mit dem Wert der branch.channel setzt in releaserc.json (ja, dies ist eine manuelle Duplikation) und dann, wenn ich wollte, könnte ich ein anderes AppStore-Anwendungsprogramm für jede benutzerdefinierte Kundenanwendung bereitstellen, die aus einer benutzerdefinierten Release-Zweig bereitgestellt wird, wie bereits erwähnt.

Erstellen von App-Dateien auf XCode Cloud mit Capgo-Kanälen

Erstellen von App-Dateien auf XCode Cloud mit Capgo-Kanälen

Zusammenfassend bin ich sehr glücklich, __CAPGO_KEEP_0__ CapacitorUpdater in meine Standard-Semantik-Release-Pipeline integriert zu haben, schnell innerhalb der Verzögerung der 14-Tage-Testdauer, und das Ergebnis ist wie folgt:

In conclusion, I am very happy to have been able to integrate Capgo CapacitorUpdater into my standard semantic release pipeline, rapidly within the delay of the 14-day trial period, and the result is the following :

  • Die Versionszahlen der Pakete werden automatisch von semantic release generiert und sind mit den Capgo-Servern kompatibel.
  • semantic release deployt automatisch Capgo Anwendungs- Bundle, nutzt auch Capgo Kanäle
  • dies passt gut zu XCode Cloud-Builds von Anwendungsbinären

Nächste Schritte

I am currently in the development phase of this app. I will quickly make it available to testers through TestFlight (for iOS). Considering the power of Capgo, I will most certainly deploy a free version of the app to the AppStore for tests, which will be updated regularly with Capgo during tests. I will then deploy another (paid) version of the app on the AppStore, under another record, and also update that regularly with Capgo.

Ich hoffe, ich kann bessere Prüfungen vor der Buildphase für Capgo hinzufügen. bundle upload Voraussetzungen in meine semantic release-Konfiguration einfügen.

Ich habe jetzt eine saubere, einfache und reproduzierbare semantic release Pipeline für zukünftige mobile Apps, die mit Ionic + Angular + Capacitor entwickelt werden.

Autor - Rupert Barrow

Ich habe über 22 Jahre Erfahrung mit Salesforce, als Kunde und Benutzer, als Partner und Integrator, Architekt, Entwickler, Geschäftsanalytiker und Berater. Ich gründete und leitete Altius Services als COO und CTO für 13 Jahre, ein erfolgreicher Salesforce-Partner in Frankreich, bevor ich mich auf eine neue Abenteuer als Salesforce-Solopreneur mit meinem Rapido Cloud Produktangebot

Sie finden mich auf LinkedIn bei https://linkedin.com/in/rbarrow.

Sie können unsere Salesforce-Angebote auf unserer Website ansehen https://www.rapido-companion.app und https://www.rapido.cloud (unter Entwicklung).

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

Wenn Sie __CAPGO_KEEP_0__ verwenden How Rapido Cloud manage Semantic Release with Capgo CapacitorUpdater um live update Lieferungen zu planen, verbinden Sie es mit Capgo Live Updates für den Produktworkflow in Capgo Live Updates Übersicht für die Implementierungsdetails in Übersicht Funktionen für die Implementierungsdetails in Funktionen Aktualisierungsverhalten Für die Implementierungsdetails in der Updateverhaltensweise und Update-Typen Für die Implementierungsdetails in den Update-Typen.

Live-Updates für Capacitor-Apps

Wenn ein Web-Schicht-Bug live ist, schicken Sie die Reparatur über Capgo anstatt Tage auf die Genehmigung des App-Store zu warten. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Prozess bleiben.

Neueste von unserem Blog

Capgo bietet Ihnen die besten Einblicke, die Sie benötigen, um eine wirklich professionelle Mobil-App zu erstellen.