From f24368efb73f4b599eaf197d79297bdc98ebfa79 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 25 Jan 2023 13:22:11 -0600 Subject: [PATCH] build: add webapp github actions (#4658) --- .github/workflows/webapp.yml | 143 +++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 .github/workflows/webapp.yml diff --git a/.github/workflows/webapp.yml b/.github/workflows/webapp.yml new file mode 100644 index 000000000..3b354a015 --- /dev/null +++ b/.github/workflows/webapp.yml @@ -0,0 +1,143 @@ +name: webapp +on: + push: + branches: + - 'main' + pull_request: + branches: + - 'main' +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 }} +