Skip to content

Implement a safer Resource.attempt which releases acquired resource(s) in case of error #7325

Implement a safer Resource.attempt which releases acquired resource(s) in case of error

Implement a safer Resource.attempt which releases acquired resource(s) in case of error #7325

Workflow file for this run

# 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:
pull_request:
branches: [series/3.*]
push:
branches: [series/3.*]
tags: [v*]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
concurrency:
group: ${{ github.workflow }} @ ${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: Build and Test
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-14]
scala: [3.3.3, 2.12.19, 2.13.14]
java:
- temurin@8
- temurin@11
- temurin@17
- temurin@21
- graalvm@17
ci: [ciJVM, ciNative, ciJS, ciFirefox, ciChrome]
exclude:
- scala: 3.3.3
java: temurin@11
- scala: 3.3.3
java: temurin@21
- scala: 2.12.19
java: temurin@11
- scala: 2.12.19
java: temurin@17
- scala: 2.12.19
java: temurin@21
- scala: 2.12.19
java: graalvm@17
- os: windows-latest
scala: 3.3.3
ci: ciJVM
- os: macos-14
scala: 3.3.3
ci: ciJVM
- os: windows-latest
scala: 2.12.19
ci: ciJVM
- os: macos-14
scala: 2.12.19
ci: ciJVM
- os: macos-14
java: temurin@8
- ci: ciFirefox
scala: 3.3.3
- ci: ciChrome
scala: 3.3.3
- ci: ciFirefox
scala: 2.12.19
- ci: ciChrome
scala: 2.12.19
- ci: ciJS
java: temurin@11
- ci: ciJS
java: temurin@17
- ci: ciJS
java: temurin@21
- ci: ciJS
java: graalvm@17
- os: windows-latest
ci: ciJS
- os: macos-14
ci: ciJS
- ci: ciFirefox
java: temurin@11
- ci: ciFirefox
java: temurin@17
- ci: ciFirefox
java: temurin@21
- ci: ciFirefox
java: graalvm@17
- os: windows-latest
ci: ciFirefox
- os: macos-14
ci: ciFirefox
- ci: ciChrome
java: temurin@11
- ci: ciChrome
java: temurin@17
- ci: ciChrome
java: temurin@21
- ci: ciChrome
java: graalvm@17
- os: windows-latest
ci: ciChrome
- os: macos-14
ci: ciChrome
- ci: ciNative
java: temurin@11
- ci: ciNative
java: temurin@17
- ci: ciNative
java: temurin@21
- ci: ciNative
java: graalvm@17
- os: windows-latest
ci: ciNative
- os: macos-14
ci: ciNative
scala: 2.12.19
- os: windows-latest
java: graalvm@17
runs-on: ${{ matrix.os }}
timeout-minutes: 60
steps:
- name: Install sbt
if: contains(runner.os, 'macos')
shell: bash
run: brew install sbt
- 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@v4
with:
fetch-depth: 0
- name: Setup Java (temurin@8)
id: setup-java-temurin-8
if: matrix.java == 'temurin@8'
uses: actions/setup-java@v4
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'
shell: bash
run: sbt +update
- name: Setup Java (temurin@11)
id: setup-java-temurin-11
if: matrix.java == 'temurin@11'
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 11
cache: sbt
- name: sbt update
if: matrix.java == 'temurin@11' && steps.setup-java-temurin-11.outputs.cache-hit == 'false'
shell: bash
run: sbt +update
- 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'
shell: bash
run: sbt +update
- name: Setup Java (temurin@21)
id: setup-java-temurin-21
if: matrix.java == 'temurin@21'
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
cache: sbt
- name: sbt update
if: matrix.java == 'temurin@21' && steps.setup-java-temurin-21.outputs.cache-hit == 'false'
shell: bash
run: sbt +update
- name: Setup Java (graalvm@17)
id: setup-java-graalvm-17
if: matrix.java == 'graalvm@17'
uses: graalvm/setup-graalvm@v1
with:
distribution: graalvm
java-version: 17
cache: sbt
- name: sbt update
if: matrix.java == 'graalvm@17' && steps.setup-java-graalvm-17.outputs.cache-hit == 'false'
shell: bash
run: sbt +update
- name: Setup NodeJS v18 LTS
if: matrix.ci == 'ciJS'
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install jsdom and source-map-support
if: matrix.ci == 'ciJS'
shell: bash
run: npm install
- name: Install GraalVM Native Image
if: matrix.java == 'graalvm@17'
shell: bash
run: gu install native-image
- name: Configure Windows Pagefile
if: matrix.os == 'windows-latest'
uses: al-cheb/configure-pagefile-action@d298bdee6b133626425040e3788f1055a8b4cf7a
with:
minimum-size: 2GB
maximum-size: 8GB
timeout: 600
- name: Check that workflows are up to date
shell: bash
run: sbt githubWorkflowCheck
- name: Check that scalafix has been run on JVM
if: matrix.ci == 'ciJVM' && matrix.scala != '3.3.3' && matrix.java == 'temurin@8' && matrix.os == 'ubuntu-latest'
shell: bash
run: sbt '++ ${{ matrix.scala }}' 'rootJVM/scalafixAll --check'
- name: Check that scalafix has been run on JS
if: matrix.ci == 'ciJS' && matrix.scala != '3.3.3' && matrix.java == 'temurin@8' && matrix.os == 'ubuntu-latest'
shell: bash
run: sbt '++ ${{ matrix.scala }}' 'rootJS/scalafixAll --check'
- name: Check that scalafix has been run on Native
if: matrix.ci == 'ciNative' && matrix.scala != '3.3.3' && matrix.java == 'temurin@8' && matrix.os == 'ubuntu-latest'
shell: bash
run: sbt '++ ${{ matrix.scala }}' 'rootNative/scalafixAll --check'
- shell: bash
run: sbt '++ ${{ matrix.scala }}' '${{ matrix.ci }}'
- if: (matrix.scala == '2.13.14' || matrix.scala == '3.3.3') && matrix.ci == 'ciJVM' && matrix.java == 'temurin@17'
shell: bash
run: sbt '++ ${{ matrix.scala }}' docs/mdoc
- name: Test Example JVM App Within Sbt
if: matrix.ci == 'ciJVM' && matrix.os == 'ubuntu-latest'
shell: bash
run: example/test-jvm.sh ${{ matrix.scala }}
- name: Test Example JavaScript App Using Node
if: matrix.ci == 'ciJS' && matrix.os == 'ubuntu-latest'
shell: bash
run: example/test-js.sh ${{ matrix.scala }}
- name: Test GraalVM Native Image
if: matrix.scala == '2.13.14' && matrix.java == 'graalvm@17' && matrix.os == 'ubuntu-latest'
shell: bash
run: sbt '++ ${{ matrix.scala }}' graalVMExample/nativeImage graalVMExample/nativeImageRun
- name: Test Example Native App Using Binary
if: matrix.ci == 'ciNative' && matrix.os == 'ubuntu-latest'
shell: bash
run: example/test-native.sh ${{ matrix.scala }}
- name: Scalafix tests
if: matrix.scala == '2.13.14' && matrix.ci == 'ciJVM' && matrix.os == 'ubuntu-latest'
shell: bash
run: |
cd scalafix
sbt test
- name: Make target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v'))
shell: bash
run: mkdir -p testkit/native/target std/jvm/target kernel-testkit/jvm/target testkit/js/target core/native/target site-docs/target std/js/target laws/native/target kernel-testkit/native/target kernel/jvm/target core/js/target kernel/js/target laws/js/target kernel-testkit/js/target core/jvm/target kernel/native/target laws/jvm/target std/native/target testkit/jvm/target project/target
- name: Compress target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v'))
shell: bash
run: tar cf targets.tar testkit/native/target std/jvm/target kernel-testkit/jvm/target testkit/js/target core/native/target site-docs/target std/js/target laws/native/target kernel-testkit/native/target kernel/jvm/target core/js/target kernel/js/target laws/js/target kernel-testkit/js/target core/jvm/target kernel/native/target laws/jvm/target std/native/target testkit/jvm/target project/target
- name: Upload target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v'))
uses: actions/upload-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-${{ matrix.scala }}-${{ matrix.ci }}
path: targets.tar
publish:
name: Publish Artifacts
needs: [build]
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v'))
strategy:
matrix:
os: [ubuntu-latest]
java: [temurin@8]
runs-on: ${{ matrix.os }}
steps:
- name: Install sbt
if: contains(runner.os, 'macos')
run: brew install sbt
- 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 Java (temurin@8)
id: setup-java-temurin-8
if: matrix.java == 'temurin@8'
uses: actions/setup-java@v4
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: Setup Java (temurin@11)
id: setup-java-temurin-11
if: matrix.java == 'temurin@11'
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 11
cache: sbt
- name: sbt update
if: matrix.java == 'temurin@11' && steps.setup-java-temurin-11.outputs.cache-hit == 'false'
run: sbt +update
- 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: Setup Java (temurin@21)
id: setup-java-temurin-21
if: matrix.java == 'temurin@21'
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
cache: sbt
- name: sbt update
if: matrix.java == 'temurin@21' && steps.setup-java-temurin-21.outputs.cache-hit == 'false'
run: sbt +update
- name: Setup Java (graalvm@17)
id: setup-java-graalvm-17
if: matrix.java == 'graalvm@17'
uses: graalvm/setup-graalvm@v1
with:
distribution: graalvm
java-version: 17
cache: sbt
- name: sbt update
if: matrix.java == 'graalvm@17' && steps.setup-java-graalvm-17.outputs.cache-hit == 'false'
run: sbt +update
- name: Download target directories (3.3.3, ciJVM)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-3.3.3-ciJVM
- name: Inflate target directories (3.3.3, ciJVM)
run: |
tar xf targets.tar
rm targets.tar
- name: Download target directories (3.3.3, ciNative)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-3.3.3-ciNative
- name: Inflate target directories (3.3.3, ciNative)
run: |
tar xf targets.tar
rm targets.tar
- name: Download target directories (3.3.3, ciJS)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-3.3.3-ciJS
- name: Inflate target directories (3.3.3, ciJS)
run: |
tar xf targets.tar
rm targets.tar
- name: Download target directories (2.12.19, ciJVM)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12.19-ciJVM
- name: Inflate target directories (2.12.19, ciJVM)
run: |
tar xf targets.tar
rm targets.tar
- name: Download target directories (2.12.19, ciNative)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12.19-ciNative
- name: Inflate target directories (2.12.19, ciNative)
run: |
tar xf targets.tar
rm targets.tar
- name: Download target directories (2.12.19, ciJS)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12.19-ciJS
- name: Inflate target directories (2.12.19, ciJS)
run: |
tar xf targets.tar
rm targets.tar
- name: Download target directories (2.13.14, ciJVM)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.14-ciJVM
- name: Inflate target directories (2.13.14, ciJVM)
run: |
tar xf targets.tar
rm targets.tar
- name: Download target directories (2.13.14, ciNative)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.14-ciNative
- name: Inflate target directories (2.13.14, ciNative)
run: |
tar xf targets.tar
rm targets.tar
- name: Download target directories (2.13.14, ciJS)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.14-ciJS
- name: Inflate target directories (2.13.14, ciJS)
run: |
tar xf targets.tar
rm targets.tar
- name: Download target directories (2.13.14, ciFirefox)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.14-ciFirefox
- name: Inflate target directories (2.13.14, ciFirefox)
run: |
tar xf targets.tar
rm targets.tar
- name: Download target directories (2.13.14, ciChrome)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.14-ciChrome
- name: Inflate target directories (2.13.14, ciChrome)
run: |
tar xf targets.tar
rm targets.tar
- name: Import signing key
if: env.PGP_SECRET != '' && env.PGP_PASSPHRASE == ''
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 -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: Wait for Cirrus CI
uses: typelevel/await-cirrus@main
- name: Publish
env:
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SONATYPE_CREDENTIAL_HOST: ${{ secrets.SONATYPE_CREDENTIAL_HOST }}
run: sbt tlCiRelease
- name: Post release to Discord
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run: scripts/post-release-discord.sh ${{ github.ref }}
dependency-submission:
name: Submit Dependencies
if: github.event_name != 'pull_request'
strategy:
matrix:
os: [ubuntu-latest]
java: [temurin@8]
runs-on: ${{ matrix.os }}
steps:
- name: Install sbt
if: contains(runner.os, 'macos')
run: brew install sbt
- 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 Java (temurin@8)
id: setup-java-temurin-8
if: matrix.java == 'temurin@8'
uses: actions/setup-java@v4
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: Setup Java (temurin@11)
id: setup-java-temurin-11
if: matrix.java == 'temurin@11'
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 11
cache: sbt
- name: sbt update
if: matrix.java == 'temurin@11' && steps.setup-java-temurin-11.outputs.cache-hit == 'false'
run: sbt +update
- 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: Setup Java (temurin@21)
id: setup-java-temurin-21
if: matrix.java == 'temurin@21'
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
cache: sbt
- name: sbt update
if: matrix.java == 'temurin@21' && steps.setup-java-temurin-21.outputs.cache-hit == 'false'
run: sbt +update
- name: Setup Java (graalvm@17)
id: setup-java-graalvm-17
if: matrix.java == 'graalvm@17'
uses: graalvm/setup-graalvm@v1
with:
distribution: graalvm
java-version: 17
cache: sbt
- name: sbt update
if: matrix.java == 'graalvm@17' && steps.setup-java-graalvm-17.outputs.cache-hit == 'false'
run: sbt +update
- name: Submit Dependencies
uses: scalacenter/sbt-dependency-submission@v2
with:
modules-ignore: cats-effect-benchmarks_3 cats-effect-benchmarks_2.12 cats-effect-benchmarks_2.13 cats-effect_3 cats-effect_2.12 cats-effect_2.13 cats-effect-example_sjs1_3 cats-effect-example_sjs1_2.12 cats-effect-example_sjs1_2.13 rootjs_3 rootjs_2.12 rootjs_2.13 ioapptestsnative_3 ioapptestsnative_2.12 ioapptestsnative_2.13 cats-effect-graalvm-example_3 cats-effect-graalvm-example_2.12 cats-effect-graalvm-example_2.13 cats-effect-tests_sjs1_3 cats-effect-tests_sjs1_2.12 cats-effect-tests_sjs1_2.13 rootjvm_3 rootjvm_2.12 rootjvm_2.13 rootnative_3 rootnative_2.12 rootnative_2.13 cats-effect-example_native0.4_3 cats-effect-example_native0.4_2.12 cats-effect-example_native0.4_2.13 cats-effect-example_3 cats-effect-example_2.12 cats-effect-example_2.13 cats-effect-tests_3 cats-effect-tests_2.12 cats-effect-tests_2.13 ioapptestsjvm_3 ioapptestsjvm_2.12 ioapptestsjvm_2.13 ioapptestsjs_3 ioapptestsjs_2.12 ioapptestsjs_2.13 cats-effect-tests_native0.4_3 cats-effect-tests_native0.4_2.12 cats-effect-tests_native0.4_2.13
configs-ignore: test scala-tool scala-doc-tool test-internal