aboutsummaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorAmir Saeid <amir@glgdgt.com>2026-02-08 22:52:14 +0000
committerAmir Saeid <amir@glgdgt.com>2026-02-08 22:52:14 +0000
commit21cd15d7a259e3ada2401e2585455587a56bdfbd (patch)
treea99117c5eb8f86c21132f5541b65c7cf393b0354 /.github
first commit
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/ci.yml281
-rw-r--r--.github/workflows/clean.yml59
2 files changed, 340 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..e29033a
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,281 @@
+# 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: ['**', '!update/**', '!pr/**']
+ push:
+ branches: ['**', '!update/**', '!pr/**']
+ tags: [v*]
+
+env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+
+concurrency:
+ group: ${{ github.workflow }} @ ${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ build:
+ name: Test
+ strategy:
+ matrix:
+ os: [ubuntu-22.04]
+ scala: [2.13, 3]
+ java: [temurin@8]
+ project: [rootJS, rootJVM]
+ runs-on: ${{ matrix.os }}
+ timeout-minutes: 60
+ steps:
+ - name: Checkout current branch (full)
+ uses: actions/checkout@v6
+ 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: Check that workflows are up to date
+ run: sbt githubWorkflowCheck
+
+ - name: Check headers and formatting
+ if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-22.04'
+ run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' headerCheckAll scalafmtCheckAll 'project /' scalafmtSbtCheck
+
+ - name: Check scalafix lints
+ if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-22.04'
+ run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' 'scalafixAll --check'
+
+ - name: scalaJSLink
+ if: matrix.project == 'rootJS'
+ run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' Test/scalaJSLinkerResult
+
+ - name: Test
+ run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' test
+
+ - name: Check binary compatibility
+ 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-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 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 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@v5
+ with:
+ name: target-${{ matrix.os }}-${{ matrix.java }}-${{ matrix.scala }}-${{ matrix.project }}
+ path: targets.tar
+
+ publish:
+ name: Publish Artifacts
+ needs: [build]
+ if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
+ strategy:
+ matrix:
+ os: [ubuntu-22.04]
+ java: [temurin@8]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - name: Checkout current branch (full)
+ uses: actions/checkout@v6
+ 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: Download target directories (2.13, rootJS)
+ uses: actions/download-artifact@v6
+ with:
+ name: target-${{ matrix.os }}-${{ matrix.java }}-2.13-rootJS
+
+ - name: Inflate target directories (2.13, rootJS)
+ run: |
+ tar xf targets.tar
+ rm targets.tar
+
+ - name: Download target directories (2.13, rootJVM)
+ uses: actions/download-artifact@v6
+ with:
+ name: target-${{ matrix.os }}-${{ matrix.java }}-2.13-rootJVM
+
+ - name: Inflate target directories (2.13, rootJVM)
+ run: |
+ tar xf targets.tar
+ rm targets.tar
+
+ - name: Download target directories (3, rootJS)
+ uses: actions/download-artifact@v6
+ with:
+ name: target-${{ matrix.os }}-${{ matrix.java }}-3-rootJS
+
+ - name: Inflate target directories (3, rootJS)
+ run: |
+ tar xf targets.tar
+ rm targets.tar
+
+ - name: Download target directories (3, rootJVM)
+ uses: actions/download-artifact@v6
+ with:
+ name: target-${{ matrix.os }}-${{ matrix.java }}-3-rootJVM
+
+ - name: Inflate target directories (3, rootJVM)
+ 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: 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@8]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - name: Checkout current branch (full)
+ uses: actions/checkout@v6
+ 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_2.13 rootjs_3 docs_2.13 docs_3 rootjvm_2.13 rootjvm_3 rootnative_2.13 rootnative_3
+ configs-ignore: test scala-tool scala-doc-tool test-internal
+
+ site:
+ name: Generate Site
+ strategy:
+ matrix:
+ os: [ubuntu-22.04]
+ java: [temurin@11]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - name: Checkout current branch (full)
+ uses: actions/checkout@v6
+ 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: Setup Java (temurin@11)
+ id: setup-java-temurin-11
+ if: matrix.java == 'temurin@11'
+ uses: actions/setup-java@v5
+ 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: Generate site
+ run: sbt docs/tlSite
+
+ - name: Publish site
+ if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
+ uses: peaceiris/actions-gh-pages@v4.0.0
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: site/target/docs/site
+ keep_files: true
diff --git a/.github/workflows/clean.yml b/.github/workflows/clean.yml
new file mode 100644
index 0000000..547aaa4
--- /dev/null
+++ b/.github/workflows/clean.yml
@@ -0,0 +1,59 @@
+# 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
+ 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=/tmp/tmp.$$
+
+ # 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/.*<//' -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