150 lines
5.4 KiB
YAML
150 lines
5.4 KiB
YAML
name: webapp
|
|
on:
|
|
push:
|
|
branches:
|
|
- 'main'
|
|
paths-ignore:
|
|
- 'docs/**'
|
|
- '.github/**'
|
|
pull_request:
|
|
branches:
|
|
- 'main'
|
|
paths-ignore:
|
|
- 'docs/**'
|
|
- '.github/**'
|
|
jobs:
|
|
decide-what-jobs-to-run:
|
|
runs-on: ubuntu-22.04
|
|
outputs:
|
|
test-style: ${{ steps.check-diffs.outputs.web-changed == '1' }}
|
|
test-generated-files: ${{ steps.check-diffs.outputs.web-changed == '1' && steps.check-main-push.outputs.is-main-push == '0'}}
|
|
update-generated-files: ${{ steps.check-diffs.outputs.web-changed == '1' && steps.check-main-push.outputs.is-main-push == '1'}}
|
|
steps:
|
|
- name: Get source
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 2 # >1 needed for merge base
|
|
- name: Check push-to-main
|
|
id: check-main-push
|
|
run: |
|
|
set -x # echo all executed commands to the terminal
|
|
if [ "$GITHUB_EVENT_NAME" = 'push' ] && [ "$GITHUB_REF_NAME" = 'main' ]; then
|
|
echo is-main-push=1 >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo is-main-push=0 >> "$GITHUB_OUTPUT"
|
|
fi
|
|
- name: Check for diffs
|
|
id: check-diffs
|
|
run: |
|
|
set -x # echo all executed commands to the terminal
|
|
function get_changes() { # name, paths...
|
|
local name="$1"
|
|
shift
|
|
if [ "$GITHUB_EVENT_NAME" = 'push' ] && [ "$GITHUB_REF_NAME" = 'main' ]; then
|
|
DIFF_TARGET='--name-only HEAD^'
|
|
else
|
|
git fetch --depth=1 origin "$GITHUB_BASE_REF"
|
|
DIFF_TARGET="--merge-base origin/$GITHUB_BASE_REF"
|
|
fi
|
|
set +e # do not abort if git --exit-code returns nonzero
|
|
git diff --exit-code ${DIFF_TARGET} -- "$@"
|
|
echo "$name-changed=$?" >> "$GITHUB_OUTPUT"
|
|
}
|
|
get_changes web CMakeLists.txt web
|
|
|
|
code-style:
|
|
runs-on: ubuntu-latest
|
|
needs: [ decide-what-jobs-to-run ]
|
|
if: ${{ needs.decide-what-jobs-to-run.outputs.test-style == 'true' }}
|
|
steps:
|
|
- name: Get source
|
|
uses: actions/checkout@v3
|
|
- name: Get dependencies
|
|
run: |
|
|
set -e # abort if any command fails
|
|
sudo apt-get install -y npm
|
|
- name: Check for style diffs
|
|
id: check-for-diffs
|
|
run: |
|
|
set -x # echo all executed commands to the terminal
|
|
set -e # abort if any command fails
|
|
npm --prefix web ci
|
|
npm --prefix web run lint:fix
|
|
set +e # do not end the script if a cmd returns an exit code
|
|
git diff --exit-code web > style.diff
|
|
echo "differs=$?" >> $GITHUB_OUTPUT
|
|
echo ===
|
|
cat style.diff
|
|
echo ===
|
|
set -e # undo set +e
|
|
- name: Upload diffs
|
|
uses: actions/upload-artifact@v3
|
|
if: ${{ steps.check-for-diffs.outputs.differs == '1' }}
|
|
with:
|
|
name: code-style.diff
|
|
path: 'style.diff'
|
|
- name: Fail if diffs exist
|
|
if: ${{ steps.check-for-diffs.outputs.differs == '1' }}
|
|
run: |
|
|
echo "code style does not match expected."
|
|
cat style.diff
|
|
echo "When CI is done, the above patch will be uploaded as 'code-style.diff' to https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}/ ."
|
|
exit 1
|
|
|
|
test-generated-files:
|
|
runs-on: ubuntu-latest
|
|
needs: [ decide-what-jobs-to-run ]
|
|
if: ${{ needs.decide-what-jobs-to-run.outputs.test-generated-files == 'true' }}
|
|
steps:
|
|
- name: Get source
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 2 # >1 needed for merge base
|
|
- name: Check for changes to generated files
|
|
run: |
|
|
git fetch --quiet --depth=1 origin "$GITHUB_BASE_REF"
|
|
set -e # abort if diff --exit-code fails
|
|
echo
|
|
echo Hello, code contributor!
|
|
echo For security reasons, ${GITHUB_REPOSITORY} does not accept PRs that change generated files.
|
|
echo
|
|
echo Please undo your changes to these files:
|
|
git diff --exit-code --name-only --merge-base "origin/$GITHUB_BASE_REF" -- \
|
|
web/public_html/transmission-app.js \
|
|
web/public_html/transmission-app.js.map \
|
|
web/public_html/transmission-app.js.LICENSE.txt
|
|
|
|
update-generated-files:
|
|
runs-on: ubuntu-latest
|
|
needs: [ decide-what-jobs-to-run ]
|
|
if: ${{ needs.decide-what-jobs-to-run.outputs.update-generated-files == 'true' }}
|
|
steps:
|
|
- name: Show env
|
|
run: |
|
|
env | sort
|
|
- name: Get dependencies
|
|
run: |
|
|
set -e # abort if any command fails
|
|
sudo apt-get install -y npm
|
|
- name: Get source
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 2 # >1 needed for merge base
|
|
- name: Generate webapp files
|
|
run: |
|
|
set -x # echo all executed commands to the terminal
|
|
set -e # abort if any command fails
|
|
npm --prefix web ci
|
|
npm --prefix web run build
|
|
git diff --name-only
|
|
git add --update web
|
|
- name: Create pull request
|
|
uses: peter-evans/create-pull-request@v4
|
|
with:
|
|
branch: 'chore/update-webapp-files'
|
|
commit-message: 'chore: update generated transmission-web files'
|
|
delete-branch: true
|
|
title: 'chore: update generated transmission-web files'
|
|
body: Generated from https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
|
|