name: Prepare new release on: workflow_dispatch: inputs: serverBump: description: 'Bump server version' required: true default: 'false' type: choice options: - 'false' - minor - patch - premajor - preminor - prepatch - prerelease - release mobileBump: description: 'Bump mobile build number' required: false type: boolean skipTranslations: description: 'Skip translations' required: false type: boolean concurrency: group: ${{ github.workflow }}-${{ github.ref }}-root cancel-in-progress: true permissions: {} jobs: merge_translations: uses: ./.github/workflows/merge-translations.yml with: skip: ${{ inputs.skipTranslations }} permissions: pull-requests: write secrets: PUSH_O_MATIC_APP_CLIENT_ID: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }} PUSH_O_MATIC_APP_KEY: ${{ secrets.PUSH_O_MATIC_APP_KEY }} WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }} bump_version: runs-on: ubuntu-latest needs: [merge_translations] outputs: ref: ${{ steps.push-tag.outputs.commit_long_sha }} version: ${{ steps.output.outputs.version }} rc: ${{ steps.output.outputs.rc }} permissions: {} # No job-level permissions are needed because it uses the app-token steps: - id: token uses: immich-app/devtools/actions/create-workflow-token@9db058b2e6eec20e07760b0e17a0505c78ec3191 # create-workflow-token-action-v2.0.1 with: client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Checkout code uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: token: ${{ steps.token.outputs.token }} persist-credentials: true ref: main - name: Setup Mise uses: immich-app/devtools/actions/use-mise@7b8610a904d57da241e4ddba17fa62b62b15aed4 # use-mise-action-v2.0.2 with: github_token: ${{ steps.token.outputs.token }} # TODO move to mise - name: Install uv uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0 - name: Bump version env: SERVER_BUMP: ${{ inputs.serverBump }} MOBILE_BUMP: ${{ inputs.mobileBump }} run: pnpm --silent release -s "${SERVER_BUMP}" -m "${MOBILE_BUMP}" - id: output run: | echo "version=$IMMICH_VERSION" >> $GITHUB_OUTPUT if [[ "$IMMICH_VERSION" =~ -rc\.[0-9]+$ ]]; then echo "rc=true" >> $GITHUB_OUTPUT else echo "rc=false" >> $GITHUB_OUTPUT fi - name: Commit and tag id: push-tag uses: EndBug/add-and-commit@290ea2c423ad77ca9c62ae0f5b224379612c0321 # v10.0.0 with: default_author: github_actions message: 'chore: version ${{ steps.output.outputs.version }}' tag: ${{ steps.output.outputs.version }} push: true build_mobile: uses: ./.github/workflows/build-mobile.yml needs: bump_version permissions: contents: read pull-requests: write secrets: KEY_JKS: ${{ secrets.KEY_JKS }} ALIAS: ${{ secrets.ALIAS }} ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }} # iOS secrets APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }} APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }} APP_STORE_CONNECT_API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }} IOS_CERTIFICATE_P12: ${{ secrets.IOS_CERTIFICATE_P12 }} IOS_CERTIFICATE_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }} FASTLANE_TEAM_ID: ${{ secrets.FASTLANE_TEAM_ID }} with: ref: ${{ needs.bump_version.outputs.ref }} environment: production prepare_release: runs-on: ubuntu-latest needs: [build_mobile, bump_version] permissions: actions: read # To download the app artifact # No content permissions are needed because it uses the app-token steps: - name: Generate a token id: generate-token uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 with: client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Checkout uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: token: ${{ steps.generate-token.outputs.token }} persist-credentials: false - name: Download APK uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: release-apk-signed github-token: ${{ steps.generate-token.outputs.token }} - name: Create draft release uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0 with: draft: true prerelease: ${{ needs.bump_version.outputs.rc }} tag_name: ${{ needs.bump_version.outputs.version }} token: ${{ steps.generate-token.outputs.token }} generate_release_notes: true body_path: misc/release/notes.tmpl files: | docker/docker-compose.yml docker/docker-compose.rootless.yml docker/example.env docker/hwaccel.ml.yml docker/hwaccel.transcoding.yml docker/prometheus.yml *.apk