Skip to content

publish-on-chrome-webstore #40

publish-on-chrome-webstore

publish-on-chrome-webstore #40

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 }}