Skip to content

Commit 9d52110

Browse files
authored
ci: pass data between steps via GITHUB_OUTPUT (mdn#38702)
Avoids unintended side-effects of using GITHUB_ENV.
1 parent f01fb8f commit 9d52110

File tree

4 files changed

+76
-65
lines changed

4 files changed

+76
-65
lines changed

.github/workflows/pr-check-lint_content.yml

+40-35
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ jobs:
2626
uses: actions/checkout@v4
2727

2828
- name: Get changed files
29+
id: check
2930
env:
3031
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3132
BASE_SHA: ${{ github.event.pull_request.base.sha }}
@@ -37,17 +38,17 @@ jobs:
3738
--jq '.files | .[] | select(.status|IN("added", "modified", "renamed", "copied", "changed")) | .filename')
3839
# filter out files that are not markdown
3940
DIFF_DOCUMENTS=$(echo "${DIFF_DOCUMENTS}" | egrep -i "^files/.*\.md$" | xargs)
40-
echo "DIFF_DOCUMENTS=${DIFF_DOCUMENTS}" >> $GITHUB_ENV
41+
echo "DIFF_DOCUMENTS=${DIFF_DOCUMENTS}" >> "$GITHUB_OUTPUT"
4142
4243
- name: Checkout HEAD
43-
if: env.DIFF_DOCUMENTS
44+
if: steps.check.outputs.DIFF_DOCUMENTS
4445
uses: actions/checkout@v4
4546
with:
4647
ref: ${{ github.event.pull_request.head.sha }}
4748
path: pr_head
4849

4950
- name: Get changed content from HEAD
50-
if: env.DIFF_DOCUMENTS
51+
if: steps.check.outputs.DIFF_DOCUMENTS
5152
run: |
5253
git config --global user.email "[email protected]"
5354
git config --global user.name "mdn-bot"
@@ -63,21 +64,24 @@ jobs:
6364
git commit -m "Code from PR head"
6465
6566
- name: Setup Node.js environment
66-
if: env.DIFF_DOCUMENTS
67+
if: steps.check.outputs.DIFF_DOCUMENTS
6768
uses: actions/setup-node@v4
6869
with:
6970
node-version-file: ".nvmrc"
7071
cache: yarn
7172

7273
- name: Install all yarn packages
73-
if: env.DIFF_DOCUMENTS
74+
if: steps.check.outputs.DIFF_DOCUMENTS
7475
run: yarn --frozen-lockfile
7576
env:
7677
# https://github.com/microsoft/vscode-ripgrep#github-api-limit-note
7778
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7879

