| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- name: 3. Create Certificates
- run-name: Create Certificates (${{ github.ref_name }})
- on: [workflow_call, workflow_dispatch]
- env:
- TEAMID: ${{ secrets.TEAMID }}
- GH_PAT: ${{ secrets.GH_PAT }}
- GH_TOKEN: ${{ secrets.GH_PAT }}
- MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
- FASTLANE_KEY_ID: ${{ secrets.FASTLANE_KEY_ID }}
- FASTLANE_ISSUER_ID: ${{ secrets.FASTLANE_ISSUER_ID }}
- FASTLANE_KEY: ${{ secrets.FASTLANE_KEY }}
- jobs:
- validate:
- name: Validate
- uses: ./.github/workflows/validate_secrets.yml
- secrets: inherit
- create_certs:
- name: Certificates
- needs: validate
- runs-on: macos-26
- outputs:
- new_certificate_needed: ${{ steps.set_output.outputs.new_certificate_needed }}
- steps:
- # Checks-out the repo
- - name: Checkout Repo
- uses: actions/checkout@v5
- # Patch Fastlane Match to not print tables
- - name: Patch Match Tables
- run: |
- TABLE_PRINTER_PATH=$(ruby -e 'puts Gem::Specification.find_by_name("fastlane").gem_dir')/match/lib/match/table_printer.rb
- if [ -f "$TABLE_PRINTER_PATH" ]; then
- sed -i "" "/puts(Terminal::Table.new(params))/d" "$TABLE_PRINTER_PATH"
- else
- echo "table_printer.rb not found"
- exit 1
- fi
- # Install project dependencies
- - name: Install Project Dependencies
- run: bundle install
- # Create or update Distribution certificate and provisioning profiles
- - name: Check and create or update Distribution certificate and profiles if needed
- run: |
- echo "Running Fastlane certs lane..."
- bundle exec fastlane certs || true # ignore and continue on errors without annotating an exit code
- - name: Check Distribution certificate and launch Nuke certificates if needed
- run: bundle exec fastlane check_and_renew_certificates
- id: check_certs
- - name: Set output and annotations based on Fastlane result
- id: set_output
- run: |
- CERT_STATUS_FILE="${{ github.workspace }}/fastlane/new_certificate_needed.txt"
- ENABLE_NUKE_CERTS=${{ vars.ENABLE_NUKE_CERTS }}
- if [ -f "$CERT_STATUS_FILE" ]; then
- CERT_STATUS=$(cat "$CERT_STATUS_FILE" | tr -d '\n' | tr -d '\r') # Read file content and strip newlines
- echo "new_certificate_needed: $CERT_STATUS"
- echo "new_certificate_needed=$CERT_STATUS" >> $GITHUB_OUTPUT
- else
- echo "Certificate status file not found. Defaulting to false."
- echo "new_certificate_needed=false" >> $GITHUB_OUTPUT
- fi
- # Check if ENABLE_NUKE_CERTS is not set to true when certs are valid
- if [ "$CERT_STATUS" != "true" ] && [ "$ENABLE_NUKE_CERTS" != "true" ]; then
- echo "::notice::🔔 Automated renewal of certificates is disabled because the repository variable ENABLE_NUKE_CERTS is not set to 'true'."
- fi
- # Check if ENABLE_NUKE_CERTS is not set to true when certs are not valid
- if [ "$CERT_STATUS" = "true" ] && [ "$ENABLE_NUKE_CERTS" != "true" ]; then
- echo "::error::❌ No valid distribution certificate found. Automated renewal of certificates was skipped because the repository variable ENABLE_NUKE_CERTS is not set to 'true'."
- exit 1
- fi
- # Check if vars.FORCE_NUKE_CERTS is not set to true
- if [ vars.FORCE_NUKE_CERTS = "true" ]; then
- echo "::warning::‼️ Nuking of certificates was forced because the repository variable FORCE_NUKE_CERTS is set to 'true'."
- fi
- # Nuke Certs if needed, and if the repository variable ENABLE_NUKE_CERTS is set to 'true', or if FORCE_NUKE_CERTS is set to 'true', which will always force certs to be nuked
- nuke_certs:
- name: Nuke certificates
- needs: [validate, create_certs]
- runs-on: macos-26
- if: ${{ (needs.create_certs.outputs.new_certificate_needed == 'true' && vars.ENABLE_NUKE_CERTS == 'true') || vars.FORCE_NUKE_CERTS == 'true' }}
- steps:
- - name: Output from step id 'check_certs'
- run: echo "new_certificate_needed=${{ needs.create_certs.outputs.new_certificate_needed }}"
- - name: Checkout repository
- uses: actions/checkout@v5
- - name: Install dependencies
- run: bundle install
- - name: Run Fastlane nuke_certs
- run: |
- set -e # Set error immediately after this step if error occurs
- bundle exec fastlane nuke_certs
- - name: Recreate Distribution certificate after nuking
- run: |
- set -e # Set error immediately after this step if error occurs
- bundle exec fastlane certs
- - name: Add success annotations for nuke and certificate recreation
- if: ${{ success() }}
- run: |
- echo "::warning::⚠️ All Distribution certificates and TestFlight profiles have been revoked and recreated."
- echo "::warning::❗️ If you have other apps being distributed by GitHub Actions / Fastlane / TestFlight that does not renew certificates automatically, please run the '3. Create Certificates' workflow for each of these apps to allow these apps to be built."
- echo "::warning::✅ But don't worry about your existing TestFlight builds, they will keep working!"
|