Selectivo EGOI 2024 #136
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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' }} |