7980
- name: Lint and format markdown files
80-
if: env.DIFF_DOCUMENTS
81+
id: lint
82+
if: steps.check.outputs.DIFF_DOCUMENTS
83+
env:
84+
DIFF_DOCUMENTS: ${{ steps.check.outputs.DIFF_DOCUMENTS }}
8185
run: |
8286
# Generate random delimiter
8387
# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings
@@ -88,38 +92,38 @@ jobs:
8892
echo "crlf line ending check"
8993
CRLF_FAILED=true
9094
CRLF_LOG=$(git ls-files --eol ${files_to_lint} | grep -E 'w/(mixed|crlf)') || CRLF_FAILED=false
91-
echo "CRLF_LOG<<${EOF}" >> $GITHUB_ENV
92-
echo "${CRLF_LOG}" >> $GITHUB_ENV
93-
echo "${EOF}" >> $GITHUB_ENV
94-
echo "CRLF_FAILED=${CRLF_FAILED}" >> $GITHUB_ENV
95+
echo "CRLF_LOG<<${EOF}" >> "$GITHUB_OUTPUT"
96+
echo "${CRLF_LOG}" >> "$GITHUB_OUTPUT"
97+
echo "${EOF}" >> "$GITHUB_OUTPUT"
98+
echo "CRLF_FAILED=${CRLF_FAILED}" >> "$GITHUB_OUTPUT"
9599
96100
echo "Running markdownlint --fix"
97101
MD_LINT_FAILED=false
98102
MD_LINT_LOG=$(yarn markdownlint-cli2 --fix ${files_to_lint} 2>&1) || MD_LINT_FAILED=true
99-
echo "MD_LINT_LOG<<${EOF}" >> $GITHUB_ENV
100-
echo "${MD_LINT_LOG}" >> $GITHUB_ENV
101-
echo "${EOF}" >> $GITHUB_ENV
102-
echo "MD_LINT_FAILED=${MD_LINT_FAILED}" >> $GITHUB_ENV
103+
echo "MD_LINT_LOG<<${EOF}" >> "$GITHUB_OUTPUT"
104+
echo "${MD_LINT_LOG}" >> "$GITHUB_OUTPUT"
105+
echo "${EOF}" >> "$GITHUB_OUTPUT"
106+
echo "MD_LINT_FAILED=${MD_LINT_FAILED}" >> "$GITHUB_OUTPUT"
103107
104108
echo "Linting front-matter"
105109
FM_LINT_FAILED=false
106110
FM_LINT_LOG=$(node scripts/front-matter_linter.js --fix true ${files_to_lint} 2>&1) || FM_LINT_FAILED=true
107-
echo "FM_LINT_LOG<<${EOF}" >> $GITHUB_ENV
108-
echo "${FM_LINT_LOG}" >> $GITHUB_ENV
109-
echo "${EOF}" >> $GITHUB_ENV
110-
echo "FM_LINT_FAILED=${FM_LINT_FAILED}" >> $GITHUB_ENV
111+
echo "FM_LINT_LOG<<${EOF}" >> "$GITHUB_OUTPUT"
112+
echo "${FM_LINT_LOG}" >> "$GITHUB_OUTPUT"
113+
echo "${EOF}" >> "$GITHUB_OUTPUT"
114+
echo "FM_LINT_FAILED=${FM_LINT_FAILED}" >> "$GITHUB_OUTPUT"
111115
112116
echo "Running Prettier"
113117
PRETTIER_FAILED=false
114118
PRETTIER_LOG=$(yarn prettier --check ${files_to_lint} 2>&1) || PRETTIER_FAILED=true
115-
echo "PRETTIER_LOG<<${EOF}" >> $GITHUB_ENV
116-
echo "${PRETTIER_LOG}" >> $GITHUB_ENV
117-
echo "${EOF}" >> $GITHUB_ENV
118-
echo "PRETTIER_FAILED=${PRETTIER_FAILED}" >> $GITHUB_ENV
119+
echo "PRETTIER_LOG<<${EOF}" >> "$GITHUB_OUTPUT"
120+
echo "${PRETTIER_LOG}" >> "$GITHUB_OUTPUT"
121+
echo "${EOF}" >> "$GITHUB_OUTPUT"
122+
echo "PRETTIER_FAILED=${PRETTIER_FAILED}" >> "$GITHUB_OUTPUT"
119123
yarn prettier -w ${files_to_lint}
120124
121125
if [[ -n $(git diff) ]]; then
122-
echo "FILES_MODIFIED=true" >> $GITHUB_ENV
126+
echo "FILES_MODIFIED=true" >> "$GITHUB_OUTPUT"
123127
fi
124128
125129
# info for troubleshooting
@@ -130,13 +134,13 @@ jobs:
130134
git diff
131135
132136
- name: Setup reviewdog
133-
if: env.FILES_MODIFIED == 'true' || env.MD_LINT_FAILED == 'true'
137+
if: steps.lint.outputs.FILES_MODIFIED == 'true' || steps.lint.outputs.MD_LINT_FAILED == 'true'
134138
uses: reviewdog/action-setup@e04ffabe3898a0af8d0fb1af00c188831c4b5893 # v1.3.2
135139
with:
136140
reviewdog_version: latest
137141

