From fb7c4743d1e0ac0fb618f3e233a1991cf4fb095b Mon Sep 17 00:00:00 2001 From: Rowan Dash Date: Mon, 21 Aug 2023 14:34:47 +0100 Subject: [PATCH] ci: Create new on pull request update ci using reusable workflows (#23) --- .github/workflows/on-pr-update.yaml | 202 ++++++++++++++++++++++++++++ .github/workflows/release.yaml | 2 +- 2 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/on-pr-update.yaml diff --git a/.github/workflows/on-pr-update.yaml b/.github/workflows/on-pr-update.yaml new file mode 100644 index 0000000..7cc1114 --- /dev/null +++ b/.github/workflows/on-pr-update.yaml @@ -0,0 +1,202 @@ +name: PR Update + +on: + pull_request: + types: + - opened + - synchronize + +jobs: + + slack: + # Open a new PR thread on Slack for this CI run. + uses: SwanseaUniversityMedical/workflows/.github/workflows/slack-pr-thread.yaml@v1.0.0 + with: + slack-channel: ${{ vars.SLACK_CHANNEL }} + secrets: + slack-token: ${{ secrets.SLACK_TOKEN }} + + changes: + # Detect which files have been changed on this PR's full history + needs: slack + uses: SwanseaUniversityMedical/workflows/.github/workflows/changes.yaml@v1.0.0 + with: + slack-channel: ${{ vars.SLACK_CHANNEL }} + slack-thread: ${{ needs.slack.outputs.thread }} + github-app-id: ${{ vars.APP_ID }} + filters: | + container: + - './.github/workflows/on-pr-update.yaml' + - 'containers/**' + chart: + - './.github/workflows/on-pr-update.yaml' + - 'charts/**' + + secrets: + slack-token: ${{ secrets.SLACK_TOKEN }} + github-app-private-key: ${{ secrets.APP_PRIVATE_KEY }} + + build-container-jupyterhub: + # Build the container and push it as :pr-42 and :pr-42-fe45b3h + needs: + - slack + - changes + if: fromJSON(needs.changes.outputs.changes).container == 'true' + uses: SwanseaUniversityMedical/workflows/.github/workflows/on-pr-update-container.yaml@v1.0.0 + with: + job-name: build-container-jupyterhub + container-registry: ${{ vars.HARBOR_REGISTRY }} + container-registry-user: ${{ vars.HARBOR_USER }} + container-registry-project: ${{ vars.HARBOR_PROJECT }} + container-registry-repo: jupyterhub + github-app-id: ${{ vars.APP_ID }} + slack-channel: ${{ vars.SLACK_CHANNEL }} + slack-thread: ${{ needs.slack.outputs.thread }} + build-command: | + sudo apt update && + sudo apt install python3.8-venv && + python -m pip install --user --upgrade build && + python -m build --outdir ./dist ./containers/custom-packages/jupyter-cloudbeaver-proxy && + python -m build --outdir ./dist ./containers/custom-packages/jupyter-rsession-proxy && + docker build -t $IMAGE -f containers/jupyterhub/Dockerfile . + test-command: | + echo '0' + secrets: + container-registry-token: ${{ secrets.HARBOR_TOKEN }} + github-app-private-key: ${{ secrets.APP_PRIVATE_KEY }} + slack-token: ${{ secrets.SLACK_TOKEN }} + + build-container-jupyterlab-standard: + # Build the container and push it as :pr-42 and :pr-42-fe45b3h + needs: + - slack + - changes + if: fromJSON(needs.changes.outputs.changes).container == 'true' + uses: SwanseaUniversityMedical/workflows/.github/workflows/on-pr-update-container.yaml@v1.0.0 + with: + job-name: build-container-jupyterlab-standard + container-registry: ${{ vars.HARBOR_REGISTRY }} + container-registry-user: ${{ vars.HARBOR_USER }} + container-registry-project: ${{ vars.HARBOR_PROJECT }} + container-registry-repo: ${{ vars.HARBOR_REPO }} + github-app-id: ${{ vars.APP_ID }} + slack-channel: ${{ vars.SLACK_CHANNEL }} + slack-thread: ${{ needs.slack.outputs.thread }} + build-command: | + sudo apt update && + sudo apt install python3.8-venv && + python -m pip install --user --upgrade build && + python -m build --outdir ./dist ./containers/custom-packages/jupyter-cloudbeaver-proxy && + python -m build --outdir ./dist ./containers/custom-packages/jupyter-rsession-proxy && + docker build -t $IMAGE -f containers/jupyterlab/standard.Dockerfile . + test-command: | + echo '0' + secrets: + container-registry-token: ${{ secrets.HARBOR_TOKEN }} + github-app-private-key: ${{ secrets.APP_PRIVATE_KEY }} + slack-token: ${{ secrets.SLACK_TOKEN }} + +# build-container-jupyterlab-gpu: +# # Build the container and push it as :pr-42 and :pr-42-fe45b3h +# needs: +# - slack +# - changes +# if: fromJSON(needs.changes.outputs.changes).container == 'true' +# uses: SwanseaUniversityMedical/workflows/.github/workflows/on-pr-update-container.yaml@v1.0.0 +# with: +# job-name: build-container-jupyterlab-gpu +# container-registry: ${{ vars.HARBOR_REGISTRY }} +# container-registry-user: ${{ vars.HARBOR_USER }} +# container-registry-project: ${{ vars.HARBOR_PROJECT }} +# container-registry-repo: jupyterlab-gpu +# github-app-id: ${{ vars.APP_ID }} +# slack-channel: ${{ vars.SLACK_CHANNEL }} +# slack-thread: ${{ needs.slack.outputs.thread }} +# build-command: | +# sudo apt update && +# sudo apt install python3.8-venv && +# python -m pip install --user --upgrade build && +# python -m build --outdir ./dist ./containers/custom-packages/jupyter-cloudbeaver-proxy && +# python -m build --outdir ./dist ./containers/custom-packages/jupyter-rsession-proxy && +# docker build -t $IMAGE -f containers/jupyterlab/gpu.Dockerfile . +# test-command: | +# echo '0' +# secrets: +# container-registry-token: ${{ secrets.HARBOR_TOKEN }} +# github-app-private-key: ${{ secrets.APP_PRIVATE_KEY }} +# slack-token: ${{ secrets.SLACK_TOKEN }} + +# build-container-jupyterlab-sparkR: +# # Build the container and push it as :pr-42 and :pr-42-fe45b3h +# needs: +# - slack +# - changes +# if: fromJSON(needs.changes.outputs.changes).container == 'true' +# uses: SwanseaUniversityMedical/workflows/.github/workflows/on-pr-update-container.yaml@v1.0.0 +# with: +# job-name: build-container-jupyterlab-sparkR +# container-registry: ${{ vars.HARBOR_REGISTRY }} +# container-registry-user: ${{ vars.HARBOR_USER }} +# container-registry-project: ${{ vars.HARBOR_PROJECT }} +# container-registry-repo: jupyterlab-sparkR +# github-app-id: ${{ vars.APP_ID }} +# slack-channel: ${{ vars.SLACK_CHANNEL }} +# slack-thread: ${{ needs.slack.outputs.thread }} +# build-command: | +# sudo apt update && +# sudo apt install python3.8-venv && +# python -m pip install --user --upgrade build && +# python -m build --outdir ./dist ./containers/custom-packages/jupyter-cloudbeaver-proxy && +# python -m build --outdir ./dist ./containers/custom-packages/jupyter-rsession-proxy && +# docker build -t $IMAGE -f containers/jupyterlab/sparkR.Dockerfile . +# test-command: | +# echo '0' +# secrets: +# container-registry-token: ${{ secrets.HARBOR_TOKEN }} +# github-app-private-key: ${{ secrets.APP_PRIVATE_KEY }} +# slack-token: ${{ secrets.SLACK_TOKEN }} + + + build-pr-chart: + # Build the chart and push it as :pr-42 and :pr-42-fe45b3h + needs: + - slack + - changes + if: fromJSON(needs.changes.outputs.changes).chart == 'true' + uses: SwanseaUniversityMedical/workflows/.github/workflows/on-pr-update-chart.yaml@v1.0.0 + with: + job-name: chart + chart: charts/** + chart-registry: ${{ vars.HARBOR_REGISTRY }} + chart-registry-user: ${{ vars.HARBOR_USER }} + chart-registry-project: ${{ vars.HARBOR_PROJECT }} + chart-registry-repo: ${{ vars.HARBOR_REPO }} + github-app-id: ${{ vars.APP_ID }} + slack-channel: ${{ vars.SLACK_CHANNEL }} + slack-thread: ${{ needs.slack.outputs.thread }} + test-command: | + helm template $CHART --values charts/jupyter/values.yaml + secrets: + chart-registry-token: ${{ secrets.HARBOR_TOKEN }} + github-app-private-key: ${{ secrets.APP_PRIVATE_KEY }} + slack-token: ${{ secrets.SLACK_TOKEN }} + + slack-update: + # Update the original Slack message with the final workflow status + # WARNING! ALL UPSTREAM JOBS MUST BE DECLARED HERE TO REPORT FAILURES CORRECTLY! + needs: + - slack + - changes + - build-container-jupyterhub + - build-container-jupyterlab-standard +# - build-container-jupyterlab-gpu +# - build-container-jupyterlab-sparkR + - build-pr-chart + uses: SwanseaUniversityMedical/workflows/.github/workflows/slack-pr-thread.yaml@v1.0.0 + if: always() + with: + slack-channel: ${{ vars.SLACK_CHANNEL }} + slack-thread: ${{ needs.slack.outputs.thread }} + status: ${{ contains(join(needs.*.result, ','), 'failure') && ':no_entry:' || ':white_check_mark:' }} + secrets: + slack-token: ${{ secrets.SLACK_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6b4ad5f..ff3d28b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -8,7 +8,7 @@ on: - 'containers/**' - 'charts/**' branches: - - '**' + - 'main' env: HARBOR_REGISTRY: ${{ vars.HARBOR_REGISTRY }}