From 61d030a97137e7537728b1a672a34e78d33edaab Mon Sep 17 00:00:00 2001 From: Calvin Lee Fernandes Date: Tue, 7 Jan 2025 12:34:54 -0500 Subject: [PATCH] Add & Update ZIO SBT CI plugins (#769) * Add & Update ZIO SBT CI plugins Run sbt ciGenerateGithubWorkflow * Change check to lint to adhere to the ZIO SBT plugin convention --- .github/workflows/ci.yml | 405 +++++++++++++++++++++++++-------------- build.sbt | 2 +- project/build.properties | 2 +- project/plugins.sbt | 6 +- 4 files changed, 264 insertions(+), 151 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bb0f2f77..ed059527 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,156 +1,267 @@ -# 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: ['**'] - push: - branches: ['**'] - tags: [v*] +# This file was autogenerated using `zio-sbt-ci` plugin via `sbt ciGenerateGithubWorkflow` +# task and should be included in the git repository. Please do not edit it manually. +name: CI env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - + JDK_JAVA_OPTIONS: -XX:+PrintCommandLineFlags +'on': + workflow_dispatch: {} + release: + types: + - published + push: {} + pull_request: + branches-ignore: + - gh-pages +concurrency: + group: ${{ github.workflow }}-${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && github.run_id || github.ref }} + cancel-in-progress: true jobs: build: - name: Build and Test - strategy: - matrix: - os: [ubuntu-latest] - scala: [3.3.4, 2.13.15, 2.12.20] - java: [temurin@11, temurin@17, temurin@21] - runs-on: ${{ matrix.os }} + name: Build + runs-on: ubuntu-latest + continue-on-error: true steps: - - name: Checkout current branch (full) - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Java (temurin@11) - if: matrix.java == 'temurin@11' - uses: actions/setup-java@v4 - with: - 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: Setup sbt - uses: sbt/setup-sbt@v1 - - - name: Check that workflows are up to date - run: sbt '++ ${{ matrix.scala }}' githubWorkflowCheck - - - name: Build project - run: sbt '++ ${{ matrix.scala }}' test - - - name: Compress target directories - run: tar cf targets.tar target zio-sqs/target zio-sqs-docs/target project/target - - - name: Upload target directories - uses: actions/upload-artifact@v4 - with: - name: target-${{ matrix.os }}-${{ matrix.scala }}-${{ matrix.java }} - path: targets.tar - - publish: - name: Publish Artifacts - needs: [build] - if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v')) + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 + with: + distribution: corretto + java-version: '17' + check-latest: true + - name: Setup SBT + uses: sbt/setup-sbt@v1 + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Check all code compiles + run: sbt +Test/compile + - name: Check artifacts build process + run: sbt +publishLocal + - name: Check website build process + run: sbt docs/clean; sbt docs/buildWebsite + lint: + name: Lint + runs-on: ubuntu-latest + continue-on-error: false + steps: + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 + with: + distribution: corretto + java-version: '17' + check-latest: true + - name: Setup SBT + uses: sbt/setup-sbt@v1 + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Check if the site workflow is up to date + run: sbt ciCheckGithubWorkflow + - name: Lint + run: sbt lint + test: + name: Test + runs-on: ubuntu-latest + continue-on-error: false strategy: + fail-fast: false matrix: - os: [ubuntu-latest] - scala: [2.13.15] - java: [temurin@11] - runs-on: ${{ matrix.os }} + java: + - '11' + - '17' + - '21' steps: - - name: Checkout current branch (full) - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Java (temurin@11) - if: matrix.java == 'temurin@11' - uses: actions/setup-java@v4 - with: - 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: Setup sbt - uses: sbt/setup-sbt@v1 - - - name: Download target directories (3.3.4) - uses: actions/download-artifact@v4 - with: - name: target-${{ matrix.os }}-3.3.4-${{ matrix.java }} - - - name: Inflate target directories (3.3.4) - run: | - tar xf targets.tar - rm targets.tar - - - name: Download target directories (2.13.15) - uses: actions/download-artifact@v4 - with: - name: target-${{ matrix.os }}-2.13.15-${{ matrix.java }} - - - name: Inflate target directories (2.13.15) - run: | - tar xf targets.tar - rm targets.tar - - - name: Download target directories (2.12.20) - uses: actions/download-artifact@v4 - with: - name: target-${{ matrix.os }}-2.12.20-${{ matrix.java }} - - - name: Inflate target directories (2.12.20) - run: | - tar xf targets.tar - rm targets.tar + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 + with: + distribution: corretto + java-version: ${{ matrix.java }} + check-latest: true + - name: Setup SBT + uses: sbt/setup-sbt@v1 + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Test + run: sbt +test + update-readme: + name: Update README + runs-on: ubuntu-latest + continue-on-error: false + if: ${{ github.event_name == 'push' }} + steps: + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 + with: + distribution: corretto + java-version: '17' + check-latest: true + - name: Setup SBT + uses: sbt/setup-sbt@v1 + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Generate Readme + run: sbt docs/generateReadme + - name: Commit Changes + run: | + git config --local user.email "zio-assistant[bot]@users.noreply.github.com" + git config --local user.name "ZIO Assistant" + git add README.md + git commit -m "Update README.md" || echo "No changes to commit" + - name: Generate Token + id: generate-token + uses: zio/generate-github-app-token@v1.0.0 + with: + app_id: ${{ secrets.APP_ID }} + app_private_key: ${{ secrets.APP_PRIVATE_KEY }} + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@v7 + with: + body: |- + Autogenerated changes after running the `sbt docs/generateReadme` command of the [zio-sbt-website](https://zio.dev/zio-sbt) plugin. - - name: Publish project - env: - PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} - PGP_SECRET: ${{ secrets.PGP_SECRET }} - SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} - SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} - run: sbt ci-release + I will automatically update the README.md file whenever there is new change for README.md, e.g. + - After each release, I will update the version in the installation section. + - After any changes to the "docs/index.md" file, I will update the README.md file accordingly. + branch: zio-sbt-website/update-readme + commit-message: Update README.md + token: ${{ steps.generate-token.outputs.token }} + delete-branch: true + title: Update README.md + - name: Approve PR + if: ${{ steps.cpr.outputs.pull-request-number }} + run: gh pr review "$PR_URL" --approve + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ steps.cpr.outputs.pull-request-url }} + - name: Enable Auto-Merge + if: ${{ steps.cpr.outputs.pull-request-number }} + run: gh pr merge --auto --squash "$PR_URL" || gh pr merge --squash "$PR_URL" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ steps.cpr.outputs.pull-request-url }} + ci: + name: ci + runs-on: ubuntu-latest + continue-on-error: false + needs: + - lint + - test + - build + steps: + - name: Report Successful CI + run: echo "ci passed" + release: + name: Release + runs-on: ubuntu-latest + continue-on-error: false + needs: + - ci + if: ${{ github.event_name != 'pull_request' }} + steps: + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 + with: + distribution: corretto + java-version: '17' + check-latest: true + - name: Setup SBT + uses: sbt/setup-sbt@v1 + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Release + run: sbt ci-release + env: + PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} + PGP_SECRET: ${{ secrets.PGP_SECRET }} + SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + release-docs: + name: Release Docs + runs-on: ubuntu-latest + continue-on-error: false + needs: + - release + if: ${{ ((github.event_name == 'release') && (github.event.action == 'published')) || (github.event_name == 'workflow_dispatch') }} + steps: + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 + with: + distribution: corretto + java-version: '17' + check-latest: true + - name: Setup SBT + uses: sbt/setup-sbt@v1 + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Setup NodeJs + uses: actions/setup-node@v4 + with: + node-version: 16.x + registry-url: https://registry.npmjs.org + - name: Publish Docs to NPM Registry + run: sbt docs/publishToNpm + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + notify-docs-release: + name: Notify Docs Release + runs-on: ubuntu-latest + continue-on-error: false + needs: + - release-docs + if: ${{ (github.event_name == 'release') && (github.event.action == 'published') }} + steps: + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: notify the main repo about the new release of docs package + run: | + PACKAGE_NAME=$(cat docs/package.json | grep '"name"' | awk -F'"' '{print $4}') + PACKAGE_VERSION=$(npm view $PACKAGE_NAME version) + curl -L \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: token ${{ secrets.PAT_TOKEN }}"\ + https://api.github.com/repos/zio/zio/dispatches \ + -d '{ + "event_type":"update-docs", + "client_payload":{ + "package_name":"'"${PACKAGE_NAME}"'", + "package_version": "'"${PACKAGE_VERSION}"'" + } + }' diff --git a/build.sbt b/build.sbt index d0ec9acd..9fc44efc 100644 --- a/build.sbt +++ b/build.sbt @@ -52,7 +52,7 @@ inThisBuild( publishTo := sonatypePublishToBundle.value addCommandAlias("fmt", "all scalafmtSbt scalafmt test:scalafmt") -addCommandAlias("check", "all scalafmtSbtCheck scalafmtCheck test:scalafmtCheck") +addCommandAlias("lint", "all scalafmtSbtCheck scalafmtCheck test:scalafmtCheck") addCommandAlias("validate", "check" + allScala.map(v => s"++${v}! test").mkString(";", ";", "")) lazy val root = project diff --git a/project/build.properties b/project/build.properties index e88a0d81..73df629a 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.10.6 +sbt.version=1.10.7 diff --git a/project/plugins.sbt b/project/plugins.sbt index 50e1f518..b382b2df 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,7 +1,9 @@ addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.3") -addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.9.0") +addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.9.2") addSbtPlugin("com.github.sbt" % "sbt-github-actions" % "0.24.0") -addSbtPlugin("dev.zio" % "zio-sbt-website" % "0.4.0-alpha.28") +addSbtPlugin("dev.zio" % "zio-sbt-ecosystem" % "0.4.0-alpha.30") +addSbtPlugin("dev.zio" % "zio-sbt-ci" % "0.4.0-alpha.30") +addSbtPlugin("dev.zio" % "zio-sbt-website" % "0.4.0-alpha.30") addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.4") resolvers ++= Resolver.sonatypeOssRepos("public")