138142
- name: Suggest changes using diff
139-
if: env.FILES_MODIFIED == 'true'
143+
if: steps.lint.outputs.FILES_MODIFIED == 'true'
140144
env:
141145
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
142146
run: |
@@ -151,8 +155,9 @@ jobs:
151155
-reporter=github-pr-review < "${TMPFILE}"
152156
153157
- name: Add reviews for markdownlint errors
154-
if: env.MD_LINT_FAILED == 'true'
158+
if: steps.lint.outputs.MD_LINT_FAILED == 'true'
155159
env:
160+
MD_LINT_LOG: ${{ steps.lint.outputs.MD_LINT_LOG }}
156161
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
157162
run: |
158163
echo "${MD_LINT_LOG}" | \
@@ -164,16 +169,16 @@ jobs:
164169
-reporter="github-pr-review"
165170
166171
- name: Fail if any issues pending
167-
if: env.FILES_MODIFIED == 'true' || env.CRLF_FAILED == 'true' || env.MD_LINT_FAILED == 'true' || env.FM_LINT_FAILED == 'true'
172+
if: steps.lint.outputs.FILES_MODIFIED == 'true' || steps.lint.outputs.CRLF_FAILED == 'true' || steps.lint.outputs.MD_LINT_FAILED == 'true' || steps.lint.outputs.FM_LINT_FAILED == 'true'
168173
env:
169-
CRLF_FAILED: ${{ env.CRLF_FAILED }}
170-
MD_LINT_FAILED: ${{ env.MD_LINT_FAILED }}
171-
FM_LINT_FAILED: ${{ env.FM_LINT_FAILED }}
172-
PRETTIER_FAILED: ${{ env.PRETTIER_FAILED }}
173-
CRLF_LOG: ${{ env.CRLF_LOG }}
174-
MD_LINT_LOG: ${{ env.MD_LINT_LOG }}
175-
FM_LINT_LOG: ${{ env.FM_LINT_LOG }}
176-
PRETTIER_LOG: ${{ env.PRETTIER_LOG }}
174+
CRLF_FAILED: ${{ steps.lint.outputs.CRLF_FAILED }}
175+
MD_LINT_FAILED: ${{ steps.lint.outputs.MD_LINT_FAILED }}
176+
FM_LINT_FAILED: ${{ steps.lint.outputs.FM_LINT_FAILED }}
177+
PRETTIER_FAILED: ${{ steps.lint.outputs.PRETTIER_FAILED }}
178+
CRLF_LOG: ${{ steps.lint.outputs.CRLF_LOG }}
179+
MD_LINT_LOG: ${{ steps.lint.outputs.MD_LINT_LOG }}
180+
FM_LINT_LOG: ${{ steps.lint.outputs.FM_LINT_LOG }}
181+
PRETTIER_LOG: ${{ steps.lint.outputs.PRETTIER_LOG }}
177182
run: |
178183
echo -e "\nPlease fix all the linting issues mentioned in the following logs and in the PR review comments."
179184

.github/workflows/pr-review-companion.yml

+17-17
Original file line numberDiff line numberDiff line change
@@ -42,72 +42,72 @@ jobs:
4242
run-id: ${{ github.event.workflow_run.id }}
4343

4444
- name: Check for artifacts
45+
id: check
4546
if: hashFiles('build/') != ''
4647
run: |
47-
echo "HAS_ARTIFACT=true" >> "$GITHUB_ENV"
48-
PR_NUMBER=`cat build/NR`
49-
echo "PREFIX=pr$PR_NUMBER" >> "$GITHUB_ENV"
48+
echo "HAS_ARTIFACT=true" >> "$GITHUB_OUTPUT"
49+
PR_NUMBER=`cat build/NR | tr -dc '0-9'`
50+
echo "PR_NUMBER=$PR_NUMBER" >> "$GITHUB_OUTPUT"
51+
echo "PREFIX=pr$PR_NUMBER" >> "$GITHUB_OUTPUT"
5052
5153
- name: Authenticate with GCP
52-
if: env.HAS_ARTIFACT
54+
if: steps.check.outputs.HAS_ARTIFACT
5355
uses: google-github-actions/auth@v2
5456
with:
5557
token_format: access_token
5658
service_account: deploy-mdn-review-content@${{ secrets.GCP_PROJECT_NAME }}.iam.gserviceaccount.com
5759
workload_identity_provider: projects/${{ secrets.WIP_PROJECT_ID }}/locations/global/workloadIdentityPools/github-actions/providers/github-actions
5860

5961
- name: Setup gcloud
60-
if: env.HAS_ARTIFACT
62+
if: steps.check.outputs.HAS_ARTIFACT
6163
uses: google-github-actions/setup-gcloud@v2
6264

