Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
200 changes: 128 additions & 72 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,77 +15,65 @@ 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:
fail-fast: false
matrix:
os:
- ubuntu-latest
- ubuntu-20.04
- ubuntu-22.04
- macos-11
- macos-12
- windows-2022
scala: [3.3.3, 2.13.12]
- ubuntu-latest
- ubuntu-22.04
- macos-13
- windows-2022
scala: [3, 2.13]
java: [temurin@17]
project: [rootJVM, rootNative]
include:
- os: ubuntu-latest
experimental: yes
exclude:
- scala: 3.3.3
- scala: 3
os: windows-2022
- project: rootJVM
runs-on: ${{ matrix.os }}
env:
EXPERIMENTAL: ${{ matrix.experimental }}
timeout-minutes: 60
steps:
- name: Ignore line ending differences in git
if: contains(runner.os, 'windows')
shell: bash
run: git config --global core.autocrlf false

- name: Checkout current branch (full)
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0

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

- name: Setup Java (temurin@17)
id: setup-java-temurin-17
if: matrix.java == 'temurin@17'
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
distribution: jdkfile
distribution: temurin
java-version: 17
jdkFile: ${{ steps.download-java-temurin-17.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@17' && steps.setup-java-temurin-17.outputs.cache-hit == 'false'
shell: bash
run: sbt +update

- name: Install libcurl (ubuntu)
if: startsWith(matrix.os, 'ubuntu') && matrix.experimental != 'yes'
Expand Down Expand Up @@ -149,23 +137,23 @@ jobs:
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' doc

- name: Check scalafix lints
if: matrix.java == 'temurin@17' && !startsWith(matrix.scala, '3.')
if: matrix.java == 'temurin@17' && !startsWith(matrix.scala, '3')
shell: bash
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' 'scalafixAll --check'

- name: Make target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
shell: bash
run: mkdir -p target .js/target curl/target test-server/target .jvm/target .native/target tests/websocket/target example/target tests/http/target tests/common/target project/target
run: mkdir -p curl/target project/target

- name: Compress target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
shell: bash
run: tar cf targets.tar target .js/target curl/target test-server/target .jvm/target .native/target tests/websocket/target example/target tests/http/target tests/common/target project/target
run: tar cf targets.tar curl/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@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-${{ matrix.scala }}-${{ matrix.project }}
path: targets.tar
Expand All @@ -185,37 +173,25 @@ jobs:
run: git config --global core.autocrlf false

- name: Checkout current branch (full)
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0

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

- name: Setup Java (temurin@17)
id: setup-java-temurin-17
if: matrix.java == 'temurin@17'
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
distribution: jdkfile
distribution: temurin
java-version: 17
jdkFile: ${{ steps.download-java-temurin-17.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@17' && steps.setup-java-temurin-17.outputs.cache-hit == 'false'
run: sbt +update

- name: Install libcurl (ubuntu)
if: startsWith(matrix.os, 'ubuntu') && matrix.experimental != 'yes'
Expand Down Expand Up @@ -247,36 +223,116 @@ jobs:
vcpkg install --triplet x64-windows curl
cp "C:\vcpkg\installed\x64-windows\lib\libcurl.lib" "C:\vcpkg\installed\x64-windows\lib\curl.lib"

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

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

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

- name: Inflate target directories (2.13.12, 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
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@17]
runs-on: ${{ matrix.os }}
steps:
- name: Ignore line ending differences in git
if: contains(runner.os, 'windows')
run: git config --global core.autocrlf false

- name: Checkout current branch (full)
uses: actions/checkout@v4
with:
fetch-depth: 0

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

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

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

- name: Install libcurl (ubuntu)
if: startsWith(matrix.os, 'ubuntu') && matrix.experimental != 'yes'
run: |
sudo apt-get update
sudo apt-get install libcurl4-openssl-dev

- name: Build libcurl from source (ubuntu)
if: startsWith(matrix.os, 'ubuntu') && matrix.experimental == 'yes'
run: |
sudo apt-get update
sudo apt-get purge curl
sudo apt-get install libssl-dev autoconf libtool make wget unzip
cd /usr/local/src
sudo wget https://curl.se/download/curl-7.87.0.zip
sudo unzip curl-7.87.0.zip
cd curl-7.87.0
sudo ./configure --with-openssl --enable-websockets
sudo make
sudo make install
curl-config --version
curl-config --protocols
echo "LD_LIBRARY_PATH=/usr/local/lib/" >> $GITHUB_ENV

- name: Install libcurl (windows)
if: startsWith(matrix.os, 'windows')
run: |
vcpkg integrate install
vcpkg install --triplet x64-windows curl
cp "C:\vcpkg\installed\x64-windows\lib\libcurl.lib" "C:\vcpkg\installed\x64-windows\lib\curl.lib"

- name: Submit Dependencies
uses: scalacenter/sbt-dependency-submission@v2
with:
modules-ignore: rootjs_3 rootjs_2.13 testserver_3 testserver_2.13 rootjvm_3 rootjvm_2.13 rootnative_3 rootnative_2.13 sbt-http4s-org-scalafix-internal_3 sbt-http4s-org-scalafix-internal_2.13 websockettestsuite_native0.4_3 websockettestsuite_native0.4_2.13 example_native0.4_3 example_native0.4_2.13 httptestsuite_native0.4_3 httptestsuite_native0.4_2.13 testcommon_native0.4_3 testcommon_native0.4_2.13
configs-ignore: test scala-tool scala-doc-tool test-internal
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ object CurlRuntime {
installGlobal {
CurlRuntime()
}
()
}

_global
Expand Down
4 changes: 2 additions & 2 deletions project/TestServer.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import java.io.IOException
import java.net.URL
import java.net.URI
import sbt._
import Keys._
import scala.util.{Failure, Success, Try}
Expand Down Expand Up @@ -41,7 +41,7 @@ object TestServer {

private def waitForStart(): Try[_] = {
val maxAttempts = 10
val u = new URL("http://localhost:8080")
val u = new URI("http://localhost:8080").toURL
val c = u.openConnection()
val result = (1 to maxAttempts).toStream
.map { i =>
Expand Down
2 changes: 1 addition & 1 deletion project/Versions.scala
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
object Versions {
val scala3 = "3.3.3"
val scala213 = "2.13.12"
val scala213 = "2.13.16"
val http4sVersion = "0.23.27"
val catsEffectVersion = "3.5.4"
val munitCEVersion = "2.0.0-RC1"
Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=1.10.0
sbt.version=1.11.1
2 changes: 1 addition & 1 deletion project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
addSbtPlugin("org.http4s" % "sbt-http4s-org" % "0.14.13")
addSbtPlugin("org.http4s" % "sbt-http4s-org" % "2.0.0")
addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.4.17")
8 changes: 4 additions & 4 deletions workflows.sbt
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import org.typelevel.sbt.gha.WorkflowStep.Use
ThisBuild / githubWorkflowJavaVersions := Seq(JavaSpec.temurin("17"))
ThisBuild / githubWorkflowOSes :=
Seq("ubuntu-latest", "ubuntu-20.04", "ubuntu-22.04", "macos-11", "macos-12", "windows-2022")
Seq("ubuntu-latest", "ubuntu-22.04", "macos-13", "windows-2022")
ThisBuild / githubWorkflowBuildMatrixExclusions ++= Seq(
MatrixExclude(Map("scala" -> Versions.scala3, "os" -> "windows-2022")), // dottydoc bug
MatrixExclude(Map("scala" -> "3", "os" -> "windows-2022")), // dottydoc bug
MatrixExclude(Map("project" -> "rootJVM")), // no need to run
)

Expand All @@ -18,7 +18,7 @@ ThisBuild / githubWorkflowBuildPostamble ~= {
ThisBuild / githubWorkflowGeneratedCI ~= {
_.map { job =>
if (job.id == "build")
job.copy(env = job.env.updated("EXPERIMENTAL", s"$${{ matrix.experimental }}"))
job.withEnv(job.env.updated("EXPERIMENTAL", s"$${{ matrix.experimental }}"))
else job
}
}
Expand Down Expand Up @@ -63,7 +63,7 @@ ThisBuild / githubWorkflowJobSetup ++= Seq(
ThisBuild / githubWorkflowBuild ~= { steps =>
steps.map {
case step: WorkflowStep.Sbt if step.name == Some("Test") =>
step.copy(commands = List("integrate"))
step.withCommands(List("integrate"))
case other => other
}
}
Loading