📚 Update Dictionaries Main #1271
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: ' 📚 Update Dictionaries Main' | |
on: | |
workflow_dispatch: | |
inputs: | |
base: | |
description: The Base Ref to apply the diff | |
required: false | |
default: main | |
force: | |
description: Force the update of integration snapshots even if the dictionaries are not updated. | |
required: false | |
default: false | |
type: boolean | |
schedule: | |
- cron: '0 7 * * *' | |
permissions: | |
contents: read | |
env: | |
NEW_BRANCH: "update-dictionaries-${{ inputs.base || 'main' }}" | |
REF_BRANCH: ${{ inputs.base || 'main' }} | |
NODE_VERSION: '22.x' | |
jobs: | |
calc-ref: | |
runs-on: ubuntu-latest | |
outputs: | |
ref: ${{ env.REF_BRANCH }} | |
steps: | |
- name: Ref Branch | |
run: | | |
echo Ref: "${{ env.REF_BRANCH }}" | |
load-integrations: | |
needs: | |
- calc-ref | |
uses: ./.github/workflows/reuseable-load-integrations-repo-list.yml | |
with: | |
ref: ${{ needs.calc-ref.outputs.ref }} | |
dirty: false | |
check-dictionaries: | |
if: github.repository_owner == 'streetsidesoftware' | |
needs: | |
- calc-ref | |
env: | |
REF_BRANCH: ${{ needs.calc-ref.outputs.ref }} | |
runs-on: ubuntu-latest | |
outputs: | |
patch: ${{ env.PATCH_DIFF }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ env.REF_BRANCH }} | |
- name: Setup Node and Pnpm | |
uses: ./.github/actions/setup-node | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Install | |
run: pnpm install | |
- name: Update Dictionaries | |
run: | | |
pnpm run update-dictionary-packages | |
# Try to avoid unnecessary updates by limiting it to `package.json` changes. | |
# To do this, revert to the previous package lock and re-install. | |
- name: Update Package Lock | |
run: | | |
git checkout pnpm-lock.yaml | |
pnpm i --no-frozen-lockfile | |
- name: Build Patch | |
run: | | |
echo 'PATCH_DIFF<<__DIFF__' >> $GITHUB_ENV | |
git --no-pager diff >> $GITHUB_ENV | |
echo '__DIFF__' >> $GITHUB_ENV | |
- name: Show Patch | |
id: patch | |
run: | | |
echo "$PATCH_DIFF" | |
- name: Store Repo Diff | |
run: | | |
mkdir temp | |
echo "$PATCH_DIFF" > temp/patch.diff | |
- name: store diff | |
uses: actions/upload-artifact@v4 | |
with: | |
name: diffs-update | |
path: temp/*.diff | |
retention-days: 1 | |
check-result: | |
runs-on: ubuntu-latest | |
needs: | |
- calc-ref | |
- check-dictionaries | |
- load-integrations | |
steps: | |
- name: Show Needs | |
env: | |
NEEDS: ${{ toJSON(needs) }} | |
run: | | |
echo "Needs: $NEEDS" | |
build: | |
needs: | |
- calc-ref | |
- check-dictionaries | |
uses: './.github/workflows/reuseable-build-dist-cache.yml' | |
with: | |
ref: ${{ needs.calc-ref.outputs.ref }} | |
patch: ${{ needs.check-dictionaries.outputs.patch }} | |
integrations: | |
if: ${{ inputs.force || needs.check-dictionaries.outputs.patch }} | |
runs-on: ubuntu-latest | |
needs: | |
- load-integrations | |
- build | |
- calc-ref | |
- check-dictionaries | |
env: | |
REF_BRANCH: ${{ needs.calc-ref.outputs.ref }} | |
PATCH: ${{ needs.check-dictionaries.outputs.patch }} | |
strategy: | |
# the integration tests are independent, so we want to run them all. | |
fail-fast: false | |
matrix: | |
# List of repositories to check. | |
# Use `repo-list.sh` in `integration-tests` to generate. | |
repo: ${{ fromJSON(needs.load-integrations.outputs.repos) }} | |
# repo: | |
# # - prettier/prettier | |
# # - typescript-eslint/typescript-eslint | |
# - wireapp/wire-webapp | |
steps: | |
- name: Build Results | |
run: | | |
echo "key: ${{ needs.build.outputs.key }}" | |
echo "path: ${{ needs.build.outputs.path }}" | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ env.REF_BRANCH }} | |
- name: Patch | |
if: ${{ env.PATCH }} | |
run: | | |
echo "$PATCH" | git apply | |
- name: Setup Node and Pnpm | |
uses: ./.github/actions/setup-node | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Cache Build | |
id: step-cache-build | |
uses: actions/[email protected] | |
with: | |
key: ${{ needs.build.outputs.key }} | |
path: ${{ needs.build.outputs.path }} | |
- name: Cached Results | |
run: | | |
echo Build Cache: ${{ steps.step-cache-build.outputs.cache-hit == 'true' && 'Hit' || 'Miss' }} | |
- name: Install | |
run: pnpm i | |
- name: Has pnpm has failed? | |
if: ${{ failure() }} | |
run: | | |
ls -alF /home/runner/.pnpm/_logs/*.log | |
cat /home/runner/.pnpm/_logs/*.log | |
- name: Check Build | |
if: ${{ steps.step-cache-build.outputs.cache-hit != 'true' }} | |
run: exit 1 | |
- name: Repo Info | |
id: step-repo-info | |
run: | | |
echo "repo-info=$(jq -c '.repositories[] | select(.path == "${{ matrix.repo }}")' integration-tests/config/config.json)" >> $GITHUB_OUTPUT | |
- name: Cache Integration Test Repository Files | |
uses: actions/[email protected] | |
with: | |
key: int-repo-temp-files-${{ matrix.repo }}-${{ fromJSON(steps.step-repo-info.outputs.repo-info).commit }} | |
path: | | |
integration-tests/repositories/temp/${{ matrix.repo }} | |
- name: Run Integration Tests ${{ matrix.repo }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: > | |
cd integration-tests | |
&& pnpm i | |
&& pnpm run update-snapshots-only -- ${{ matrix.repo }} | |
- name: Normalize Repo Name | |
id: step-normalize-repo-name | |
env: | |
REPO: ${{ matrix.repo }} | |
REPLACE: '/' | |
REPLACE_WITH: '__' | |
run: | | |
echo "REPO_NAME=${REPO//${REPLACE}/${REPLACE_WITH}}" >> $GITHUB_OUTPUT | |
- name: Store Repo Diff | |
env: | |
REPO: ${{ steps.step-normalize-repo-name.outputs.REPO_NAME }} | |
run: | | |
mkdir temp || echo temp already exists | |
echo "${{ matrix.repo }} =>" $REPO | |
git diff integration-tests/config integration-tests/repositories integration-tests/snapshots > temp/$REPO.diff | |
- name: store diff | |
uses: actions/upload-artifact@v4 | |
with: | |
name: diffs-integrations-${{ steps.step-normalize-repo-name.outputs.REPO_NAME }} | |
path: temp/*.diff | |
retention-days: 1 | |
update-snapshots: | |
if: ${{ inputs.force || needs.check-dictionaries.outputs.patch }} | |
runs-on: ubuntu-latest | |
needs: | |
- calc-ref | |
- check-dictionaries | |
env: | |
REF_BRANCH: ${{ needs.calc-ref.outputs.ref }} | |
PATCH: ${{ needs.check-dictionaries.outputs.patch }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ env.REF_BRANCH }} | |
- name: Patch | |
if: ${{ env.PATCH }} | |
run: | | |
echo "$PATCH" | git apply | |
- name: Setup Node and Pnpm | |
uses: ./.github/actions/setup-node | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Install and Build | |
run: | | |
pnpm i | |
pnpm run build | |
- name: Has pnpm has failed? | |
if: ${{ failure() }} | |
run: | | |
ls -alF /home/runner/.pnpm/_logs/*.log | |
cat /home/runner/.pnpm/_logs/*.log | |
- name: Update update-snapshots-only | |
continue-on-error: true | |
run: | | |
pnpm run test:update-snapshots | |
- name: Store Update Snapshot Diff | |
run: | | |
mkdir temp || echo temp already exists | |
git diff packages/cspell packages/cspell-lib > temp/update_snapshot.diff | |
- name: store diff | |
uses: actions/upload-artifact@v4 | |
with: | |
name: diffs-update-snapshots | |
path: temp/*.diff | |
retention-days: 1 | |
pr-setup: | |
runs-on: ubuntu-latest | |
needs: | |
- integrations | |
- update-snapshots | |
- calc-ref | |
- check-dictionaries | |
env: | |
REF_BRANCH: ${{ needs.calc-ref.outputs.ref }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ env.REF_BRANCH }} | |
- name: Setup Node and Pnpm | |
uses: ./.github/actions/setup-node | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: restore repos | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: diffs-* | |
path: temp | |
merge-multiple: true | |
- name: show downloaded | |
run: ls -alF temp | |
- name: apply diff | |
run: | | |
git apply --allow-empty temp/*.diff | |
- name: Update Integrations List | |
run: | | |
pnpm run update-integrations-list | |
- name: PR Body | |
id: body | |
uses: streetsidesoftware/actions/public/pr-body@v1 | |
with: | |
title: Update Dictionaries (${{ env.REF_BRANCH }}) | |
- name: PR | |
uses: streetsidesoftware/actions/.github/actions/pr@v1 | |
with: | |
commit-message: 'fix: Workflow Bot -- Update Dictionaries (${{ env.REF_BRANCH }})' | |
branch: ${{ env.NEW_BRANCH }} | |
base: ${{ env.REF_BRANCH }} | |
title: 'fix: Workflow Bot -- Update Dictionaries (${{ env.REF_BRANCH }})' | |
body: ${{ steps.body.outputs.body }} | |
app_id: ${{ secrets.AUTOMATION_APP_ID }} | |
app_private_key: ${{ secrets.AUTOMATION_PRIVATE_KEY }} |