name: 'Ionic Production Release' on: workflow_call: inputs: version: description: 'Which version should be published?' required: true type: string tag: description: 'Which npm tag should this be published to?' required: true type: string preid: description: 'Which prerelease identifier should be used? This is only needed when version is "prepatch", "preminor", "premajor", or "prerelease".' required: false type: string permissions: contents: read id-token: write jobs: validate_version: name: ✅ Validate Version Input runs-on: ubuntu-latest steps: - name: 🔎 Ensure version is allowed env: VERSION: ${{ inputs.version }} run: | case "$VERSION" in patch|minor|major|prepatch|preminor|premajor|prerelease) exit 0 ;; *) echo "::error::Invalid version input: '$VERSION'. Allowed values: patch, minor, major, prepatch, preminor, premajor, prerelease." exit 1 ;; esac shell: bash release-ionic: needs: [validate_version] permissions: contents: read id-token: write uses: ./.github/workflows/release-ionic.yml with: tag: ${{ inputs.tag }} version: ${{ inputs.version }} preid: ${{ inputs.preid }} finalize-release: needs: [release-ionic] runs-on: ubuntu-latest permissions: contents: write id-token: write steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: token: ${{ secrets.IONITRON_TOKEN }} fetch-depth: 0 - name: Configure Identity # Commits from github-actions do not # trigger other GitHub Actions. As a result, # we publish releases from Ionitron instead # so actions run when merging the release branch # back into main. run: | git config user.name ionitron git config user.email hi@ionicframework.com shell: bash - name: Create GitHub Release run: lerna version ${{ inputs.version }} --yes --force-publish='*' --conventional-commits --create-release github --preid=${{ inputs.preid }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} shell: bash update-package-lock: # This needs to run after finalize-release # because we also push to the repo in that # job. If these jobs ran in parallel then it is # possible for them to push at the same time. needs: [finalize-release] runs-on: ubuntu-latest permissions: contents: write id-token: write steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 # Pull the latest version of the reference # branch instead of the revision that triggered # the workflow otherwise we won't get the commit # created in the previous job and this next job # will fail. with: ref: ${{ github.ref }} - name: Configure Identity # Commits from github-actions do not # trigger other GitHub Actions. As a result, # we push from Ionitron instead so actions # run when merging the release branch # back into main. run: | git config user.name ionitron git config user.email hi@ionicframework.com shell: bash # Lerna does not automatically bump versions # of Ionic dependencies that have changed, # so we do that here. - name: Bump Package Lock run: | lerna exec "npm install --package-lock-only" git add . git commit -m "chore(): update package lock files" git push env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} shell: bash purge-cdn-cache: needs: [release-ionic] runs-on: ubuntu-latest steps: - name: Purge JSDelivr Cache run: | curl -X POST \ https://purge.jsdelivr.net/ \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -d '{ "path": [ "/npm/@ionic/core@6/dist/ionic/ionic.esm.js", "/npm/@ionic/core@7/dist/ionic/ionic.esm.js", "/npm/@ionic/core@8/dist/ionic/ionic.esm.js", "/npm/@ionic/core@latest/dist/ionic/ionic.esm.js", "/npm/@ionic/core@next/dist/ionic/ionic.esm.js", "/npm/@ionic/core@6/css/ionic.bundle.css", "/npm/@ionic/core@7/css/ionic.bundle.css", "/npm/@ionic/core@8/css/ionic.bundle.css", "/npm/@ionic/core@latest/css/ionic.bundle.css" "/npm/@ionic/core@next/css/ionic.bundle.css" ]}' shell: bash