Build Browser #31
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
# https://github.com/bitwarden/clients/blob/main/.github/workflows/build-browser.yml | |
--- | |
name: Build Browser | |
on: | |
workflow_call: | |
inputs: {} | |
workflow_dispatch: | |
inputs: {} | |
push: | |
branches: [master, main] | |
schedule: | |
# On every Sunday 12:00 | |
- cron: "0 12 * * 0" | |
permissions: | |
contents: write # To Release | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
setup: | |
name: Setup | |
runs-on: ubuntu-22.04 | |
outputs: | |
latest_browser_tag: ${{ steps.gen_vars.outputs.latest_browser_tag }} | |
node_version: ${{ steps.retrieve-node-version.outputs.node_version }} | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Clone real repo | |
run: | | |
git clone https://github.com/bitwarden/clients.git | |
- name: Get Latest Browser Tag | |
id: gen_vars | |
working-directory: clients | |
run: | | |
# Find all tags and sort by time | |
git fetch --tags | |
tags=$(git tag --sort=-creatordate) | |
# Find "browser" tag | |
latest_browser_tag="" | |
for tag in $tags; do | |
if [[ $tag == *"browser"* ]]; then | |
latest_browser_tag=$tag | |
break | |
fi | |
done | |
echo "latest_browser_tag=$latest_browser_tag" >> $GITHUB_OUTPUT | |
echo "latest_browser_tag=$latest_browser_tag" | |
- name: Get Node Version | |
id: retrieve-node-version | |
working-directory: clients | |
run: | | |
NODE_NVMRC=$(cat .nvmrc) | |
NODE_VERSION=${NODE_NVMRC/v/''} | |
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT | |
locales-test: | |
name: Locales Test | |
runs-on: ubuntu-22.04 | |
needs: | |
- setup | |
env: | |
_LATEST_BROWSER_TAG: ${{ needs.setup.outputs.latest_browser_tag }} | |
_NODE_VERSION: ${{ needs.setup.outputs.node_version }} | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Clone real repo | |
run: | | |
git clone https://github.com/bitwarden/clients.git | |
- name: Setup repo | |
working-directory: clients | |
run: | | |
git fetch --tags | |
echo "Checking out ${{ env._LATEST_BROWSER_TAG }}" | |
git checkout ${{ env._LATEST_BROWSER_TAG }} | |
- name: Testing locales - extName length | |
working-directory: clients/apps/browser/ | |
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 | |
build: | |
name: Build | |
runs-on: ubuntu-22.04 | |
needs: | |
- setup | |
# - locales-test | |
env: | |
_LATEST_BROWSER_TAG: ${{ needs.setup.outputs.latest_browser_tag }} | |
_NODE_VERSION: ${{ needs.setup.outputs.node_version }} | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Clone real repo | |
run: | | |
git clone https://github.com/bitwarden/clients.git | |
- name: Setup repo | |
working-directory: clients | |
run: | | |
git fetch --tags | |
echo "Checking out ${{ env._LATEST_BROWSER_TAG }}" | |
git checkout ${{ env._LATEST_BROWSER_TAG }} | |
- name: Set up Node | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: "npm" | |
cache-dependency-path: "**/package-lock.json" | |
node-version: ${{ env._NODE_VERSION }} | |
- name: Print environment | |
run: | | |
node --version | |
npm --version | |
- name: Apply internal patch | |
run: | | |
# To create a patch, git diff > mypatch.patch | |
repo_dir="clients" | |
patches_dir="patches" | |
cp -r $patches_dir/* . | |
cp fakePremium.patch "$repo_dir" | |
cp images/* "$repo_dir/apps/browser/src/images/" | |
# Python script before cd | |
python patchManifestV3.py | |
python patchManifestV2.py | |
cd "$repo_dir" | |
git apply fakePremium.patch -v | |
- name: Build sources for reviewers | |
working-directory: clients | |
run: | | |
# Include hidden files in glob copy | |
shopt -s dotglob | |
# Remove ".git" directory | |
rm -r .git | |
# Copy root level files to source directory | |
mkdir browser-source | |
FILES=$(find . -maxdepth 1 -type f) | |
for FILE in $FILES; do cp "$FILE" browser-source/; done | |
# Copy patches to the Browser source directory | |
mkdir -p browser-source/patches | |
cp -r patches/* browser-source/patches | |
# Copy apps/browser to the Browser source directory | |
mkdir -p browser-source/apps/browser | |
cp -r apps/browser/* browser-source/apps/browser | |
# Copy libs to Browser source directory | |
mkdir browser-source/libs | |
cp -r libs/* browser-source/libs | |
zip -r browser-source.zip browser-source | |
- name: Upload browser source | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: browser-source-${{ env._LATEST_BROWSER_TAG }}.zip | |
path: clients/browser-source.zip | |
if-no-files-found: error | |
- name: NPM setup | |
run: npm ci | |
working-directory: clients/browser-source/ | |
- name: Build Chrome | |
run: npm run dist:chrome | |
working-directory: clients/browser-source/apps/browser | |
- name: Upload Chrome MV3 artifact | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: dist-chrome-MV3-${{ env._LATEST_BROWSER_TAG }}.zip | |
path: clients/browser-source/apps/browser/dist/dist-chrome.zip | |
if-no-files-found: error | |
- name: Build Edge | |
run: npm run dist:edge | |
working-directory: clients/browser-source/apps/browser | |
- name: Upload Edge artifact | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: dist-edge-${{ env._LATEST_BROWSER_TAG }}.zip | |
path: clients/browser-source/apps/browser/dist/dist-edge.zip | |
if-no-files-found: error | |
- name: Build Edge (MV3) | |
run: npm run dist:edge:mv3 | |
working-directory: clients/browser-source/apps/browser | |
- name: Upload Edge MV3 artifact (DO NOT USE FOR PROD) | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: DO-NOT-USE-FOR-PROD-dist-edge-MV3-${{ env._LATEST_BROWSER_TAG }}.zip | |
path: clients/browser-source/apps/browser/dist/dist-edge.zip | |
if-no-files-found: error | |
- name: Build Firefox | |
run: npm run dist:firefox | |
working-directory: clients/browser-source/apps/browser | |
- name: Upload Firefox artifact | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: dist-firefox-${{ env._LATEST_BROWSER_TAG }}.zip | |
path: clients/browser-source/apps/browser/dist/dist-firefox.zip | |
if-no-files-found: error | |
- name: Build Firefox (MV3) | |
run: npm run dist:firefox:mv3 | |
working-directory: clients/browser-source/apps/browser | |
- name: Upload Firefox MV3 artifact (DO NOT USE FOR PROD) | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: DO-NOT-USE-FOR-PROD-dist-firefox-MV3-${{ env._LATEST_BROWSER_TAG }}.zip | |
path: clients/browser-source/apps/browser/dist/dist-firefox.zip | |
if-no-files-found: error | |
- name: Build Opera | |
run: npm run dist:opera | |
working-directory: clients/browser-source/apps/browser | |
- name: Upload Opera artifact | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: dist-opera-${{ env._LATEST_BROWSER_TAG }}.zip | |
path: clients/browser-source/apps/browser/dist/dist-opera.zip | |
if-no-files-found: error | |
- name: Build Opera (MV3) | |
run: npm run dist:opera:mv3 | |
working-directory: clients/browser-source/apps/browser | |
- name: Upload Opera MV3 artifact (DO NOT USE FOR PROD) | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: DO-NOT-USE-FOR-PROD-dist-opera-MV3-${{ env._LATEST_BROWSER_TAG }}.zip | |
path: clients/browser-source/apps/browser/dist/dist-opera.zip | |
if-no-files-found: error | |
- name: Create release | |
uses: ncipollo/release-action@2c591bcc8ecdcd2db72b97d6147f871fcd833ba5 # v1.14.0 | |
with: | |
artifacts: "clients/browser-source/apps/browser/dist/*,clients/browser-source.zip" | |
tag: "${{ env._LATEST_BROWSER_TAG }}" | |
name: "${{ env._LATEST_BROWSER_TAG }}" | |
body: "${{ env._LATEST_BROWSER_TAG }} [Original Changelog](https://github.com/bitwarden/clients/releases/tag/${{ env._LATEST_BROWSER_TAG }})" | |
token: ${{ secrets.GITHUB_TOKEN }} | |
draft: false | |
allowUpdates: true | |
makeLatest: true |