Skip to content

Commit c8b0085

Browse files
committed
Copy build.yml into copilot-setup-steps.yml
1 parent 33531b8 commit c8b0085

File tree

1 file changed

+176
-0
lines changed

1 file changed

+176
-0
lines changed
Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
name: build
2+
on: [ push, pull_request ]
3+
jobs:
4+
setup:
5+
runs-on: ubuntu-22.04
6+
steps:
7+
# Required for workflow triggers like the auto-label for failing PRs
8+
- name: Save PR number
9+
if: github.event_name == 'pull_request'
10+
run: |
11+
mkdir -p ./pr
12+
echo ${{ github.event.number }} > ./pr/NR
13+
- uses: actions/upload-artifact@v4
14+
if: github.event_name == 'pull_request'
15+
with:
16+
name: pr
17+
path: pr/
18+
# Commit branch/name extraction from:
19+
# https://github.community/t/accessing-commit-message-in-pull-request-event/17158/8
20+
#
21+
# We need to fetch more than one commit to be able to access HEAD^2 in case
22+
# of a pull request
23+
- uses: actions/checkout@v4
24+
with:
25+
fetch-depth: 10
26+
# In case of a push event, the commit we care about is simply HEAD.
27+
# The current branch name can be found by parsing GITHUB_REF, for example,
28+
# if we are on the master branch, then GITHUB_REF = refs/heads/master.
29+
- name: Get commit branch and commit message from push
30+
if: github.event_name == 'push'
31+
run: |
32+
echo "BRANCH_NAME=$(echo ${GITHUB_REF##*/})" >> $GITHUB_ENV
33+
echo "COMMIT_MESSAGE<<EOF" >> $GITHUB_ENV
34+
echo "$(git log --format=%B -n 1 HEAD)" >> $GITHUB_ENV
35+
echo "EOF" >> $GITHUB_ENV
36+
echo "PREVIOUS_COMMIT=$(git log --format=%H -n 1 HEAD~1)" >> $GITHUB_ENV
37+
# In case of a pull_request event, the commit we care about is HEAD^2, that
38+
# is, the second parent of the pull request merge commit.
39+
# The current branch name is directly given by GITHUB_HEAD_REF
40+
- name: Get commit branch and commit message from PR
41+
if: github.event_name == 'pull_request'
42+
run: |
43+
echo "BRANCH_NAME=$GITHUB_HEAD_REF" >> $GITHUB_ENV
44+
echo "TARGET_BRANCH_NAME=$(echo ${GITHUB_BASE_REF##*/})" >> $GITHUB_ENV
45+
echo "COMMIT_MESSAGE<<EOF" >> $GITHUB_ENV
46+
echo "$(git log --format=%B -n 1 HEAD^2)" >> $GITHUB_ENV
47+
echo "EOF" >> $GITHUB_ENV
48+
echo "PREVIOUS_COMMIT=$(git log --format=%H -n 1 HEAD^2~1)" >> $GITHUB_ENV
49+
- uses: actions/setup-python@v5
50+
with:
51+
python-version: '3.10'
52+
architecture: 'x64'
53+
- name: Get all changes vs master
54+
env:
55+
PR_NUMBER: ${{ github.event.pull_request.number }}
56+
run: |
57+
echo "DIFF<<EOF" >> $GITHUB_ENV
58+
echo "$(./toolset/github_actions/github_actions_diff.py)" >> $GITHUB_ENV
59+
echo "EOF" >> $GITHUB_ENV
60+
- name: Determine which (if any) tests need to be run
61+
run: |
62+
echo "RUN_TESTS<<EOF" >> $GITHUB_ENV
63+
echo "$(grep -oP "github-actions-run-tests \K(.*)" <<< $DIFF || true)" >> $GITHUB_ENV
64+
echo "EOF" >> $GITHUB_ENV
65+
- id: event_out
66+
name: Write event outputs
67+
run: |
68+
# Escape the multiline string for Github Actions, see https://lab.amalitsky.com/posts/2022/github-actions-set-output-migration/#migration-from-set-output-to-github-output
69+
delimiter="$(openssl rand -hex 8)"
70+
{
71+
echo "commit_message<<${delimiter}"
72+
echo $COMMIT_MESSAGE
73+
echo "${delimiter}"
74+
} >> $GITHUB_OUTPUT
75+
echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT
76+
echo "target_branch_name=$TARGET_BRANCH_NAME" >> $GITHUB_OUTPUT
77+
echo "previous_commit=$PREVIOUS_COMMIT" >> $GITHUB_OUTPUT
78+
- id: verify_out
79+
name: Write verify job matrix
80+
run: |
81+
# Use of jq for JSON array creation from https://stackoverflow.com/a/26809318
82+
# The following creates a JSON object as follows:
83+
# include:
84+
# - TESTLANG: {lang}
85+
# with a TESTLANG object in the include array for each language under frameworks
86+
VERIFY_MATRIX=$(ls -1 frameworks | jq -Rc '.+"/" | select(inside(env.RUN_TESTS)) | rtrimstr("/")' | jq -sc '{include: map({TESTLANG: .})}')
87+
echo "verify_matrix=$VERIFY_MATRIX" >> $GITHUB_OUTPUT
88+
outputs:
89+
commit_message: ${{ steps.event_out.outputs.commit_message }}
90+
branch_name: ${{ steps.event_out.outputs.branch_name }}
91+
target_branch_name: ${{ steps.event_out.outputs.target_branch_name }}
92+
previous_commit: ${{ steps.event_out.outputs.previous_commit }}
93+
verify_matrix: ${{ steps.verify_out.outputs.verify_matrix }}
94+
verify:
95+
needs: setup
96+
# The matrix check is necessary because an empty job matrix is otherwise considered a workflow failure
97+
if: ${{ !contains(needs.setup.outputs.commit_message, '[ci skip]') && contains(needs.setup.outputs.verify_matrix, 'TESTLANG') }}
98+
runs-on: ubuntu-22.04
99+
strategy:
100+
matrix: ${{ fromJSON(needs.setup.outputs.verify_matrix) }}
101+
# Disable fail-fast to allow all failing frameworks/etc to fail in a
102+
# single build, rather than stopping when the first one fails.
103+
fail-fast: false
104+
env:
105+
TESTLANG: ${{ matrix.TESTLANG }}
106+
TESTDIR: ${{ matrix.TESTDIR }}
107+
COMMIT_MESSAGE: ${{ needs.setup.outputs.commit_message }}
108+
BRANCH_NAME: ${{ needs.setup.outputs.branch_name }}
109+
TARGET_BRANCH_NAME: ${{ needs.setup.outputs.target_branch_name }}
110+
PREVIOUS_COMMIT: ${{ needs.setup.outputs.previous_commit }}
111+
PR_NUMBER: ${{ github.event.pull_request.number }}
112+
steps:
113+
- uses: actions/checkout@v4
114+
with:
115+
fetch-depth: 10
116+
- uses: actions/setup-python@v5
117+
with:
118+
python-version: '3.10'
119+
architecture: 'x64'
120+
- name: Get all changes vs master
121+
# Runs github_actions_diff, with the the output accessible in later steps
122+
run: |
123+
# Write the result to env.DIFF for later steps
124+
echo "DIFF<<EOF" >> $GITHUB_ENV
125+
echo "$(./toolset/github_actions/github_actions_diff.py)" >> $GITHUB_ENV
126+
echo "EOF" >> $GITHUB_ENV
127+
- id: should_run_tests
128+
name: Determine which (if any) tests need to be run
129+
# Searches for github-actions-diff-continue to determine if the suite should be installed and the current $TESTDIR test should run.
130+
run: |
131+
# grep returns status code 1 if no matches are found. This fails the
132+
# build as it is a non-zero status. But this is an expected
133+
# possibility, so `|| true` is used to address/silence that.
134+
# Write the result to env.RUN_TESTS for later steps
135+
echo "RUN_TESTS<<EOF" >> $GITHUB_ENV
136+
echo "$(grep -oP "github-actions-run-tests \K(.*)" <<< $DIFF || true)" >> $GITHUB_ENV
137+
echo "EOF" >> $GITHUB_ENV
138+
- name: Log status
139+
run: |
140+
if [ "$RUN_TESTS" ]; then echo "Proceeding to run tests."; else echo 'Skipping test verification.'; fi
141+
- name: Build tfb dockerfile
142+
if: ${{ env.RUN_TESTS }}
143+
uses: mattes/cached-docker-build-action@v1
144+
with:
145+
args: " --file ./Dockerfile --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) --tag techempower/tfb ."
146+
cache_key: "${{ hashFiles('./Dockerfile') }}"
147+
- name: Stop services
148+
# Stop services that would claim ports we may need
149+
run: |
150+
sudo service mysql stop || true
151+
sudo service postgresql stop || true
152+
- name: Run tests if needed
153+
if: ${{ env.RUN_TESTS }}
154+
run: |
155+
# run-ci.py runs the diffing to see if github actions needs to test this framework. Ideally/eventually,
156+
# we'd like to try and do the diffing before github_actions_clean & setup.
157+
# This will run the tests exactly as you would in your own vm:
158+
docker network create tfb > /dev/null 2>&1 && docker run --network=tfb -e USER_ID=$(id -u) -e CI=true -v /var/run/docker.sock:/var/run/docker.sock --mount type=bind,source=`pwd`,target=/FrameworkBenchmarks techempower/tfb --mode verify --force-rm --test-dir $RUN_TESTS --results-environment Github-Actions;
159+
dependabot:
160+
needs: verify
161+
runs-on: ubuntu-latest
162+
permissions:
163+
pull-requests: write
164+
contents: write
165+
if: ${{ github.actor == 'dependabot[bot]' }}
166+
steps:
167+
- name: Dependabot metadata
168+
id: metadata
169+
uses: dependabot/fetch-metadata@v1.1.1
170+
with:
171+
github-token: "${{ secrets.GITHUB_TOKEN }}"
172+
- name: Enable auto-merge for Dependabot PRs
173+
run: gh pr merge --auto --merge "$PR_URL"
174+
env:
175+
PR_URL: ${{github.event.pull_request.html_url}}
176+
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

0 commit comments

Comments
 (0)