name: Upload Release Build on: release: types: [published] jobs: build: name: Upload Release runs-on: ubuntu-latest steps: # Initialization - name: Checkout release branch w/submodules uses: actions/checkout@v5 with: submodules: recursive - uses: actions/setup-node@v4 with: node-version: '18' - name: Copy configuration run: cp config.json.example config.json # Create source artifact with submodule - name: Create directory run: cd ..; mkdir ./builds - name: Zip Source code run: zip -r ../builds/SourceCodeUseThisOne.zip * - name: Upload Source to release uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467 with: args: ../builds/SourceCodeUseThisOne.zip name: SourceCodeUseThisOne.zip path: ../builds/SourceCodeUseThisOne.zip repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Checkout source maps branch uses: actions/checkout@v5 with: path: source-maps ref: source-maps - name: Set up committer info run: | git config --global user.name "github-actions[bot]" git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - run: npm ci # Create Firefox artifacts - name: Create Firefox artifacts run: npm run build:firefox -- --env ghpSourceMaps - run: mkdir ./builds - name: Move Firefox source maps to source map repo run: | VERSION=`jq -r '.version' ./dist/manifest.json` mkdir -p "./source-maps/firefox/$VERSION/" mv -v ./dist/**/*.js.map "./source-maps/firefox/$VERSION/" cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/firefox/$VERSION/" - name: Zip Artifacts run: cd ./dist ; zip -r ../builds/FirefoxExtension.zip * - name: Upload FirefoxExtension to release uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467 with: args: builds/FirefoxExtension.zip name: FirefoxExtension.zip path: ./builds/FirefoxExtension.zip repo-token: ${{ secrets.GITHUB_TOKEN }} # Create Chrome artifacts - name: Create Chrome artifacts run: npm run build:chrome -- --env ghpSourceMaps - name: Move Chrome source maps to source map repo run: | VERSION=`jq -r '.version' ./dist/manifest.json` mkdir -p "./source-maps/chrome/$VERSION/" mv -v ./dist/**/*.js.map "./source-maps/chrome/$VERSION/" cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/chrome/$VERSION/" - name: Zip Artifacts run: cd ./dist ; zip -r ../builds/ChromeExtension.zip * - name: Upload ChromeExtension to release uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467 with: args: builds/ChromeExtension.zip name: ChromeExtension.zip path: ./builds/ChromeExtension.zip repo-token: ${{ secrets.GITHUB_TOKEN }} # Create Edge artifacts - name: Clear dist for Edge run: rm -rf ./dist - name: Create Edge artifacts run: npm run build:edge -- --env ghpSourceMaps - name: Move Edge source maps to source map repo run: | VERSION=`jq -r '.version' ./dist/manifest.json` mkdir -p "./source-maps/edge/$VERSION/" mv -v ./dist/**/*.js.map "./source-maps/edge/$VERSION/" cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/edge/$VERSION/" - name: Zip Artifacts run: cd ./dist ; zip -r ../builds/EdgeExtension.zip * - name: Upload EdgeExtension to release uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467 with: args: builds/EdgeExtension.zip name: EdgeExtension.zip path: ./builds/EdgeExtension.zip repo-token: ${{ secrets.GITHUB_TOKEN }} # Create Safari artifacts - name: Create Safari artifacts run: npm run build:safari -- --env ghpSourceMaps - name: Move Safari source maps to source map repo run: | VERSION=`jq -r '.version' ./dist/manifest.json` mkdir -p "./source-maps/safari/$VERSION/" mv -v ./dist/**/*.js.map "./source-maps/safari/$VERSION/" cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/safari/$VERSION/" - name: Zip Artifacts run: cd ./dist ; zip -r ../builds/SafariExtension.zip * - name: Upload SafariExtension to release uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467 with: args: builds/SafariExtension.zip name: SafariExtension.zip path: ./builds/SafariExtension.zip repo-token: ${{ secrets.GITHUB_TOKEN }} # Create Beta artifacts (Builds with the name changed to beta) - name: Create Chrome Beta artifacts run: npm run build:chrome -- --env stream=beta --env ghpSourceMaps - name: Move Chrome Beta source maps to source map repo run: | VERSION=`jq -r '.version' ./dist/manifest.json` mkdir -p "./source-maps/chrome-beta/$VERSION/" mv -v ./dist/**/*.js.map "./source-maps/chrome-beta/$VERSION/" cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/chrome-beta/$VERSION/" - name: Zip Artifacts run: cd ./dist ; zip -r ../builds/ChromeExtensionBeta.zip * - name: Upload ChromeExtensionBeta to release uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467 with: args: builds/ChromeExtensionBeta.zip name: ChromeExtensionBeta.zip path: ./builds/ChromeExtensionBeta.zip repo-token: ${{ secrets.GITHUB_TOKEN }} # Firefox Beta - name: Create Firefox Beta artifacts run: npm run build:firefox -- --env stream=beta --env autoupdate --env ghpSourceMaps - uses: actions/upload-artifact@v4 with: name: FirefoxExtensionBeta path: dist - name: Move Firefox Beta source maps to source map repo run: | VERSION=`jq -r '.version' ./dist/manifest.json` mkdir -p "./source-maps/firefox-beta/$VERSION/" mv -v ./dist/**/*.js.map "./source-maps/firefox-beta/$VERSION/" cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/firefox-beta/$VERSION/" - name: Zip Artifacts run: cd ./dist ; zip -r ../builds/FirefoxExtensionBeta.zip * # Create Firefox Signed Beta version - name: Create Firefox Signed Beta artifacts run: npm run web-sign env: WEB_EXT_API_KEY: ${{ secrets.WEB_EXT_API_KEY }} WEB_EXT_API_SECRET: ${{ secrets.WEB_EXT_API_SECRET }} - name: Rename signed file run: mv ./web-ext-artifacts/* ./web-ext-artifacts/FirefoxSignedInstaller.xpi - uses: actions/upload-artifact@v4 with: name: FirefoxExtensionSigned.xpi path: ./web-ext-artifacts/FirefoxSignedInstaller.xpi - name: Upload FirefoxSignedInstaller.xpi to release uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467 with: args: web-ext-artifacts/FirefoxSignedInstaller.xpi name: FirefoxSignedInstaller.xpi path: ./web-ext-artifacts/FirefoxSignedInstaller.xpi repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Commit & push new source maps if: always() run: | VERSION=`jq -r '.version' ./dist/manifest.json` cd ./source-maps git add . git commit -m "Publish source maps for version $VERSION" git push - name: Prepare new github pages deployment shell: python run: | from pathlib import Path import json import shutil import os # config stuff installer_name = "FirefoxSignedInstaller.xpi" owner, repo_name = os.environ["GITHUB_REPOSITORY"].split("/") owner = owner.lower() # create the github paged dir ghp_dir = Path("./github-pages") ghp_dir.mkdir(parents=True, exist_ok=True) # move in the installer Path("./web-ext-artifacts", installer_name).rename(ghp_dir / installer_name) # read manifest.json and extract parameters with open("./dist/manifest.json") as f: manifest = json.load(f) current_version = manifest["version"] ext_id = manifest["browser_specific_settings"]["gecko"]["id"] # generate updates file updates = { "addons": { ext_id: { "updates": [ { "version": current_version, # param doesn't actually matter, it's just a cachebuster "update_link": f"https://{owner}.github.io/{repo_name}/{installer_name}?v={current_version}", }, ], }, }, } (ghp_dir / "updates.json").write_text(json.dumps(updates)) # copy in source maps def only_sourcemaps(cur, ls): if '/' in cur: return [] return set(ls) - {"chrome", "chrome-beta", "edge", "firefox", "firefox-beta", "safari"} shutil.copytree("source-maps", ghp_dir, ignore=only_sourcemaps, dirs_exist_ok=True) - name: Upload new github pages deployment uses: actions/upload-pages-artifact@v3 with: path: ./github-pages deploy-ghp: name: Deploy to github pages needs: build permissions: id-token: write pages: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - name: Deploy id: deployment uses: actions/deploy-pages@v4