mirror of
https://github.com/bitwarden/browser
synced 2024-12-28 02:43:04 +01:00
b55a28f755
Refactor the remaining logic from gulp. Part of the browser build script refactor effort. Webpack is now responsible for performing most of the operations previously done by gulp. This includes: - Setting browser specific class - Building the manifest file The `package.json` is modified to include browser specific commands for `build`, `build:prod`, `build:watch` and `dist`. # Manifests Manifests now uses the `copy-webpack-plugin` `transform` feature. The logic is located in `apps/browser/webpack/manifest.js`. It reads a template, which supports some basic operations primarily overriding with browser specific fields using `__browser__`. The `manifest.json` for both regular and mv3 builds are identical to our existing manifests except: - `applications` renamed to `browser_specific_settings`. - `permissions` sorted alphabetically. # Safari build Safari requires additional packaging commands. This is implemented as a powershell script due to the cross-platform nature, and since we generally require powershell in our distribution pipelines. An alternative would be to write it in bash, but bash is less powerful and would require some additional commands like `jq`. Another alternative is to write it using js, but that would require additional dependencies.
144 lines
4.8 KiB
YAML
144 lines
4.8 KiB
YAML
name: Release Browser
|
|
run-name: Release Browser ${{ inputs.release_type }}
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
release_type:
|
|
description: 'Release Options'
|
|
required: true
|
|
default: 'Initial Release'
|
|
type: choice
|
|
options:
|
|
- Initial Release
|
|
- Redeploy
|
|
- Dry Run
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
setup:
|
|
name: Setup
|
|
runs-on: ubuntu-22.04
|
|
outputs:
|
|
release-version: ${{ steps.version.outputs.version }}
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
|
|
- name: Branch check
|
|
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
|
run: |
|
|
if [[ "$GITHUB_REF" != "refs/heads/rc" ]] && [[ "$GITHUB_REF" != "refs/heads/hotfix-rc-browser" ]]; then
|
|
echo "==================================="
|
|
echo "[!] Can only release from the 'rc' or 'hotfix-rc-browser' branches"
|
|
echo "==================================="
|
|
exit 1
|
|
fi
|
|
|
|
- name: Check Release Version
|
|
id: version
|
|
uses: bitwarden/gh-actions/release-version-check@main
|
|
with:
|
|
release-type: ${{ github.event.inputs.release_type }}
|
|
project-type: ts
|
|
file: apps/browser/src/manifest.json
|
|
monorepo: true
|
|
monorepo-project: browser
|
|
|
|
|
|
locales-test:
|
|
name: Locales Test
|
|
runs-on: ubuntu-22.04
|
|
needs: setup
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
|
|
- name: Testing locales - extName length
|
|
run: |
|
|
found_error=false
|
|
|
|
echo "Locales Test"
|
|
echo "============"
|
|
echo "extName string must be 40 characters or less"
|
|
echo
|
|
for locale in $(ls src/_locales/); do
|
|
string_length=$(jq '.extName.message | length' src/_locales/$locale/messages.json)
|
|
if [[ $string_length -gt 40 ]]; then
|
|
echo "$locale: $string_length"
|
|
found_error=true
|
|
fi
|
|
done
|
|
|
|
if $found_error; then
|
|
echo
|
|
echo "Please fix 'extName' for the locales listed above."
|
|
exit 1
|
|
else
|
|
echo "Test passed!"
|
|
fi
|
|
working-directory: apps/browser
|
|
|
|
|
|
release:
|
|
name: Create GitHub Release
|
|
runs-on: ubuntu-22.04
|
|
needs:
|
|
- setup
|
|
- locales-test
|
|
steps:
|
|
- name: Download latest Release build artifacts
|
|
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
|
uses: bitwarden/gh-actions/download-artifacts@main
|
|
with:
|
|
workflow: build-browser.yml
|
|
workflow_conclusion: success
|
|
branch: ${{ github.ref_name }}
|
|
artifacts: 'browser-source-*.zip,
|
|
dist-chrome-*.zip,
|
|
dist-opera-*.zip,
|
|
dist-firefox-*.zip,
|
|
dist-edge-*.zip'
|
|
|
|
- name: Dry Run - Download latest build artifacts
|
|
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
|
|
uses: bitwarden/gh-actions/download-artifacts@main
|
|
with:
|
|
workflow: build-browser.yml
|
|
workflow_conclusion: success
|
|
branch: main
|
|
artifacts: 'browser-source-*.zip,
|
|
dist-chrome-*.zip,
|
|
dist-opera-*.zip,
|
|
dist-firefox-*.zip,
|
|
dist-edge-*.zip'
|
|
|
|
- name: Rename build artifacts
|
|
env:
|
|
PACKAGE_VERSION: ${{ needs.setup.outputs.release-version }}
|
|
run: |
|
|
mv browser-source.zip browser-source-$PACKAGE_VERSION.zip
|
|
mv dist-chrome.zip dist-chrome-$PACKAGE_VERSION.zip
|
|
mv dist-opera.zip dist-opera-$PACKAGE_VERSION.zip
|
|
mv dist-firefox.zip dist-firefox-$PACKAGE_VERSION.zip
|
|
mv dist-edge.zip dist-edge-$PACKAGE_VERSION.zip
|
|
|
|
- name: Create release
|
|
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
|
uses: ncipollo/release-action@2c591bcc8ecdcd2db72b97d6147f871fcd833ba5 # v1.14.0
|
|
with:
|
|
artifacts: 'browser-source-${{ needs.setup.outputs.release-version }}.zip,
|
|
dist-chrome-${{ needs.setup.outputs.release-version }}.zip,
|
|
dist-opera-${{ needs.setup.outputs.release-version }}.zip,
|
|
dist-firefox-${{ needs.setup.outputs.release-version }}.zip,
|
|
dist-edge-${{ needs.setup.outputs.release-version }}.zip'
|
|
commit: ${{ github.sha }}
|
|
tag: "browser-v${{ needs.setup.outputs.release-version }}"
|
|
name: "Browser v${{ needs.setup.outputs.release-version }}"
|
|
body: "<insert release notes here>"
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
draft: true
|