diff --git a/.github-gen/velnor-workflow.toml b/.github-gen/velnor-workflow.toml index 6da81ce..1614a6e 100644 --- a/.github-gen/velnor-workflow.toml +++ b/.github-gen/velnor-workflow.toml @@ -5,7 +5,6 @@ revision = "92c3478694ef423fb4160b8c934d6671ca85b51a" [policy] ruleset_required_status_checks = [] ruleset_external_status_checks = [] -ci_required = false [workflow] runners = "both" automatic_lanes = "github" diff --git a/.github/ci/.github-actions-generator-state b/.github/ci/.github-actions-generator-state index fb9963a..a7da51f 100644 --- a/.github/ci/.github-actions-generator-state +++ b/.github/ci/.github-actions-generator-state @@ -1,16 +1,16 @@ # Generated ownership state; do not edit. schema = 2 [inputs] -config b0a3f452be209f74 +config 812b129a45a01c6e scan 1b72102e5495def6 -generator 49 +generator 48 [outputs] .github/actionlint.yaml ec35f48ae7e90e0e .github/ci/project.toml b19da7b7165e2f66 -.github/workflows/ci-main.yml bf74a6e9aeb3e677 +.github/workflows/ci-main.yml b58e795b73ac20e3 .github/workflows/ci-policy.yml 8aa45ab903305462 -.github/workflows/ci-pr.yml 07630b76df9a0147 -.github/workflows/ci-unit-gradle.yml 4468c618529aa9e8 -.github/workflows/maintenance.yml 88a28362692358a6 -.github/workflows/nightly.yml c73d542eaf687a7e +.github/workflows/ci-pr.yml 8ddc0fe584b9d16a +.github/workflows/ci-unit-gradle.yml 8f990d0334ceccc0 +.github/workflows/maintenance.yml 12deca93f7bf908c +.github/workflows/nightly.yml 76e5e2bc12a599c6 config/fleet/velnor-host.env d14b419216449423 diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml index 9016cc2..0edd709 100644 --- a/.github/workflows/ci-main.yml +++ b/.github/workflows/ci-main.yml @@ -699,3 +699,476 @@ jobs: cache_key_files: | gradle/wrapper/gradle-wrapper.properties gradle/libs.versions.toml + ci-required: + name: ci-required + if: ${{ always() }} + needs: [plan, velnor-lane-admission, policy, github-gradle, velnor-gradle, github-gradle-buildsrc, velnor-gradle-buildsrc, github-gradle-graphql-datetime-dgs-autoconfigure, velnor-gradle-graphql-datetime-dgs-autoconfigure, github-gradle-graphql-datetime-dgs-starter, velnor-gradle-graphql-datetime-dgs-starter, github-gradle-graphql-datetime-kickstart-spring-boot-starter, velnor-gradle-graphql-datetime-kickstart-spring-boot-starter, github-gradle-graphql-datetime-spring-boot-autoconfigure, velnor-gradle-graphql-datetime-spring-boot-autoconfigure, github-gradle-graphql-datetime-spring-boot-common, velnor-gradle-graphql-datetime-spring-boot-common, github-gradle-graphql-datetime-spring-boot-starter, velnor-gradle-graphql-datetime-spring-boot-starter, github-gradle-graphql-java-datetime, velnor-gradle-graphql-java-datetime, github-gradle-samples-dgs-webmvc, velnor-gradle-samples-dgs-webmvc, github-gradle-samples-kickstart-webflux, velnor-gradle-samples-kickstart-webflux, github-gradle-samples-kickstart-webmvc, velnor-gradle-samples-kickstart-webmvc, github-gradle-samples-spring-boot-webmvc, velnor-gradle-samples-spring-boot-webmvc] + runs-on: ubuntu-24.04 + timeout-minutes: 5 + steps: + - name: Validate generated stack results + env: + NEEDS_JSON: ${{ toJSON(needs) }} + SELECTED_UNITS: ${{ needs.plan.outputs.units }} + FORK_PR: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository }} + shell: bash + run: | + set -euo pipefail + result_for_job() { + jq -r --arg job "$1" '.[$job].result // empty' <<<"$NEEDS_JSON" + } + result="$(result_for_job plan)" + if [[ "$result" != success ]]; then + echo "required CI prerequisite plan did not pass: $result" >&2 + exit 1 + fi + result="$(result_for_job policy)" + if [[ "$result" != success ]]; then + echo "required CI prerequisite policy did not pass: $result" >&2 + exit 1 + fi + result="$(result_for_job velnor-lane-admission)" + case "$result" in + success|skipped) ;; + *) echo "required CI prerequisite velnor-lane-admission did not pass: $result" >&2; exit 1 ;; + esac + selected=",$SELECTED_UNITS," + if [[ "$selected" == *",gradle,"* ]]; then + result="$(result_for_job github-gradle)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle,"* ]]; then + result="$(result_for_job velnor-gradle)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-buildsrc,"* ]]; then + result="$(result_for_job github-gradle-buildsrc)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-buildsrc did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-buildsrc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-buildsrc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-buildsrc,"* ]]; then + result="$(result_for_job velnor-gradle-buildsrc)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-buildsrc did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-buildsrc did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-buildsrc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-buildsrc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-dgs-autoconfigure,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-dgs-autoconfigure)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-dgs-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-dgs-autoconfigure)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-dgs-autoconfigure failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-dgs-autoconfigure,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-dgs-autoconfigure)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-dgs-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-dgs-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-dgs-autoconfigure)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-dgs-autoconfigure failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-dgs-starter,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-dgs-starter)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-dgs-starter did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-dgs-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-dgs-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-dgs-starter,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-dgs-starter)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-dgs-starter did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-dgs-starter did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-dgs-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-dgs-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-kickstart-spring-boot-starter,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-kickstart-spring-boot-starter)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-kickstart-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-kickstart-spring-boot-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-kickstart-spring-boot-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-kickstart-spring-boot-starter,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-kickstart-spring-boot-starter)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-kickstart-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-kickstart-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-kickstart-spring-boot-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-kickstart-spring-boot-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-autoconfigure,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-autoconfigure)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-spring-boot-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-autoconfigure)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-spring-boot-autoconfigure failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-autoconfigure,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-autoconfigure)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-autoconfigure)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-spring-boot-autoconfigure failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-common,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-common)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-spring-boot-common did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-common)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-spring-boot-common failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-common,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-common)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-common did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-common did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-common)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-spring-boot-common failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-starter,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-starter)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-spring-boot-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-starter,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-starter)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-spring-boot-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-java-datetime,"* ]]; then + result="$(result_for_job github-gradle-graphql-java-datetime)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-java-datetime did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-java-datetime)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-java-datetime failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-java-datetime,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-java-datetime)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-java-datetime did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-java-datetime did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-java-datetime)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-java-datetime failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-dgs-webmvc,"* ]]; then + result="$(result_for_job github-gradle-samples-dgs-webmvc)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-samples-dgs-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-samples-dgs-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-samples-dgs-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-dgs-webmvc,"* ]]; then + result="$(result_for_job velnor-gradle-samples-dgs-webmvc)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-samples-dgs-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-samples-dgs-webmvc did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-samples-dgs-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-samples-dgs-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-kickstart-webflux,"* ]]; then + result="$(result_for_job github-gradle-samples-kickstart-webflux)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-samples-kickstart-webflux did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-samples-kickstart-webflux)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-samples-kickstart-webflux failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-kickstart-webflux,"* ]]; then + result="$(result_for_job velnor-gradle-samples-kickstart-webflux)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-samples-kickstart-webflux did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-samples-kickstart-webflux did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-samples-kickstart-webflux)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-samples-kickstart-webflux failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-kickstart-webmvc,"* ]]; then + result="$(result_for_job github-gradle-samples-kickstart-webmvc)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-samples-kickstart-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-samples-kickstart-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-samples-kickstart-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-kickstart-webmvc,"* ]]; then + result="$(result_for_job velnor-gradle-samples-kickstart-webmvc)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-samples-kickstart-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-samples-kickstart-webmvc did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-samples-kickstart-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-samples-kickstart-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-spring-boot-webmvc,"* ]]; then + result="$(result_for_job github-gradle-samples-spring-boot-webmvc)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-samples-spring-boot-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-samples-spring-boot-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-samples-spring-boot-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-spring-boot-webmvc,"* ]]; then + result="$(result_for_job velnor-gradle-samples-spring-boot-webmvc)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-samples-spring-boot-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-samples-spring-boot-webmvc did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-samples-spring-boot-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-samples-spring-boot-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + required: + name: "Control / Required" + if: ${{ always() }} + needs: [ci-required] + runs-on: ubuntu-24.04 + timeout-minutes: 5 + steps: + - name: Mirror CI / Required + if: ${{ needs.ci-required.result != 'success' }} + run: exit 1 diff --git a/.github/workflows/ci-pr.yml b/.github/workflows/ci-pr.yml index fa722b9..4d17b3b 100644 --- a/.github/workflows/ci-pr.yml +++ b/.github/workflows/ci-pr.yml @@ -603,3 +603,471 @@ jobs: cache_key_files: | gradle/wrapper/gradle-wrapper.properties gradle/libs.versions.toml + ci-required: + name: ci-required + if: ${{ always() }} + needs: [plan, velnor-lane-admission, github-gradle, velnor-gradle, github-gradle-buildsrc, velnor-gradle-buildsrc, github-gradle-graphql-datetime-dgs-autoconfigure, velnor-gradle-graphql-datetime-dgs-autoconfigure, github-gradle-graphql-datetime-dgs-starter, velnor-gradle-graphql-datetime-dgs-starter, github-gradle-graphql-datetime-kickstart-spring-boot-starter, velnor-gradle-graphql-datetime-kickstart-spring-boot-starter, github-gradle-graphql-datetime-spring-boot-autoconfigure, velnor-gradle-graphql-datetime-spring-boot-autoconfigure, github-gradle-graphql-datetime-spring-boot-common, velnor-gradle-graphql-datetime-spring-boot-common, github-gradle-graphql-datetime-spring-boot-starter, velnor-gradle-graphql-datetime-spring-boot-starter, github-gradle-graphql-java-datetime, velnor-gradle-graphql-java-datetime, github-gradle-samples-dgs-webmvc, velnor-gradle-samples-dgs-webmvc, github-gradle-samples-kickstart-webflux, velnor-gradle-samples-kickstart-webflux, github-gradle-samples-kickstart-webmvc, velnor-gradle-samples-kickstart-webmvc, github-gradle-samples-spring-boot-webmvc, velnor-gradle-samples-spring-boot-webmvc] + runs-on: ubuntu-24.04 + timeout-minutes: 5 + steps: + - name: Validate generated stack results + env: + NEEDS_JSON: ${{ toJSON(needs) }} + SELECTED_UNITS: ${{ needs.plan.outputs.units }} + FORK_PR: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository }} + shell: bash + run: | + set -euo pipefail + result_for_job() { + jq -r --arg job "$1" '.[$job].result // empty' <<<"$NEEDS_JSON" + } + result="$(result_for_job plan)" + if [[ "$result" != success ]]; then + echo "required CI prerequisite plan did not pass: $result" >&2 + exit 1 + fi + result="$(result_for_job velnor-lane-admission)" + case "$result" in + success|skipped) ;; + *) echo "required CI prerequisite velnor-lane-admission did not pass: $result" >&2; exit 1 ;; + esac + selected=",$SELECTED_UNITS," + if [[ "$selected" == *",gradle,"* ]]; then + result="$(result_for_job github-gradle)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle,"* ]]; then + result="$(result_for_job velnor-gradle)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-buildsrc,"* ]]; then + result="$(result_for_job github-gradle-buildsrc)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-buildsrc did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-buildsrc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-buildsrc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-buildsrc,"* ]]; then + result="$(result_for_job velnor-gradle-buildsrc)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-buildsrc did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-buildsrc did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-buildsrc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-buildsrc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-dgs-autoconfigure,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-dgs-autoconfigure)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-dgs-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-dgs-autoconfigure)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-dgs-autoconfigure failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-dgs-autoconfigure,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-dgs-autoconfigure)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-dgs-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-dgs-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-dgs-autoconfigure)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-dgs-autoconfigure failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-dgs-starter,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-dgs-starter)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-dgs-starter did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-dgs-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-dgs-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-dgs-starter,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-dgs-starter)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-dgs-starter did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-dgs-starter did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-dgs-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-dgs-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-kickstart-spring-boot-starter,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-kickstart-spring-boot-starter)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-kickstart-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-kickstart-spring-boot-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-kickstart-spring-boot-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-kickstart-spring-boot-starter,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-kickstart-spring-boot-starter)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-kickstart-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-kickstart-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-kickstart-spring-boot-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-kickstart-spring-boot-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-autoconfigure,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-autoconfigure)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-spring-boot-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-autoconfigure)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-spring-boot-autoconfigure failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-autoconfigure,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-autoconfigure)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-autoconfigure did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-autoconfigure)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-spring-boot-autoconfigure failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-common,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-common)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-spring-boot-common did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-common)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-spring-boot-common failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-common,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-common)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-common did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-common did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-common)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-spring-boot-common failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-starter,"* ]]; then + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-starter)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-datetime-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-datetime-spring-boot-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-datetime-spring-boot-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-datetime-spring-boot-starter,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-starter)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-datetime-spring-boot-starter did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-datetime-spring-boot-starter)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-datetime-spring-boot-starter failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-java-datetime,"* ]]; then + result="$(result_for_job github-gradle-graphql-java-datetime)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-graphql-java-datetime did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-graphql-java-datetime)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-graphql-java-datetime failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-graphql-java-datetime,"* ]]; then + result="$(result_for_job velnor-gradle-graphql-java-datetime)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-graphql-java-datetime did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-graphql-java-datetime did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-graphql-java-datetime)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-graphql-java-datetime failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-dgs-webmvc,"* ]]; then + result="$(result_for_job github-gradle-samples-dgs-webmvc)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-samples-dgs-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-samples-dgs-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-samples-dgs-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-dgs-webmvc,"* ]]; then + result="$(result_for_job velnor-gradle-samples-dgs-webmvc)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-samples-dgs-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-samples-dgs-webmvc did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-samples-dgs-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-samples-dgs-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-kickstart-webflux,"* ]]; then + result="$(result_for_job github-gradle-samples-kickstart-webflux)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-samples-kickstart-webflux did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-samples-kickstart-webflux)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-samples-kickstart-webflux failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-kickstart-webflux,"* ]]; then + result="$(result_for_job velnor-gradle-samples-kickstart-webflux)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-samples-kickstart-webflux did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-samples-kickstart-webflux did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-samples-kickstart-webflux)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-samples-kickstart-webflux failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-kickstart-webmvc,"* ]]; then + result="$(result_for_job github-gradle-samples-kickstart-webmvc)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-samples-kickstart-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-samples-kickstart-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-samples-kickstart-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-kickstart-webmvc,"* ]]; then + result="$(result_for_job velnor-gradle-samples-kickstart-webmvc)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-samples-kickstart-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-samples-kickstart-webmvc did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-samples-kickstart-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-samples-kickstart-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-spring-boot-webmvc,"* ]]; then + result="$(result_for_job github-gradle-samples-spring-boot-webmvc)" + case "$result" in + success) ;; + *) echo "selected CI job github-gradle-samples-spring-boot-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + result="$(result_for_job github-gradle-samples-spring-boot-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job github-gradle-samples-spring-boot-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + if [[ "$selected" == *",gradle-samples-spring-boot-webmvc,"* ]]; then + result="$(result_for_job velnor-gradle-samples-spring-boot-webmvc)" + if [[ "$FORK_PR" == true ]]; then + case "$result" in + success|skipped) ;; + *) echo "selected CI job velnor-gradle-samples-spring-boot-webmvc did not pass: $result" >&2; exit 1 ;; + esac + else + case "$result" in + success) ;; + *) echo "selected CI job velnor-gradle-samples-spring-boot-webmvc did not pass: $result" >&2; exit 1 ;; + esac + fi + else + result="$(result_for_job velnor-gradle-samples-spring-boot-webmvc)" + case "$result" in + success|skipped) ;; + *) echo "unselected CI job velnor-gradle-samples-spring-boot-webmvc failed unexpectedly: $result" >&2; exit 1 ;; + esac + fi + required: + name: "Control / Required" + if: ${{ always() }} + needs: [ci-required] + runs-on: ubuntu-24.04 + timeout-minutes: 5 + steps: + - name: Mirror CI / Required + if: ${{ needs.ci-required.result != 'success' }} + run: exit 1 diff --git a/.github/workflows/ci-unit-gradle.yml b/.github/workflows/ci-unit-gradle.yml index 6a369d9..3bbdde8 100644 --- a/.github/workflows/ci-unit-gradle.yml +++ b/.github/workflows/ci-unit-gradle.yml @@ -298,7 +298,7 @@ jobs: fi - name: Report phase timings and cache outcomes if: always() - uses: tailrocks/velnor/.github/actions/report-velnor-ci-outcomes@92c3478694ef423fb4160b8c934d6671ca85b51a + uses: ./.github/actions/report-velnor-ci-outcomes with: job_label: ${{ inputs.unit }} ci_lane: github @@ -479,7 +479,7 @@ jobs: fi - name: Report phase timings and cache outcomes if: always() - uses: tailrocks/velnor/.github/actions/report-velnor-ci-outcomes@92c3478694ef423fb4160b8c934d6671ca85b51a + uses: ./.github/actions/report-velnor-ci-outcomes with: job_label: ${{ inputs.unit }} ci_lane: velnor diff --git a/.github/workflows/maintenance.yml b/.github/workflows/maintenance.yml index 10d7599..0248dc8 100644 --- a/.github/workflows/maintenance.yml +++ b/.github/workflows/maintenance.yml @@ -79,7 +79,7 @@ jobs: run: | set -euo pipefail for workflow in ci-main.yml nightly.yml; do - if [[ "$(gh run list --repo "$GITHUB_REPOSITORY" --workflow "$workflow" --status in_progress --limit 1 --json databaseId --jq 'length')" != "0" ]]; then + if [[ "$(gh run list --workflow "$workflow" --status in_progress --limit 1 --json databaseId --jq 'length')" != "0" ]]; then echo "skip=true" >> "$GITHUB_OUTPUT" echo "$workflow is in_progress; skipping cache retention" >> "$GITHUB_STEP_SUMMARY" exit 0 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 843b92e..fb9c849 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -57,7 +57,6 @@ jobs: - name: Dispatch ci-main on default branch env: GH_TOKEN: ${{ github.token }} - GITHUB_REPOSITORY: ${{ github.repository }} DEFAULT_BRANCH: main DISPATCH_RUNNER: ${{ github.event.inputs.runner || 'both' }} DISPATCH_SCOPE: ${{ github.event.inputs.scope || 'full' }} @@ -66,7 +65,6 @@ jobs: run: | set -euo pipefail gh workflow run ci-main.yml \ - -R "$GITHUB_REPOSITORY" \ --ref "$DEFAULT_BRANCH" \ -f runner="$DISPATCH_RUNNER" \ -f scope="$DISPATCH_SCOPE" \