build scheduled #1164
This file contains hidden or 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: 'build scheduled' | |
| on: | |
| workflow_dispatch: | |
| schedule: | |
| - cron: "0 */12 * * *" # every 12 hours | |
| jobs: | |
| get_all_versions: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| versions: ${{ steps.get_versions.outputs.versions }} | |
| latest: ${{ steps.get_versions.outputs.latest }} | |
| steps: | |
| - name: get available versions | |
| id: get_versions | |
| run: | | |
| set -euo pipefail | |
| curl -s -o versions.json "https://api.papermc.io/v2/projects/paper" | |
| # compute newest unstable (pre/rc etc.) and newest stable (strict semver x.y.z) | |
| LATEST_STABLE=$(jq -r '[.versions[] | select(test("^[0-9]+\\.[0-9]+\\.[0-9]+$"))] | last' versions.json) | |
| LATEST_UNSTABLE=$(jq -r '[.versions[] | select(test("^[0-9]+\\.[0-9]+\\.[0-9]+$") | not)] | last' versions.json) | |
| # build order: newest unstable first, then latest stable | |
| VERSIONS=$(jq -cn --arg u "$LATEST_UNSTABLE" --arg s "$LATEST_STABLE" '[ $u, $s ] | map(select(. != null and . != ""))') | |
| echo "versions=$VERSIONS" >> "$GITHUB_OUTPUT" | |
| # keep compatibility: expose latest (stable) for downstream steps already using it | |
| echo "latest=$LATEST_STABLE" >> "$GITHUB_OUTPUT" | |
| - name: show output | |
| run: | | |
| echo "versions: ${{ steps.get_versions.outputs.versions }}" | |
| echo "latest: ${{ steps.get_versions.outputs.latest }}" | |
| build_for_version: | |
| runs-on: ubuntu-latest | |
| needs: get_all_versions | |
| permissions: write-all | |
| continue-on-error: ${{ contains(matrix.versions, '-') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| versions: ${{ fromJson(needs.get_all_versions.outputs.versions) }} | |
| steps: | |
| - name: get latest build | |
| id: latest_build | |
| run: | | |
| set -euo pipefail | |
| BUILDS=$(curl -s -o builds.json https://api.papermc.io/v2/projects/paper/versions/${{ matrix.versions }}/builds) | |
| BUILD_STABLE=$(jq 'last(.builds[] | select(.channel=="default")).build' builds.json) | |
| BUILD_EXPERIMENTAL=$(jq 'last(.builds[] | select(.channel=="experimental")).build' builds.json) | |
| echo "build_stable=$BUILD_STABLE" >> $GITHUB_OUTPUT | |
| echo "build_experimental=$BUILD_EXPERIMENTAL" >> $GITHUB_OUTPUT | |
| if [[ "$BUILD_STABLE" =~ ^[0-9]+$ ]]; then | |
| BUILD_NUMBER=$BUILD_STABLE | |
| BUILD_TYPE=stable | |
| else | |
| BUILD_NUMBER=$BUILD_EXPERIMENTAL | |
| BUILD_TYPE=experimental | |
| fi | |
| echo build_number="${BUILD_NUMBER}" >> $GITHUB_OUTPUT | |
| echo build_type="${BUILD_TYPE}" >> $GITHUB_OUTPUT | |
| if [[ $BUILD_TYPE == "stable" && "${{ needs.get_all_versions.outputs.latest }}" == "${{ matrix.versions }}" ]]; then | |
| echo is_latest="yes" >> $GITHUB_OUTPUT | |
| else | |
| echo is_latest="no" >> $GITHUB_OUTPUT | |
| fi | |
| if [[ $BUILD_TYPE == "experimental" ]]; then | |
| echo is_experimental="yes" >> $GITHUB_OUTPUT | |
| else | |
| echo is_experimental="no" >> $GITHUB_OUTPUT | |
| fi | |
| - name: get self build | |
| id: self_build | |
| run: | | |
| # DOCKER_IMAGE="ghcr.io/${{ github.repository_owner }}/docker-minecraft-papermc-server:${{ matrix.versions }}" | |
| DOCKER_IMAGE="docker.io/marctv/minecraft-papermc-server:${{ matrix.versions }}" | |
| docker pull $DOCKER_IMAGE || true | |
| echo self_build=$(docker inspect $DOCKER_IMAGE --format '{{ index .Config.Labels "org.mojang.minecraft.papermc.build"}}' || true) >> $GITHUB_OUTPUT | |
| - name: show output | |
| if: always() | |
| run: | | |
| echo "latest: ${{ needs.get_all_versions.outputs.latest }}" | |
| echo "version: ${{ matrix.versions }}" | |
| echo "build_stable: ${{ steps.latest_build.outputs.build_stable }}" | |
| echo "build_experimental: ${{ steps.latest_build.outputs.build_experimental }}" | |
| echo "build_number: ${{ steps.latest_build.outputs.build_number }}" | |
| echo "build_type: ${{ steps.latest_build.outputs.build_type }}" | |
| echo "is_latest: ${{ steps.latest_build.outputs.is_latest }}" | |
| echo "is_experimental: ${{ steps.latest_build.outputs.is_experimental }}" | |
| echo "self_build: ${{ steps.self_build.outputs.self_build }}" | |
| - name: Repository Dispatch | |
| uses: peter-evans/repository-dispatch@v3 | |
| if: github.event_name == 'workflow_dispatch' || steps.latest_build.outputs.build_number != steps.self_build.outputs.self_build | |
| with: | |
| event-type: build_version | |
| client-payload: '{"download_version": "${{ matrix.versions }}", "is_latest": "${{ steps.latest_build.outputs.is_latest }}", "is_experimental": "${{ steps.latest_build.outputs.is_experimental }}"}' |