Skip to content

Bump version

Bump version #600

Workflow file for this run

name: Release
on:
push:
tags:
- "builds/*"
env:
APP_STORE_CONNECT_API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
TESTFLIGHT_PREFACE: ${{ vars.TESTFLIGHT_PREFACE }}
APPLE_ROOT: app-apple
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
validate_codebase:
name: Validate codebase
runs-on: macos-26
timeout-minutes: 15
steps:
- uses: partout-io/action-prepare-xcode-build@master
with:
access-token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
certificates-url: ${{ vars.CERTIFICATES_URL }}
certificates-passphrase: ${{ secrets.CERTIFICATES_PASSPHRASE }}
- name: Save app version
id: app_version
working-directory: ${{ env.APPLE_ROOT }}
run: |
VERSION=`ci/version-number.sh`
BUILD=`ci/build-number.sh`
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "build=$BUILD" >> $GITHUB_OUTPUT
- name: Validate translations
run: |
scripts/clean-translations.sh
- name: Run Apple tests
run: |
ci/run-apple-tests.sh
- name: Run Partout tests
run: |
ci/run-partout-tests.sh
outputs:
version: ${{ steps.app_version.outputs.version }}
build: ${{ steps.app_version.outputs.build }}
build_upload:
name: Upload to App Store Connect
runs-on: macos-26
needs: validate_codebase
strategy:
fail-fast: true
matrix:
platform: ["iOS", "macOS", "tvOS"]
steps:
- uses: partout-io/action-prepare-xcode-build@master
with:
access-token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
certificates-url: ${{ vars.CERTIFICATES_URL }}
certificates-passphrase: ${{ secrets.CERTIFICATES_PASSPHRASE }}
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Archive app
working-directory: ${{ env.APPLE_ROOT }}
run: |
ci/xcode-archive.sh ${{ matrix.platform }}
- name: Export archive
working-directory: ${{ env.APPLE_ROOT }}
run: |
ci/xcode-export.sh ${{ matrix.platform }}
- name: Upload archive
id: upload_app
timeout-minutes: 30
env:
PILOT_BETA_APP_FEEDBACK: ${{ secrets.PILOT_BETA_APP_FEEDBACK }}
PILOT_BETA_APP_REVIEW_INFO: ${{ secrets.PILOT_BETA_APP_REVIEW_INFO }}
PILOT_GROUPS: ${{ vars.PILOT_GROUPS }}
run: |
bundle exec fastlane --env ${{ matrix.platform }} beta
distribute_public_beta:
name: Distribute Public Beta
runs-on: ubuntu-latest
needs: [validate_codebase, build_upload]
continue-on-error: true
strategy:
fail-fast: true
matrix:
platform: ["iOS", "macOS", "tvOS"]
environment:
name: public_beta
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Publish on TestFlight
env:
PILOT_APP_VERSION: ${{ needs.validate_codebase.outputs.version }}
PILOT_BUILD_NUMBER: ${{ needs.validate_codebase.outputs.build }}
PILOT_GROUPS: ${{ vars.PILOT_GROUPS }}
PILOT_NOTIFY_EXTERNAL_TESTERS: ${{ vars.PILOT_NOTIFY_EXTERNAL_TESTERS }}
run: |
bundle exec fastlane --env ${{ matrix.platform }} public_beta
submit_for_app_review:
name: Submit to App Review
runs-on: ubuntu-latest
needs: [validate_codebase, build_upload]
continue-on-error: true
strategy:
fail-fast: true
matrix:
platform: ["iOS", "macOS", "tvOS"]
environment:
name: app_review
env:
DELIVER_APP_VERSION: ${{ needs.validate_codebase.outputs.version }}
DELIVER_BUILD_NUMBER: ${{ needs.validate_codebase.outputs.build }}
DELIVER_FORCE: true
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Submit for App Review
run: |
bundle exec fastlane --env ${{ matrix.platform }} asc_review
distribute_dmg:
name: Distribute Mac .dmg
runs-on: macos-26
needs: [validate_codebase]
timeout-minutes: 30
strategy:
fail-fast: true
matrix:
arch: ["arm64", "x86_64"]
steps:
- uses: actions/checkout@v6
- name: Import GPG key
env:
GPG_KEY: ${{ secrets.GPG_KEY }}
run: |
ci/gpg-import.sh "$GPG_KEY"
- uses: partout-io/action-prepare-xcode-build@master
with:
access-token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
certificates-url: ${{ vars.CERTIFICATES_URL }}
certificates-passphrase: ${{ secrets.CERTIFICATES_PASSPHRASE }}
- name: Notarize .dmg app
working-directory: ${{ env.APPLE_ROOT }}
env:
GPG_FINGERPRINT: ${{ vars.GPG_FINGERPRINT }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
run: |
ci/xcode-archive.sh macOS 1 ${{ matrix.arch }}
ci/xcode-export.sh macOS 1
ci/dmg-generate.sh ${{ matrix.arch }}
ci/dmg-notarize.sh ${{ matrix.arch }} "$APPLE_ID" "$APPLE_ID_PASSWORD"
ci/dmg-sign.sh ${{ matrix.arch }} "$GPG_FINGERPRINT" "$GPG_PASSPHRASE"
- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: mac-dmg-${{ matrix.arch }}
path: |
${{ env.APPLE_ROOT }}/Passepartout.*.dmg
${{ env.APPLE_ROOT }}/Passepartout.*.dmg.asc
publish_release:
name: Publish Release
runs-on: ubuntu-latest
needs: [validate_codebase, build_upload, submit_for_app_review, distribute_dmg]
environment:
name: release
env:
APP_VERSION: ${{ needs.validate_codebase.outputs.version }}
RELEASE_NOTES: CHANGELOG.txt
steps:
- uses: actions/checkout@v6
with:
token: ${{ secrets.ACCESS_TOKEN }}
- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: Print workspace structure
run: |
ls -R
- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v6
with:
gpg_private_key: ${{ secrets.GPG_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
git_user_signingkey: true
git_commit_gpgsign: true
git_tag_gpgsign: true
git_push_gpgsign: false
- name: Tag release
run: |
tag="v$APP_VERSION"
git tag -as "$tag" -m "$tag"
git push origin "$tag"
- name: Publish release
uses: softprops/action-gh-release@v2
with:
name: ${{ env.APP_VERSION }}
tag_name: "v${{ env.APP_VERSION }}"
body_path: ${{ env.RELEASE_NOTES }}
files: |
artifacts/*.dmg*