diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8b555340a..e38fee8d8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,41 +1,74 @@ -name: scala-ts +# 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: + os: [ubuntu-latest] scala: [3.3.1] - java: [8, 11, 17] + java: [temurin@8, 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@8) + if: matrix.java == 'temurin@8' + uses: actions/setup-java@v4 with: distribution: temurin - java-version: ${{ matrix.java }} + java-version: 8 + cache: sbt - - name: Cache sbt - uses: actions/cache@v2 + - name: Setup Java (temurin@11) + if: matrix.java == 'temurin@11' + 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') }} + distribution: temurin + java-version: 11 + cache: sbt + + - name: Setup Java (temurin@17) + if: matrix.java == 'temurin@17' + uses: actions/setup-java@v4 + with: + 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: Check that workflows are up to date + run: sbt '++ ${{ matrix.scala }}' githubWorkflowCheck - name: yarn install - if: matrix.scala == '3.3.1' run: cd tests && yarn && cd .. - - name: sbt test - run: sbt ++${{ matrix.scala }} test + - name: test + run: sbt '++ ${{ matrix.scala }}' test diff --git a/.github/workflows/clean.yml b/.github/workflows/clean.yml new file mode 100644 index 000000000..bfc865d50 --- /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 3d83bd52c..4e6dcc6c1 100644 --- a/build.sbt +++ b/build.sbt @@ -1,5 +1,25 @@ Global / onChangedBuildSource := ReloadOnSourceChanges +val scalaV = "3.3.1" + +ThisBuild / scalaVersion := scalaV +ThisBuild / crossScalaVersions := Seq(scalaV) + +// GitHub Actions config +val javaVersions = Seq(8, 11, 17, 21).map(v => JavaSpec.temurin(v.toString)) + +ThisBuild / githubWorkflowJavaVersions := javaVersions +ThisBuild / githubWorkflowArtifactUpload := false +ThisBuild / githubWorkflowBuildMatrixFailFast := Some(false) +ThisBuild / githubWorkflowTargetBranches := Seq("master") + +ThisBuild / githubWorkflowBuild := Seq( + WorkflowStep.Run(List("cd tests && yarn && cd .."), name = Some("yarn install")), + WorkflowStep.Sbt(List("test"), name = Some("test")), +) + +ThisBuild / githubWorkflowPublishTargetBranches := Seq() + lazy val cats = "org.typelevel" %% "cats-core" % "2.10.0" def circe(proj: String) = "io.circe" %% s"circe-$proj" % "0.14.6" lazy val joda = "joda-time" % "joda-time" % "2.12.7" diff --git a/project/plugins.sbt b/project/plugins.sbt index b18cc2b13..eb6e1660b 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,5 @@ addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.11.0") +addSbtPlugin("com.github.sbt" % "sbt-github-actions" % "0.23.0") addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.0") resolvers += "bondlink-maven-repo" at "https://raw.githubusercontent.com/mblink/maven-repo/main"