Skip to content

📚 Update Dictionaries Main #1145

📚 Update Dictionaries Main

📚 Update Dictionaries Main #1145

name: ' 📚 Update Dictionaries Main'
on:
workflow_dispatch:
inputs:
base:
description: The Base Ref to apply the diff
required: false
default: 'main'
schedule:
- cron: '0 7 * * *'
permissions:
contents: read
env:
NEW_BRANCH: "update-dictionaries-${{ inputs.base || 'main' }}"
REF_BRANCH: ${{ inputs.base || 'main' }}
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 pnpm
uses: pnpm/[email protected]
- name: Use Node.js
uses: actions/setup-node@v4
with:
cache: pnpm
- 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: ${{ 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: Setup pnpm
uses: pnpm/[email protected]
- name: Patch
run: |
echo "$PATCH" | git apply
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
- run: pnpm -v
- 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: ${{ 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: Setup pnpm
uses: pnpm/[email protected]
- name: Patch
run: |
echo "$PATCH" | git apply
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
- run: pnpm -v
- 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
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 pnpm
uses: pnpm/[email protected]
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
- 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 }}