Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
a3cade6
rename syntax implicits so they don't clash with other libraries
bpholt Oct 31, 2025
9375fd7
Update to latest build plugins and Scala versions
mpilquist Sep 30, 2023
3d3c478
Update sbt-typelevel to 0.6.0 and sbt-scala-native to 0.4.16
bpholt Dec 11, 2025
ddde081
Update sbt-typelevel to 0.6.7
typelevel-steward[bot] May 13, 2024
7e3e2de
Update sbt-scala-native-config-brew-github-actions to 0.3.0
typelevel-steward[bot] May 13, 2024
c9435ed
Update sbt-scala-native-crossproject to 1.3.2
typelevel-steward[bot] May 13, 2024
20171d5
Update nscplugin, sbt-scala-native, ... to 0.4.17
typelevel-steward[bot] May 13, 2024
1af9140
Update sbt-typelevel to 0.7.1
bpholt Dec 11, 2025
b5535ab
Update sbt-typelevel to 0.7.3
typelevel-steward[bot] Sep 6, 2024
ea5a40f
Update sbt-typelevel to 0.7.7
typelevel-steward[bot] Jan 23, 2025
c493570
Update sbt-typelevel to 0.8.0
typelevel-steward[bot] Jun 3, 2025
97f7a06
Update sbt-typelevel to 0.8.2
typelevel-steward[bot] Oct 10, 2025
c2a2534
Update sbt-typelevel to 0.8.3
typelevel-steward[bot] Nov 14, 2025
6eec825
Upgrade to sbt-scala-native-config-brew-github-actions-0.4.0
rossabaker Jun 6, 2025
0cff2ef
Update sbt, scripted-plugin to 1.11.7
typelevel-steward[bot] Oct 5, 2025
26fb3af
Update scala-compiler, scala-library, ... to 2.13.14
typelevel-steward[bot] May 13, 2024
1f2f9d2
Update scala-compiler, scala-library, ... to 2.12.19
typelevel-steward[bot] May 13, 2024
c5c01d6
Update scala3-library, ... to 3.3.3
typelevel-steward[bot] May 13, 2024
c86e6c3
Update scala-compiler, scala-library, ... to 2.12.20
typelevel-steward[bot] Sep 4, 2024
fd20fd8
Update scala3-library, ... to 3.3.5
typelevel-steward[bot] Jan 29, 2025
cc93a0f
Update scala-compiler, scala-library, ... to 2.13.16
typelevel-steward[bot] Jan 16, 2025
8303144
Update scala3-library, ... to 3.3.6
typelevel-steward[bot] May 8, 2025
d9e6a9c
Update scala-compiler, scala-library, ... to 2.13.17
typelevel-steward[bot] Oct 7, 2025
694b199
Update scala3-library, ... to 3.3.7
typelevel-steward[bot] Oct 17, 2025
5cd778b
Update scala-compiler, scala-library, ... to 2.13.18
typelevel-steward[bot] Nov 24, 2025
57bf737
Update sbt-scalajs, scalajs-compiler, ... to 1.16.0
typelevel-steward[bot] May 13, 2024
1b8f5a6
Update sbt-scalajs, scalajs-compiler, ... to 1.18.2
typelevel-steward[bot] Jan 23, 2025
ba6e4ae
Update to Scala.js 1.20.1
mpilquist Sep 22, 2025
2678e11
Run prePR / githubWorkflowGenerate
bpholt Dec 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
222 changes: 122 additions & 100 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,62 +15,51 @@ on:
tags: [v*]

env:
PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SONATYPE_CREDENTIAL_HOST: ${{ secrets.SONATYPE_CREDENTIAL_HOST }}
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
PGP_SECRET: ${{ secrets.PGP_SECRET }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}


concurrency:
group: ${{ github.workflow }} @ ${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: Build and Test
name: Test
strategy:
matrix:
os: [ubuntu-latest]
scala: [3.2.2, 2.12.17, 2.13.10]
os: [ubuntu-22.04]
scala: [3, 2.12, 2.13]
java: [temurin@8]
project: [rootJS, rootJVM, rootNative]
runs-on: ${{ matrix.os }}
timeout-minutes: 60
steps:
- name: Checkout current branch (full)
uses: actions/checkout@v3
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Download Java (temurin@8)
id: download-java-temurin-8
if: matrix.java == 'temurin@8'
uses: typelevel/download-java@v2
with:
distribution: temurin
java-version: 8
- name: Setup sbt
uses: sbt/setup-sbt@v1

- name: Setup Java (temurin@8)
id: setup-java-temurin-8
if: matrix.java == 'temurin@8'
uses: actions/setup-java@v3
uses: actions/setup-java@v5
with:
distribution: jdkfile
distribution: temurin
java-version: 8
jdkFile: ${{ steps.download-java-temurin-8.outputs.jdkFile }}
cache: sbt

- name: Cache sbt
uses: actions/cache@v3
with:
path: |
~/.sbt
~/.ivy2/cache
~/.coursier/cache/v1
~/.cache/coursier/v1
~/AppData/Local/Coursier/Cache/v1
~/Library/Caches/Coursier/v1
key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }}
- name: sbt update
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
run: sbt +update

