publish-on-chrome-web-store #13
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: publish-on-chrome-web-store | |
on: | |
workflow_dispatch: | |
inputs: | |
attemptNumber: | |
description: 'Attempt number' | |
required: false | |
default: '1' | |
maxAttempts: | |
description: 'Max attempts' | |
required: false | |
default: '10' | |
environment: | |
description: 'publish-on-webstore job environment' | |
required: false | |
default: '' | |
jobs: | |
publish-on-webstore: | |
runs-on: ubuntu-latest | |
environment: ${{ github.event.inputs.environment }} | |
outputs: | |
result: ${{ steps.webStorePublish.outcome }} | |
releaseUploadUrl: ${{ steps.getZipAsset.outputs.releaseUploadUrl }} | |
steps: | |
- name: Get the next attempt number | |
id: getNextAttemptNumber | |
uses: cardinalby/js-eval-action@v1 | |
env: | |
attemptNumber: ${{ github.event.inputs.attemptNumber }} | |
maxAttempts: ${{ github.event.inputs.maxAttempts }} | |
with: | |
expression: | | |
{ | |
const | |
attempt = parseInt(env.attemptNumber), | |
max = parseInt(env.maxAttempts); | |
assert(attempt && max && max >= attempt); | |
return attempt < max ? attempt + 1 : ''; | |
} | |
- uses: actions/checkout@v4 | |
- uses: cardinalby/export-env-action@v1 | |
with: | |
envFile: './.github/workflows/constants.env' | |
expand: true | |
- name: Obtain packed zip | |
id: getZipAsset | |
uses: ./.github/workflows/actions/get-zip-asset | |
with: | |
githubToken: ${{ secrets.GITHUB_TOKEN }} | |
- name: Fetch Google API access token | |
id: fetchAccessToken | |
uses: cardinalby/google-api-fetch-token-action@v1 | |
with: | |
clientId: ${{ secrets.G_CLIENT_ID }} | |
clientSecret: ${{ secrets.G_CLIENT_SECRET }} | |
refreshToken: ${{ secrets.G_REFRESH_TOKEN }} | |
- name: Upload to Google Web Store | |
id: webStoreUpload | |
continue-on-error: true | |
uses: cardinalby/webext-buildtools-chrome-webstore-upload-action@v1 | |
with: | |
zipFilePath: ${{ env.ZIP_FILE_PATH }} | |
extensionId: ${{ secrets.G_EXTENSION_ID }} | |
apiAccessToken: ${{ steps.fetchAccessToken.outputs.accessToken }} | |
waitForUploadCheckCount: 10 | |
waitForUploadCheckIntervalMs: 180000 # 3 minutes | |
# Schedule a next attempt if store refused to accept new version because it | |
# still has a previous one in review | |
- name: Start the next attempt with the delay | |
uses: aurelien-baudet/workflow-dispatch@93e95b157d791ae7f42aef8f8a0d3d723eba1c31 # pin@v2 | |
if: | | |
steps.getNextAttemptNumber.outputs.result && | |
steps.webStoreUpload.outputs.inReviewError == 'true' | |
with: | |
workflow: ${{ github.workflow }} | |
token: ${{ secrets.WORKFLOWS_TOKEN }} | |
wait-for-completion: false | |
inputs: | | |
{ | |
"attemptNumber": "${{ steps.getNextAttemptNumber.outputs.result }}", | |
"maxAttempts": "${{ github.event.inputs.maxAttempts }}", | |
"environment": "12hoursDelay" | |
} | |
- name: Abort on unrecoverable upload error | |
if: | | |
!steps.webStoreUpload.outputs.newVersion && | |
steps.webStoreUpload.outputs.sameVersionAlreadyUploadedError != 'true' | |
run: exit 1 | |
- name: Publish on Google Web Store | |
id: webStorePublish | |
if: | | |
steps.webStoreUpload.outputs.newVersion || | |
steps.webStoreUpload.outputs.sameVersionAlreadyUploadedError == 'true' | |
uses: cardinalby/webext-buildtools-chrome-webstore-publish-action@v1 | |
with: | |
extensionId: ${{ secrets.G_EXTENSION_ID }} | |
apiAccessToken: ${{ steps.fetchAccessToken.outputs.accessToken }} | |
download-published-crx: | |
needs: publish-on-webstore | |
if: needs.publish-on-webstore.outputs.result == 'success' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: cardinalby/export-env-action@v1 | |
with: | |
envFile: './.github/workflows/constants.env' | |
expand: true | |
- name: Download published crx file | |
id: gWebStoreDownloadCrx | |
uses: cardinalby/webext-buildtools-chrome-webstore-download-crx-action@v1 | |
with: | |
extensionId: ${{ secrets.G_EXTENSION_ID }} | |
crxFilePath: ${{ env.WEBSTORE_CRX_FILE_PATH }} | |
- name: Upload webstore published crx release asset | |
if: needs.publish-on-webstore.outputs.releaseUploadUrl | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ needs.publish-on-webstore.outputs.releaseUploadUrl }} | |
asset_path: ${{ env.WEBSTORE_CRX_FILE_PATH }} | |
asset_name: ${{ env.WEBSTORE_CRX_FILE_NAME }} | |
asset_content_type: application/x-chrome-extension | |
- name: Upload webstore crx file artifact to workflow | |
if: '!needs.publish-on-webstore.outputs.releaseUploadUrl' | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ${{ env.WEBSTORE_CRX_FILE_NAME }} | |
path: ${{ env.WEBSTORE_CRX_FILE_PATH }} | |