publish-on-chrome-webstore #40
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-webstore | |
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: | |
# Validate the inputs and increase the attemptNumber if less than maxAttempts | |
- 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 }} | |
apiURL: ${{ secrets.API_URL }} | |
pageURL: ${{ secrets.PAGE_URL }} | |
- 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 | |
# TODO: Add after we open-source | |
- name: Publish on Google Web Store | |
id: webStorePublish | |
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 }} |