{"id":20198734,"url":"https://github.com/eclipsesource/tabris-connect-migration-guide","last_synced_at":"2026-05-27T23:32:36.804Z","repository":{"id":139304438,"uuid":"577379045","full_name":"eclipsesource/tabris-connect-migration-guide","owner":"eclipsesource","description":null,"archived":false,"fork":false,"pushed_at":"2023-06-30T16:50:55.000Z","size":1006,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":12,"default_branch":"master","last_synced_at":"2026-01-13T18:26:43.565Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eclipsesource.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-12T15:53:29.000Z","updated_at":"2025-04-22T02:09:25.000Z","dependencies_parsed_at":"2023-07-09T17:31:11.680Z","dependency_job_id":null,"html_url":"https://github.com/eclipsesource/tabris-connect-migration-guide","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eclipsesource/tabris-connect-migration-guide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipsesource%2Ftabris-connect-migration-guide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipsesource%2Ftabris-connect-migration-guide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipsesource%2Ftabris-connect-migration-guide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipsesource%2Ftabris-connect-migration-guide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eclipsesource","download_url":"https://codeload.github.com/eclipsesource/tabris-connect-migration-guide/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipsesource%2Ftabris-connect-migration-guide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33588345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T04:33:41.972Z","updated_at":"2026-05-27T23:32:36.778Z","avatar_url":"https://github.com/eclipsesource.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tabris Connect to Github Actions migration guide\n\n## Prerequisites:\n\n- Github repository with source code of the application. Or you can fork this repository to have a pre-configured template.\n- Apple certificate (development or distribution) with corresponding iOS provisioning profile\n  - `*.p12` file (incl passphrase if certificate was encrypted)\n  - `*.mobileprovision` file\n- Android signing key and its alias/passwords\n- Github workflows [documentation](https://docs.github.com/en/actions/using-workflows) in case if customization of the build job is needed.\n\n### iOS\n#### Development build\n\n1. Please read \"[Create secrets for your certificate and provisioning profile](https://docs.github.com/en/actions/deployment/deploying-xcode-applications/installing-an-apple-certificate-on-macos-runners-for-xcode-development)\" section of \"Installing an Apple certificate on macOS runners for Xcode development\" guide first.\n\n   \u003e The signing process involves storing certificates and provisioning  profiles, transferring them to the runner, importing them to the  runner's keychain, and using them in your build.\n   \u003e\n   \u003e To use your certificate and provisioning profile on a runner, we  strongly recommend that you use GitHub secrets. For more information on  creating secrets and using them in a workflow, see \"[Encrypted secrets](https://docs.github.com/en/actions/reference/encrypted-secrets).\"\n   \u003e\n   \u003e Create secrets in your repository or organization for the following items:\n   \u003e\n   \u003e - Your Apple signing certificate.\n   \u003e\n   \u003e   - This is your `p12` certificate file. For more information on exporting your signing certificate from Xcode, see the [Xcode documentation](https://help.apple.com/xcode/mac/current/#/dev154b28f09).\n   \u003e\n   \u003e   - You should convert your certificate to Base64 when saving it as a secret. In this example, the secret is named `IOS_DEVELOPMENT_BUILD_CERTIFICATE_BASE64`.\n   \u003e\n   \u003e   - Use the following command to convert your certificate to Base64 and copy it to your clipboard:\n   \u003e\n   \u003e     ```shell\n   \u003e     base64 -i BUILD_CERTIFICATE.p12 | pbcopy\n   \u003e     ```\n   \u003e\n   \u003e - The password for your Apple signing certificate.\n   \u003e\n   \u003e   - In this example, the secret is named `IOS_P12_PASSWORD`.\n   \u003e\n   \u003e - Your Apple provisioning profile.\n   \u003e\n   \u003e   - For more information on exporting your provisioning profile from Xcode, see the [Xcode documentation](https://help.apple.com/xcode/mac/current/#/deva899b4fe5).\n   \u003e\n   \u003e   - You should convert your provisioning profile to Base64 when saving it as a secret. In this example, the secret is named `IOS_DEVELOPMENT_BUILD_PROVISION_PROFILE_BASE64`.\n   \u003e\n   \u003e   - Use the following command to convert your provisioning profile to Base64 and copy it to your clipboard:\n   \u003e\n   \u003e     ```shell\n   \u003e     base64 -i PROVISIONING_PROFILE.mobileprovision | pbcopy\n   \u003e     ```\n   \u003e\n   \u003e - A keychain password.\n   \u003e\n   \u003e   - A new keychain will be created on the runner, so the password for  the new keychain can be any new random string. In this example, the  secret is named `KEYCHAIN_PASSWORD`.\n\n2. Follow steps below to complete the tasks described above:\n\n   - Open Actions Secrets Settings page of your repository:\n     ```\n     https://github.com/your-org/your-repository/settings/secrets/actions\n     ```\n\n   - Add following repository secrets:\n\n   - Base64 encoded **development** Apple signing certificate with name: `IOS_DEVELOPMENT_BUILD_CERTIFICATE_BASE64`\n\n   - Base64 encoded **distribution** Apple signing certificate with name: `IOS_RELEASE_BUILD_CERTIFICATE_BASE64`\n\n   - Passphrase used for encrypting the certificates, we used the same one for both. Do not base64 encode. Use name: `IOS_P12_PASSWORD`\n   - Base64 encoded **development** provisioning profile. Use name: `IOS_DEVELOPMENT_BUILD_PROVISION_PROFILE_BASE64`.\n   - Base64 encoded **distribution** provisioning profile. Use name: `IOS_RELEASE_BUILD_PROVISION_PROFILE_BASE64`.\n   - Any new random string that will be used as keychain password, use name: `IOS_KEYCHAIN_PASSWORD`. We used 32 character alphanumeric string generated with following command: ```pwgen 32 1```\n\n3. Create signing configuration file. In `./cordova` directory in your repo create `build.json` file.\n\n4. Copy following contents into newly created file. Use yours provisioning profile identifiers.\n   Open your provisioning profile with any plain text editor, search for `UUID` key and use corresponding string value below the key.\n\n   \u003e Note: if you do not plan to build both: debug and release apps, you can define only one signing configuration.\n\n   ```json\n   {\n     \"ios\": {\n       \"debug\": {\n         \"codeSignIdentity\": \"Apple Development\",\n         \"packageType\": \"development\",\n         \"provisioningProfile\": \"a82715ba-56f9-4ef1-ac01-b91040293a1c\"\n       },\n       \"release\": {\n         \"codeSignIdentity\": \"Apple Distribution\",\n         \"packageType\": \"app-store\",\n         \"provisioningProfile\": \"c47b89fb-bec9-4682-861e-f88b0597b63a\"\n       }\n     }\n   }\n   ```\n\n5. In root directory of the repository with source code of the application, create following directories hierarchy `.github/workflows`.\n\n   ```shell\n   mkdir -p .github/workflows\n   ```\n\n6. Create a new file called `ios-app-build.yaml` inside of the newly created directory.\n\n   ```shell\n   touch .github/workflows/ios-app-build.yaml\n   ```\n\n7. Copy following YAML contents into the created file\n   ```yaml\n   name: Build iOS app\n\n   on:\n     push:\n       branches:\n         - main\n\n   jobs:\n     build-ios:\n       runs-on: macos-latest\n       name: Build iOS application\n       steps:\n\n         - name: Install the Apple certificate and provisioning profile\n           env:\n             BUILD_CERTIFICATE_BASE64: ${{ secrets.IOS_DEVELOPMENT_BUILD_CERTIFICATE_BASE64 }}\n             P12_PASSWORD: ${{ secrets.IOS_P12_PASSWORD }}\n             BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.IOS_DEVELOPMENT_BUILD_PROVISION_PROFILE_BASE64 }}\n             KEYCHAIN_PASSWORD: ${{ secrets.IOS_KEYCHAIN_PASSWORD }}\n           run: |\n             # create variables\n             CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12\n             PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision\n             KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db\n\n             # import certificate and provisioning profile from secrets\n             echo -n \"$BUILD_CERTIFICATE_BASE64\" | base64 --decode --output $CERTIFICATE_PATH\n             echo -n \"$BUILD_PROVISION_PROFILE_BASE64\" | base64 --decode --output $PP_PATH\n\n             # create temporary keychain\n             security create-keychain -p \"$KEYCHAIN_PASSWORD\" $KEYCHAIN_PATH\n             security set-keychain-settings -lut 21600 $KEYCHAIN_PATH\n             security unlock-keychain -p \"$KEYCHAIN_PASSWORD\" $KEYCHAIN_PATH\n\n             # import certificate to keychain\n             security import $CERTIFICATE_PATH -P \"$P12_PASSWORD\" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH\n             security list-keychain -d user -s $KEYCHAIN_PATH\n\n             # apply provisioning profile\n             mkdir -p ~/Library/MobileDevice/Provisioning\\ Profiles\n             cp $PP_PATH ~/Library/MobileDevice/Provisioning\\ Profiles\n\n         - name: Checkout\n           uses: actions/checkout@v3\n           with:\n             fetch-depth: 1\n\n         - name: Install tabris-cli\n           run: npm install -g tabris-cli\n\n         - name: Install application dependencies\n           run: |\n           \tnpm run --if-present prepare\n           \tnpm install\n\n         - name: Build application\n           run: |\n             tabris build ios --debug --device --verbose\n\n         - name: Prepare artifacts for archival\n           run: |\n             mkdir -p artifacts\n             printenv | grep GITHUB_ \u003e artifacts/env-gha\n             cp -R \\\n               \"$(find . -iname \"*.app.dSYM\")\" \\\n               \"$(find . -iname \"*.ipa\")\" \\\n               artifacts\n             tar cf artifacts.tar artifacts\n\n         - name: Archive metadata\n           uses: actions/upload-artifact@v3\n           with:\n             name: artifacts.tar\n             path: artifacts.tar\n             retention-days: 30\n\n         - name: Cleanup\n           if: always()\n           run: |\n             security delete-keychain $RUNNER_TEMP/app-signing.keychain-db\n             rm ~/Library/MobileDevice/Provisioning\\ Profiles/build_pp.mobileprovision\n   ```\n\n8. Commit changes and push to Github. Build should start automatically and you can observe its progress here:\n\n    ```\n    https://github.com/your-org/your-repository/actions\n    ```\n\n\n\n## Parameterized build (release or debug)\n\nYou can have a parameterized job that can produce development or distribution build, depending on input variable. This workflow has to be triggered manually on Github. Create another yaml file, named `ios-app-build-manual.yaml`. It will never be executed automatically, but you can trigger it from withing Githubs web UI manually. Use following build configuration:\n\n```yaml\nname: Manual iOS app build\n\non:\n  workflow_dispatch:\n    inputs:\n      build_type:\n        description: '`debug` or `release`'\n        required: true\n        default: 'debug'\n\njobs:\n  build-ios:\n    runs-on: macos-latest\n    name: Build iOS application\n    steps:\n\n      - name: Install the Apple certificate and provisioning profile\n        env:\n          BUILD_CERTIFICATE_BASE64: ${{ github.event.inputs.build_type == 'release' \u0026\u0026 secrets.IOS_RELEASE_BUILD_CERTIFICATE_BASE64 || secrets.IOS_BUILD_CERTIFICATE_BASE64 }}\n          P12_PASSWORD: ${{ secrets.P12_PASSWORD }}\n          BUILD_PROVISION_PROFILE_BASE64: ${{  github.event.inputs.build_type == 'release' \u0026\u0026 secrets.RELEASE_BUILD_PROVISION_PROFILE_BASE64 || secrets.BUILD_PROVISION_PROFILE_BASE64 }}\n          KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}\n        run: |\n          # create variables\n          CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12\n          PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision\n          KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db\n\n          # import certificate and provisioning profile from secrets\n          echo -n \"$BUILD_CERTIFICATE_BASE64\" | base64 --decode --output $CERTIFICATE_PATH\n          echo -n \"$BUILD_PROVISION_PROFILE_BASE64\" | base64 --decode --output $PP_PATH\n\n          # create temporary keychain\n          security create-keychain -p \"$KEYCHAIN_PASSWORD\" $KEYCHAIN_PATH\n          security set-keychain-settings -lut 21600 $KEYCHAIN_PATH\n          security unlock-keychain -p \"$KEYCHAIN_PASSWORD\" $KEYCHAIN_PATH\n\n          # import certificate to keychain\n          security import $CERTIFICATE_PATH -P \"$P12_PASSWORD\" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH\n          security list-keychain -d user -s $KEYCHAIN_PATH\n\n          # apply provisioning profile\n          mkdir -p ~/Library/MobileDevice/Provisioning\\ Profiles\n          cp $PP_PATH ~/Library/MobileDevice/Provisioning\\ Profiles\n\n      - name: Checkout\n        uses: actions/checkout@v3\n        with:\n          fetch-depth: 1\n\n      - name: Install tabris-cli\n        run: npm install -g tabris-cli\n\n      - name: Install application dependencies\n        run: |\n        \tnpm run --if-present prepare\n        \tnpm install\n\n      - name: Build application\n        run: |\n          tabris build ios --${{ github.event.inputs.build_type }} --device --verbose\n\n      - name: Prepare artifacts for archival\n        run: |\n          mkdir -p artifacts\n          printenv | grep GITHUB_ \u003e artifacts/env-gha\n          cp -R \\\n            \"$(find . -iname \"*.app.dSYM\")\" \\\n            \"$(find . -iname \"*.ipa\")\" \\\n            artifacts\n          tar cf artifacts.tar artifacts\n\n      - name: Archive metadata\n        uses: actions/upload-artifact@v3\n        with:\n          name: artifacts.tar\n          path: artifacts.tar\n          retention-days: 30\n\n      - name: Cleanup\n        if: always()\n        run: |\n          security delete-keychain $RUNNER_TEMP/app-signing.keychain-db\n          rm ~/Library/MobileDevice/Provisioning\\ Profiles/build_pp.mobileprovision\n```\n\nPush changes to Github.\n\nThis workflow has to be triggered manually on Github. Go to \"Actions\" tab, select \"Build iOS app\" workflow in the left side sidebar. In the main part of the view, just below table header there should be an information about available `workflow_dispatch` trigger. Right to that message \"Run workflow\" button can be used for triggering a build.\n\n![workflow_dispatch](./workflow_dispatch.png)\n\n### Android\n\n1. Provide signing key and its alias/passwords in the github project settings under `Security -\u003e Actions -\u003e Repository Secrets`.\n\n    The following keys need to be used:\n\n      * `ANDROID_APP_BUNDLE_KEYSTORE_PASSWORD`\n      * `ANDROID_APP_BUNDLE_KEY_ALIAS`\n      * `ANDROID_APP_BUNDLE_KEY_PASSWORD`\n      * `ANDROID_APP_BUNDLE_SIGNING_KEY` (base64 encoded)\n      * `TABRIS_BUILD_KEY` (already created during the iOS setup step)\n\n    Note that the `ANDROID_APP_BUNDLE_SIGNING_KEY` has to be in Java keystore format (*.jks) and base64 encoded. When a new key is created it is advisable to follow the  [Android key generation documentation](https://developer.android.com/studio/publish/app-signing#generate-key).\n\n2. Create a new file called `android-app-build.yaml` inside of the `.github/workflows/` directors.\n\n   ```shell\n   touch .github/workflows/android-app-build.yaml\n   ```\n\n3. Insert the following script into the yaml file.\n\n    ```yml\n    name: Build Tabris.js app for Android\n\n    on:\n      push:\n        branches:\n          - main\n\n    jobs:\n      build_android_app:\n\n        runs-on: ubuntu-latest\n\n        steps:\n          - name: Checkout source\n            uses: actions/checkout@v3.1.0\n\n          - name: Setup java\n            uses: actions/setup-java@v3.6.0\n            with:\n              distribution: adopt\n              java-version: 11\n\n          - name: Setup gradle\n            uses: gradle/gradle-build-action@v2.3.3\n\n          - name: Install tabris-cli\n            run: npm install -g tabris-cli\n\n          - name: Install application dependencies\n            run: |\n              npm run --if-present prepare\n              npm install\n\n          - name: Execute build\n            run: |\n              tabris build --release android -- --packageType=bundle\n\n          - name: Sign release app bundle\n            uses: r0adkll/sign-android-release@v1.0.4\n            id: sign_app\n            with:\n              releaseDirectory: build/cordova/platforms/android/app/build/outputs/bundle/release\n              signingKeyBase64: ${{ secrets.ANDROID_APP_BUNDLE_SIGNING_KEY }}\n              keyStorePassword: ${{ secrets.ANDROID_APP_BUNDLE_KEYSTORE_PASSWORD }}\n              alias: ${{ secrets.ANDROID_APP_BUNDLE_KEY_ALIAS }}\n              keyPassword: ${{ secrets.ANDROID_APP_BUNDLE_KEY_PASSWORD }}\n\n          - name: Store signed app bundle\n            uses: actions/upload-artifact@v3.1.1\n            with:\n              name: signed-app-bundle\n              path: ${{ steps.sign_app.outputs.signedReleaseFile }}\n              retention-days: 7\n    ```\n\n4. Push changes to Github and observe the app build.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipsesource%2Ftabris-connect-migration-guide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feclipsesource%2Ftabris-connect-migration-guide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipsesource%2Ftabris-connect-migration-guide/lists"}