From 26af5fd16b688072292446c3e2c26b95efd98e60 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Tue, 10 Dec 2024 11:24:12 -0500 Subject: [PATCH] Update sbt-github-actions. --- .github/workflows/ci.yml | 79 ++++++++++++++++++++++++++----------- .github/workflows/clean.yml | 60 ++++++++++++++++++++++++++++ build.sbt | 16 ++++++++ project/plugins.sbt | 3 +- 4 files changed, 133 insertions(+), 25 deletions(-) create mode 100644 .github/workflows/clean.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e7a25fe..51a2dcc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,39 +1,70 @@ -name: routing +# This file was automatically generated by sbt-github-actions using the +# githubWorkflowGenerate task. You should add and commit this file to +# your git repository. It goes without saying that you shouldn't edit +# this file by hand! Instead, if you wish to make changes, you should +# change your sbt build configuration to revise the workflow description +# to meet your needs, then regenerate this file. + +name: Continuous Integration + on: - push: - branches: - - master pull_request: - branches: - - master + branches: [master] + push: + branches: [master] + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + jobs: - test: - runs-on: ubuntu-latest + build: + name: Build and Test strategy: fail-fast: false matrix: - java: [11, 17, 21] + os: [ubuntu-latest] + scala: [2.12.20] + java: [temurin@11, temurin@17, temurin@21] + runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 + - name: Checkout current branch (full) + uses: actions/checkout@v4 + with: + fetch-depth: 0 - - name: Setup Java ${{ matrix.java }} - uses: actions/setup-java@v2 + - name: Setup Java (temurin@11) + if: matrix.java == 'temurin@11' + uses: actions/setup-java@v4 with: distribution: temurin - java-version: ${{ matrix.java }} + java-version: 11 + cache: sbt - - name: Cache sbt - uses: actions/cache@v2 + - name: Setup Java (temurin@17) + if: matrix.java == 'temurin@17' + uses: actions/setup-java@v4 with: - path: | - ~/.sbt - ~/.ivy2/cache - ~/.coursier/cache/v1 - ~/.cache/coursier/v1 - key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }} - - - name: sbt test + distribution: temurin + java-version: 17 + cache: sbt + + - name: Setup Java (temurin@21) + if: matrix.java == 'temurin@21' + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 21 + cache: sbt + + - name: Setup sbt + uses: sbt/setup-sbt@v1 + + - name: Check that workflows are up to date + run: sbt '++ ${{ matrix.scala }}' githubWorkflowCheck + + - name: Build project run: sbt test - - name: sbt mdoc + - name: Build docs + if: matrix.java == 'temurin@21' run: sbt mdoc diff --git a/.github/workflows/clean.yml b/.github/workflows/clean.yml new file mode 100644 index 0000000..bfc865d --- /dev/null +++ b/.github/workflows/clean.yml @@ -0,0 +1,60 @@ +# This file was automatically generated by sbt-github-actions using the +# githubWorkflowGenerate task. You should add and commit this file to +# your git repository. It goes without saying that you shouldn't edit +# this file by hand! Instead, if you wish to make changes, you should +# change your sbt build configuration to revise the workflow description +# to meet your needs, then regenerate this file. + +name: Clean + +on: push + +jobs: + delete-artifacts: + name: Delete Artifacts + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Delete artifacts + shell: bash {0} + run: | + # Customize those three lines with your repository and credentials: + REPO=${GITHUB_API_URL}/repos/${{ github.repository }} + + # A shortcut to call GitHub API. + ghapi() { curl --silent --location --user _:$GITHUB_TOKEN "$@"; } + + # A temporary file which receives HTTP response headers. + TMPFILE=$(mktemp) + + # An associative array, key: artifact name, value: number of artifacts of that name. + declare -A ARTCOUNT + + # Process all artifacts on this repository, loop on returned "pages". + URL=$REPO/actions/artifacts + while [[ -n "$URL" ]]; do + + # Get current page, get response headers in a temporary file. + JSON=$(ghapi --dump-header $TMPFILE "$URL") + + # Get URL of next page. Will be empty if we are at the last page. + URL=$(grep '^Link:' "$TMPFILE" | tr ',' '\n' | grep 'rel="next"' | head -1 | sed -e 's/.*.*//') + rm -f $TMPFILE + + # Number of artifacts on this page: + COUNT=$(( $(jq <<<$JSON -r '.artifacts | length') )) + + # Loop on all artifacts on this page. + for ((i=0; $i < $COUNT; i++)); do + + # Get name of artifact and count instances of this name. + name=$(jq <<<$JSON -r ".artifacts[$i].name?") + ARTCOUNT[$name]=$(( $(( ${ARTCOUNT[$name]} )) + 1)) + + id=$(jq <<<$JSON -r ".artifacts[$i].id?") + size=$(( $(jq <<<$JSON -r ".artifacts[$i].size_in_bytes?") )) + printf "Deleting '%s' #%d, %'d bytes\n" $name ${ARTCOUNT[$name]} $size + ghapi -X DELETE $REPO/actions/artifacts/$id + done + done diff --git a/build.sbt b/build.sbt index 8213602..1065a8d 100644 --- a/build.sbt +++ b/build.sbt @@ -7,6 +7,22 @@ Global / onChangedBuildSource := ReloadOnSourceChanges noPublishSettings +// GitHub Actions config +val javaVersions = Seq(11, 17, 21).map(v => JavaSpec.temurin(v.toString)) + +ThisBuild / githubWorkflowJavaVersions := javaVersions +ThisBuild / githubWorkflowArtifactUpload := false +ThisBuild / githubWorkflowBuildMatrixFailFast := Some(false) +ThisBuild / githubWorkflowTargetBranches := Seq("master") +ThisBuild / githubWorkflowPublishTargetBranches := Seq() + +def isJava(v: Int) = s"matrix.java == '${javaVersions.find(_.version == v.toString).get.render}'" + +ThisBuild / githubWorkflowBuild := Seq( + WorkflowStep.Run(List("sbt test"), name = Some("Build project")), + WorkflowStep.Run(List("sbt mdoc"), name = Some("Build docs"), cond = Some(isJava(21))), +) + lazy val core = simpleProj(projectMatrix.in(file("core")), "core", List( Platform.Jvm, Platform.Js, diff --git a/project/plugins.sbt b/project/plugins.sbt index 8df2d6b..526c5f8 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,9 +1,10 @@ addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.10.1") -addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2") +addSbtPlugin("com.github.sbt" % "sbt-github-actions" % "0.24.0") addSbtPlugin("io.spray" % "sbt-revolver" % "0.10.0") addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.5.6") addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.6.1" ) +addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2") addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.7") resolvers += "bondlink-maven-repo" at "https://raw.githubusercontent.com/mblink/maven-repo/main"