6365
- name: Upload to GCS
64-
if: env.HAS_ARTIFACT
66+
if: steps.check.outputs.HAS_ARTIFACT
6567
uses: google-github-actions/upload-cloud-storage@v2
6668
with:
6769
path: "build"
68-
destination: "${{ vars.GCP_BUCKET_NAME }}/${{ env.PREFIX }}"
70+
destination: "${{ vars.GCP_BUCKET_NAME }}/${{ steps.check.outputs.PREFIX }}"
6971
resumable: false
7072
concurrency: 500
7173
parent: false
7274
process_gcloudignore: false
7375

7476
- name: Checkout (mdn/content)
7577
uses: actions/checkout@v4
76-
if: env.HAS_ARTIFACT
78+
if: steps.check.outputs.HAS_ARTIFACT
7779
with:
7880
path: content
7981

8082
- name: Setup (mdn/content)
8183
uses: actions/setup-node@v4
82-
if: env.HAS_ARTIFACT
84+
if: steps.check.outputs.HAS_ARTIFACT
8385
with:
8486
node-version-file: "content/.nvmrc"
8587

8688
- name: Install (mdn/content)
87-
if: env.HAS_ARTIFACT
89+
if: steps.check.outputs.HAS_ARTIFACT
8890
env:
8991
# https://github.com/microsoft/vscode-ripgrep#github-api-limit-note
9092
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
9193
working-directory: content
9294
run: yarn --frozen-lockfile
9395

9496
- name: Analyze PR build
95-
if: env.HAS_ARTIFACT
97+
if: steps.check.outputs.HAS_ARTIFACT
9698
env:
9799
BUILD_OUT_ROOT: ${{ github.workspace }}/build
98100
working-directory: content
99101
run: |
100-
PR_NUMBER=`cat "$BUILD_OUT_ROOT/NR"`
101-
102102
echo "Pull request:"
103-
echo "https://github.com/mdn/content/pull/$PR_NUMBER"
103+
echo "https://github.com/mdn/content/pull/${{ steps.check.outputs.PR_NUMBER }}"
104104
105105
node scripts/analyze-pr-build.js \
106-
--prefix="pr$PR_NUMBER" \
106+
--prefix="${{ steps.check.outputs.PREFIX }}" \
107107
--analyze-flaws \
108108
--analyze-dangerous-content \
109-
--github-token="${{secrets.GITHUB_TOKEN}}" \
109+
--github-token="${{ secrets.GITHUB_TOKEN }}" \
110110
--repo=$GITHUB_REPOSITORY \
111-
--pr-number="$PR_NUMBER" \
111+
--pr-number="${{ steps.check.outputs.PR_NUMBER }}" \
112112
--diff-file=$BUILD_OUT_ROOT/DIFF \
113113
$BUILD_OUT_ROOT

.github/workflows/pr-test.yml

+13-8
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ jobs:
3232
- uses: actions/checkout@v4
3333

3434
- name: Get changed files
35+
id: check
3536
run: |
3637
# Use the GitHub API to get the list of changed files
3738
# documentation: https://docs.github.com/rest/commits/commits#compare-two-commits
@@ -40,32 +41,34 @@ jobs:
4041
4142
# filter out files that are not markdown files
4243
GIT_DIFF_CONTENT=$(echo "${DIFF_DOCUMENTS}" | egrep -i "^files/.*\.(md)$" | xargs)
43-
echo "GIT_DIFF_CONTENT=${GIT_DIFF_CONTENT}" >> $GITHUB_ENV
44+
echo "GIT_DIFF_CONTENT=${GIT_DIFF_CONTENT}" >> "$GITHUB_OUTPUT"
4445
4546
# filter out files that are not attachments
4647
GIT_DIFF_FILES=$(echo "${DIFF_DOCUMENTS}" | egrep -i "^files/.*\.(png|jpeg|jpg|gif|svg|webp)$" | xargs)
47-
echo "GIT_DIFF_FILES=${GIT_DIFF_FILES}" >> $GITHUB_ENV
48+
echo "GIT_DIFF_FILES=${GIT_DIFF_FILES}" >> "$GITHUB_OUTPUT"
4849
env:
4950
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5051

5152
- name: Setup Node.js environment
52-
if: env.GIT_DIFF_CONTENT || env.GIT_DIFF_FILES
53+
if: steps.check.outputs.GIT_DIFF_CONTENT || steps.check.outputs.GIT_DIFF_FILES
5354
uses: actions/setup-node@v4
5455
with:
5556
node-version-file: ".nvmrc"
5657
cache: yarn
5758

