-
Notifications
You must be signed in to change notification settings - Fork 17
144 lines (129 loc) · 4.93 KB
/
generate_dist_locales.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
name: Generate distribution files for all locales
on:
workflow_dispatch:
push:
branches:
- main
concurrency:
group: "full_dist"
cancel-in-progress: true
permissions:
contents: write
pull-requests: write
jobs:
generate_locales:
if: github.repository_owner == 'Shopify'
runs-on: ubuntu-latest
outputs:
LOCALES: ${{ steps.retrieve_locales.outputs.locales }}
steps:
- uses: actions/checkout@v4
- name: Retrieve Locales
id: retrieve_locales
run: |
locales=$(ls data/localizations/categories/ | grep -Eo '^[a-z]{2,3}(-[A-Z]{2})?' | uniq | xargs)
locales_json=$(echo -n "["; for locale in $locales; do echo -n "\"$locale\","; done | sed 's/,$//'; echo -n "]")
echo "locales=$locales_json" >> $GITHUB_OUTPUT
generate_distribution_files:
needs: generate_locales
runs-on: ubuntu-latest
strategy:
matrix:
locale: ${{ fromJson(needs.generate_locales.outputs.LOCALES) }}
steps:
- uses: actions/checkout@v4
# Setup dependencies
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- uses: cue-lang/setup-cue@v1.0.0
with:
version: 'v0.7.0'
- name: Install b3sum
run: |
curl -L https://github.com/BLAKE3-team/BLAKE3/releases/download/1.5.3/b3sum_linux_x64_bin -o b3sum
chmod +x b3sum
sudo mv b3sum /usr/local/bin/
# Generate distribution files
- name: Generate local-specific distribution files
run: VERBOSE=1 LOCALES=${{ matrix.locale }} make --file=Makefile build
# Create manifest and upload everything
- name: Create distribution manifest
run: |
target="dist/${{ matrix.locale }}"
manifest="${{ matrix.locale }}_manifest.b3"
manifest_sig="${manifest}.sig"
find "$target" -type f -print0 | sort -z | xargs -0 b3sum > "$manifest"
echo -n "${{ secrets.MANIFEST_KEY }}" | b3sum --keyed "$manifest" > "$manifest_sig"
- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.locale }}
path: |
dist/${{ matrix.locale }}/
${{ matrix.locale }}_manifest.b3
${{ matrix.locale }}_manifest.b3.sig
create_pull_request:
needs: generate_distribution_files
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: .
merge-multiple: true
- name: Install b3sum
run: |
curl -L https://github.com/BLAKE3-team/BLAKE3/releases/download/1.5.3/b3sum_linux_x64_bin -o b3sum
chmod +x b3sum
sudo mv b3sum /usr/local/bin/
- name: Verify file integrity
run: |
find dist -maxdepth 1 -mindepth 1 -type d | while read -r locale_path; do
locale=$(basename "$locale_path")
manifest="${locale}_manifest.b3"
manifest_sig="${manifest}.sig"
verify_sig="${locale}_verify.b3.sig"
echo -n "${{ secrets.MANIFEST_KEY }}" | b3sum --keyed "$manifest" > "$verify_sig"
echo "Vetting $manifest_sig with generated $verify_sig"
if ! (cmp -s "$manifest_sig" "$verify_sig"); then
echo "Error: Integrity failure for ${locale}. Invalid key used to generate ${verify_sig}."
exit 1
fi
rm -f "$manifest_sig" "$verify_sig"
echo "Vetting $manifest"
if ! (b3sum --check "$manifest"); then
echo "Error: Integrity failure for ${locale}. Files are inconsistent with ${manifest}."
exit 1
fi
rm -f "$manifest"
done
# Check for any remaining manifest files
unchecked_manifests=$(find . -maxdepth 1 -name '*_manifest.b3')
if [ -n "$unchecked_manifests" ]; then
echo "Error: Unchecked manifest files found:"
echo "$unchecked_manifests"
exit 1
fi
- name: Set up short SHA
id: short_sha
run: echo "sha=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_OUTPUT
- name: Get last commit author username
id: last_committer
run: |
LAST_COMMIT_SHA=$(git log -1 --pretty=format:'%H')
API_URL="https://api.github.com/repos/${{ github.repository }}/commits/${LAST_COMMIT_SHA}"
AUTHOR_LOGIN=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" $API_URL | jq -r '.author.login')
echo "username=$AUTHOR_LOGIN" >> $GITHUB_OUTPUT
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Commit changes and create PR
uses: peter-evans/create-pull-request@v6
with:
commit-message: "🤖 Update localization files for ${{ github.sha }}"
branch: "localization-dist"
title: "🤖 Update localization files"
body: |
Update `dist/` localization files. Triggered by ${{ steps.short_sha.outputs.sha }}.
cc @${{ steps.last_committer.outputs.username }}
labels: automated-pr, localization
reviewers: ${{ steps.last_committer.outputs.username }}