- name: Check that workflows are up to date
run: sbt githubWorkflowCheck

- name: Check headers and formatting
if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-latest'
if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-22.04'
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' headerCheckAll scalafmtCheckAll 'project /' scalafmtSbtCheck

- name: scalaJSLink
Expand All @@ -85,24 +74,24 @@ jobs:
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' test

- name: Check binary compatibility
if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-latest'
if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-22.04'
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' mimaReportBinaryIssues

- name: Generate API documentation
if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-latest'
if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-22.04'
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' doc

- name: Make target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
run: mkdir -p target .js/target core/native/target core/js/target core/jvm/target .jvm/target .native/target project/target
run: mkdir -p core/native/target core/js/target core/jvm/target project/target

- name: Compress target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
run: tar cf targets.tar target .js/target core/native/target core/js/target core/jvm/target .jvm/target .native/target project/target
run: tar cf targets.tar core/native/target core/js/target core/jvm/target project/target

- name: Upload target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v5
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-${{ matrix.scala }}-${{ matrix.project }}
path: targets.tar
Expand All @@ -113,144 +102,177 @@ jobs:
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
strategy:
matrix:
os: [ubuntu-latest]
scala: [3.2.2]
os: [ubuntu-22.04]
java: [temurin@8]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout current branch (full)
uses: actions/checkout@v3
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Download Java (temurin@8)
id: download-java-temurin-8
if: matrix.java == 'temurin@8'
uses: typelevel/download-java@v2
with:
distribution: temurin
java-version: 8
- name: Setup sbt
uses: sbt/setup-sbt@v1

- name: Setup Java (temurin@8)
id: setup-java-temurin-8
if: matrix.java == 'temurin@8'
uses: actions/setup-java@v3
uses: actions/setup-java@v5
with:
distribution: jdkfile
distribution: temurin
java-version: 8
jdkFile: ${{ steps.download-java-temurin-8.outputs.jdkFile }}
cache: sbt

- name: Cache sbt
uses: actions/cache@v3
with:
path: |
~/.sbt
~/.ivy2/cache
~/.coursier/cache/v1
~/.cache/coursier/v1
~/AppData/Local/Coursier/Cache/v1
~/Library/Caches/Coursier/v1
key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }}

- name: Download target directories (3.2.2, rootJS)
uses: actions/download-artifact@v3
- name: sbt update
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
run: sbt +update

- name: Download target directories (3, rootJS)
uses: actions/download-artifact@v6
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-3.2.2-rootJS
name: target-${{ matrix.os }}-${{ matrix.java }}-3-rootJS

- name: Inflate target directories (3.2.2, rootJS)
- name: Inflate target directories (3, rootJS)
run: |
tar xf targets.tar
rm targets.tar

- name: Download target directories (3.2.2, rootJVM)
uses: actions/download-artifact@v3
- name: Download target directories (3, rootJVM)
uses: actions/download-artifact@v6
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-3.2.2-rootJVM
name: target-${{ matrix.os }}-${{ matrix.java }}-3-rootJVM

- name: Inflate target directories (3.2.2, rootJVM)
- name: Inflate target directories (3, rootJVM)
run: |
tar xf targets.tar
rm targets.tar

- name: Download target directories (3.2.2, rootNative)
uses: actions/download-artifact@v3
- name: Download target directories (3, rootNative)
uses: actions/download-artifact@v6
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-3.2.2-rootNative
name: target-${{ matrix.os }}-${{ matrix.java }}-3-rootNative

- name: Inflate target directories (3.2.2, rootNative)
- name: Inflate target directories (3, rootNative)
run: |
tar xf targets.tar
rm targets.tar

- name: Download target directories (2.12.17, rootJS)
uses: actions/download-artifact@v3
- name: Download target directories (2.12, rootJS)
uses: actions/download-artifact@v6
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12.17-rootJS
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12-rootJS

- name: Inflate target directories (2.12.17, rootJS)
- name: Inflate target directories (2.12, rootJS)
run: |
tar xf targets.tar
rm targets.tar

- name: Download target directories (2.12.17, rootJVM)
uses: actions/download-artifact@v3
- name: Download target directories (2.12, rootJVM)
uses: actions/download-artifact@v6
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12.17-rootJVM
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12-rootJVM

- name: Inflate target directories (2.12.17, rootJVM)
- name: Inflate target directories (2.12, rootJVM)
run: |
tar xf targets.tar
rm targets.tar

- name: Download target directories (2.12.17, rootNative)
uses: actions/download-artifact@v3
- name: Download target directories (2.12, rootNative)
uses: actions/download-artifact@v6
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12.17-rootNative
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12-rootNative

