-
Notifications
You must be signed in to change notification settings - Fork 2
117 lines (104 loc) · 4.13 KB
/
continuous-integration.yaml
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
name: Test and Deploy
on:
pull_request:
# allow manual run
workflow_dispatch:
# always run on main
push:
branches: [main]
env:
OMEGAUPUSER: ofmi
OMEGAUP_API_TOKEN: ${{ secrets.OMEGAUP_API_TOKEN }}
GIT_USERNAME: ${{ github.actor }}
jobs:
build-test-deploy:
runs-on: ubuntu-latest
steps:
- name: Set base commit (pull request)
run: |
echo "GITHUB_BASE_COMMIT=${{ github.event.pull_request.base.sha }}" >> $GITHUB_ENV
echo "GITHUB_CURRENT_COMMIT=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
if: github.ref != 'refs/heads/main'
- name: Set base commit (main)
run: |
echo "GITHUB_BASE_COMMIT=${{ github.event.before }}" >> $GITHUB_ENV
echo "GITHUB_CURRENT_COMMIT=${{ github.event.after }}" >> $GITHUB_ENV
if: github.ref == 'refs/heads/main'
- name: Set up environment
run: |
git config --global core.quotePath false
echo "PIPENV_PIPFILE=$(pwd)/utils/Pipfile" >> $GITHUB_ENV
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: '3.8'
- uses: actions/checkout@v2
with:
ref: ${{ env.GITHUB_CURRENT_COMMIT }}
fetch-depth: 0
submodules: true
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
(cd utils && sudo pip install pipenv && pipenv install)
- name: Set up the CI flags.
run: |
# When the utils/ directory is changed, run all tests to avoid
# regressions. Exit status of 0 means "unmodified".
if git diff-tree --quiet ${{ env.GITHUB_BASE_COMMIT }} ${{ env.GITHUB_CURRENT_COMMIT }} -- utils/; then
echo "CI_FLAGS=--ci" >> $GITHUB_ENV
else
echo "CI_FLAGS=--ci --all" >> $GITHUB_ENV
fi
- name: Download omegaUp-ci container
run: |
docker login https://docker.pkg.github.com -u ${{ github.actor }} -p ${{ github.token }}
python3 ./utils/runtests.py ${{ env.CI_FLAGS }} --only-pull-image
- name: Run tests
run: python3 ./utils/runtests.py ${{ env.CI_FLAGS }}
- name: Generate pngs/testplan
run: python3 ./utils/generateresources.py --generate=png,testplan ${{ env.CI_FLAGS }}
if: github.ref == 'refs/heads/main'
- name: Deploy to omegaUp
run: pipenv run python3 ./utils/upload.py --ci --verbose # Don't use CI_FLAGS to avoid deploying all problems.
if: github.ref == 'refs/heads/main'
- name: Push to public branch
if: github.ref == 'refs/heads/main'
run: |
shopt -s extglob
git config --global user.name "${{ env.GIT_USERNAME }}"
git config --global user.email "${{ env.GIT_USERNAME }}@users.noreply.github.com"
git add -f !(results)
git commit --allow-empty -m "Generated files from $GITHUB_SHA"
TMP_COMMIT=$(git rev-parse HEAD)
git checkout public
git merge --no-commit --no-ff -X theirs $TMP_COMMIT
git commit --allow-empty -m "Auto deployed from $GITHUB_SHA"
git push origin public
- name: Zip logs
if: ${{ always() }}
run: |
# actions/upload-artifacts action upload each and every log file
# individually through one API call. This is extremely slow (~2
# minutes) due to there being thousands of little files. Instead, .zip
# them all by hand and let the upload action just upload the .zip. Yes,
# this causes there to be a .zip within a .zip, but the billable
# minutes savings are worth it.
if [[ -d results/ && "$(find results/ -type f)" != "" ]]; then
(cd results && zip -r ../results.zip .)
fi
- name: Upload logs
if: ${{ always() }}
uses: actions/upload-artifact@v2
with:
name: omegaUp-CI-logs
path: results.zip
- name: Notify Slack on failure
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
fields: repo,message,commit,author,action,eventName,ref,workflow
env:
GITHUB_TOKEN: ${{ github.token }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
if: ${{ failure() && github.ref == 'refs/heads/main' }}