5859
- name: Install all yarn packages
59-
if: env.GIT_DIFF_CONTENT || env.GIT_DIFF_FILES
60+
if: steps.check.outputs.GIT_DIFF_CONTENT || steps.check.outputs.GIT_DIFF_FILES
6061
run: yarn --frozen-lockfile
6162
env:
6263
# https://github.com/microsoft/vscode-ripgrep#github-api-limit-note
6364
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6465

6566
- name: Build changed content
6667
id: build-content
67-
if: env.GIT_DIFF_CONTENT
68+
if: steps.check.outputs.GIT_DIFF_CONTENT
6869
env:
70+
GIT_DIFF_CONTENT: ${{ steps.check.outputs.GIT_DIFF_CONTENT }}
71+
6972
CONTENT_ROOT: ${{ github.workspace }}/files
7073

7174
# This is so that if there's a single 'unsafe_html' flaw, it
@@ -119,21 +122,23 @@ jobs:
119122
wget https://github.com/${{ github.repository }}/compare/${BASE_SHA}...${HEAD_SHA}.diff -O ${BUILD_OUT_ROOT}/DIFF
120123
121124
- name: Merge static assets with built documents
122-
if: env.GIT_DIFF_CONTENT
125+
if: steps.check.outputs.GIT_DIFF_CONTENT
123126
run: |
124127
# Exclude the .map files, as they're used for debugging JS and CSS.
125128
rsync -a --exclude "*.map" node_modules/@mdn/yari/client/build/ $BUILD_OUT_ROOT
126129
# Show the final disk usage size of the build.
127130
du -sh $BUILD_OUT_ROOT
128131
129132
- uses: actions/upload-artifact@v4
130-
if: env.GIT_DIFF_CONTENT
133+
if: steps.check.outputs.GIT_DIFF_CONTENT
131134
with:
132135
name: build
133136
path: ${{ env.BUILD_OUT_ROOT }}
134137

135138
- name: Check changed files
136-
if: env.GIT_DIFF_FILES
139+
if: steps.check.outputs.GIT_DIFF_FILES
140+
env:
141+
GIT_DIFF_FILES: ${{ steps.check.outputs.GIT_DIFF_FILES }}
137142
run: |
138143
echo $GIT_DIFF_FILES
139144

.github/workflows/spelling-check-bot.yml

+6-5
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,23 @@ jobs:
3232
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3333

3434
- name: Run scripts
35+
id: check
3536
run: |
3637
echo Running spelling check...
3738
output=$(yarn --silent lint:typos-group-by-file || exit 0)
3839
if [ -n "${output}" ]; then
3940
output=$(node scripts/linkify-logs.js "${output}")
4041
output=$(echo "$output" | sed 's/^/- /')
4142
echo "$output"
42-
echo "OUTPUT<<EOF" >> $GITHUB_ENV
43-
echo "$output" >> $GITHUB_ENV
44-
echo "EOF" >> $GITHUB_ENV
43+
echo "OUTPUT<<EOF" >> "$GITHUB_OUTPUT"
44+
echo "$output" >> "$GITHUB_OUTPUT"
45+
echo "EOF" >> "$GITHUB_OUTPUT"
4546
else
4647
echo "No typos found! 🎉"
4748
fi
4849
4950
- name: Report spellcheck errors
50-
if: env.OUTPUT != ''
51+
if: steps.check.outputs.OUTPUT != ''
5152
run: |
5253
issue=$(gh issue create --title "$TITLE" --label "$LABELS" --body "$BODY")
5354
echo Issue URL ${issue}
@@ -58,7 +59,7 @@ jobs:
5859
BODY: |
5960
Typos and unknown words:
6061
61-
${{ env.OUTPUT }}
62+
${{ steps.check.outputs.OUTPUT }}
6263
6364
> [!TIP]
6465
> If the word is actually valid or it is required to be ignored, consider adding it to one of the dictionaries under [`.vscode/dictionaries`](https://github.com/mdn/content/tree/main/.vscode/dictionaries).

0 commit comments

Comments
 (0)