- name: Inflate target directories (2.12.17, rootNative)
- name: Inflate target directories (2.12, rootNative)
run: |
tar xf targets.tar
rm targets.tar

- name: Download target directories (2.13.10, rootJS)
uses: actions/download-artifact@v3
- name: Download target directories (2.13, rootJS)
uses: actions/download-artifact@v6
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.10-rootJS
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13-rootJS

- name: Inflate target directories (2.13.10, rootJS)
- name: Inflate target directories (2.13, rootJS)
run: |
tar xf targets.tar
rm targets.tar

- name: Download target directories (2.13.10, rootJVM)
uses: actions/download-artifact@v3
- name: Download target directories (2.13, rootJVM)
uses: actions/download-artifact@v6
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.10-rootJVM
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13-rootJVM

- name: Inflate target directories (2.13.10, rootJVM)
- name: Inflate target directories (2.13, rootJVM)
run: |
tar xf targets.tar
rm targets.tar

- name: Download target directories (2.13.10, rootNative)
uses: actions/download-artifact@v3
- name: Download target directories (2.13, rootNative)
uses: actions/download-artifact@v6
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.10-rootNative
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13-rootNative

- name: Inflate target directories (2.13.10, rootNative)
- name: Inflate target directories (2.13, rootNative)
run: |
tar xf targets.tar
rm targets.tar

- name: Import signing key
if: env.PGP_SECRET != '' && env.PGP_PASSPHRASE == ''
run: echo $PGP_SECRET | base64 -di | gpg --import
env:
PGP_SECRET: ${{ secrets.PGP_SECRET }}
PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
run: echo $PGP_SECRET | base64 -d -i - | gpg --import

- name: Import signing key and strip passphrase
if: env.PGP_SECRET != '' && env.PGP_PASSPHRASE != ''
env:
PGP_SECRET: ${{ secrets.PGP_SECRET }}
PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
run: |
echo "$PGP_SECRET" | base64 -di > /tmp/signing-key.gpg
echo "$PGP_SECRET" | base64 -d -i - > /tmp/signing-key.gpg
echo "$PGP_PASSPHRASE" | gpg --pinentry-mode loopback --passphrase-fd 0 --import /tmp/signing-key.gpg
(echo "$PGP_PASSPHRASE"; echo; echo) | gpg --command-fd 0 --pinentry-mode loopback --change-passphrase $(gpg --list-secret-keys --with-colons 2> /dev/null | grep '^sec:' | cut --delimiter ':' --fields 5 | tail -n 1)

- name: Publish
run: sbt '++ ${{ matrix.scala }}' tlCiRelease
env:
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SONATYPE_CREDENTIAL_HOST: ${{ secrets.SONATYPE_CREDENTIAL_HOST }}
run: sbt tlCiRelease

dependency-submission:
name: Submit Dependencies
if: github.event.repository.fork == false && github.event_name != 'pull_request'
strategy:
matrix:
os: [ubuntu-22.04]
java: [temurin@8]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout current branch (full)
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Setup sbt
uses: sbt/setup-sbt@v1

- name: Setup Java (temurin@8)
id: setup-java-temurin-8
if: matrix.java == 'temurin@8'
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 8
cache: sbt

- name: sbt update
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
run: sbt +update

- name: Submit Dependencies
uses: scalacenter/sbt-dependency-submission@v2
with:
modules-ignore: rootjs_3 rootjs_2.12 rootjs_2.13 rootjvm_3 rootjvm_2.12 rootjvm_2.13 rootnative_3 rootnative_2.12 rootnative_2.13
configs-ignore: test scala-tool scala-doc-tool test-internal
4 changes: 2 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ ThisBuild / organization := "org.typelevel"
ThisBuild / organizationName := "Typelevel"
ThisBuild / startYear := Some(2023)

ThisBuild / crossScalaVersions := Seq("3.2.2", "2.12.17", "2.13.10")
ThisBuild / crossScalaVersions := Seq("3.3.7", "2.12.20", "2.13.18")
ThisBuild / scalaVersion := (ThisBuild / crossScalaVersions).value.head

ThisBuild / doctestTestFramework := DoctestTestFramework.ScalaCheck
Expand Down Expand Up @@ -36,7 +36,7 @@ lazy val core = crossProject(JVMPlatform, JSPlatform, NativePlatform)
.settings(
name := "twiddles-core",
libraryDependencies ++= Seq(
"org.typelevel" %%% "cats-core" % "2.9.0",
"org.typelevel" %%% "cats-core" % "2.10.0",
"org.typelevel" %%% "munit-cats-effect" % "2.0.0-M3" % Test,
"org.typelevel" %%% "scalacheck-effect-munit" % "2.0.0-M2" % Test
) ++ (if (scalaVersion.value.startsWith("2.")) Seq("com.chuusai" %%% "shapeless" % "2.3.10")
Expand Down
Loading