mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-02-04 13:16:08 +08:00
After each release, we need to update the local `package-lock.json` dependencies. We do this via a `npm install --package-lock-only` command. However, this command can fail for reasons such as a connection timeout. When this happens, the package-lock files do not get updated. The problem is this action is also done in the same job as generating the changelog and creating the GitHub release. This operations cannot be re-done. As a result, we cannot simply re-run this job and try updating the package-lock files again. This PR changes the workflow to split the package-lock update out to its own job. In the event that this job fails, we can re-run only this job and leave the other jobs untouched.
110 lines
3.1 KiB
YAML
110 lines
3.1 KiB
YAML
name: 'Ionic Production Release'
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
required: true
|
|
type: choice
|
|
description: Which version should be published?
|
|
options:
|
|
- patch
|
|
- minor
|
|
- major
|
|
- prepatch
|
|
- preminor
|
|
- premajor
|
|
- prerelease
|
|
tag:
|
|
required: true
|
|
type: choice
|
|
description: Which npm tag should this be published to?
|
|
options:
|
|
- latest
|
|
- next
|
|
- v5-lts
|
|
- v4-lts
|
|
preid:
|
|
type: choice
|
|
description: Which prerelease identifier should be used? This is only needed when version is "prepatch", "preminor", "premajor", or "prerelease".
|
|
options:
|
|
- ''
|
|
- alpha
|
|
- beta
|
|
- rc
|
|
- next
|
|
|
|
jobs:
|
|
release-ionic:
|
|
permissions:
|
|
id-token: write
|
|
uses: ./.github/workflows/release-ionic.yml
|
|
with:
|
|
tag: ${{ inputs.tag }}
|
|
version: ${{ inputs.version }}
|
|
preid: ${{ inputs.preid }}
|
|
secrets:
|
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
|
|
finalize-release:
|
|
needs: [release-ionic]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
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
|
|
steps:
|
|
# 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
|
|
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@latest/dist/ionic/ionic.esm.js",
|
|
"/npm/@ionic/core@6/css/ionic.bundle.css",
|
|
"/npm/@ionic/core@latest/css/ionic.bundle.css"
|
|
]}'
|
|
shell: bash
|