From f5fe903bfc86a48c3c21f1e7861835b7fae5de3b Mon Sep 17 00:00:00 2001 From: Justin Brooks Date: Sun, 23 Nov 2025 08:55:46 -0500 Subject: [PATCH] Migrate to github actions --- .circleci/config.yml | 137 ----------------------------------- .github/workflows/ci.yml | 59 +++++++++++++++ .github/workflows/deploy.yml | 64 ++++++++++++++++ 3 files changed, 123 insertions(+), 137 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/deploy.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 51f695a3..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,137 +0,0 @@ -version: 2.1 -orbs: - gradle: circleci/gradle@3.0.0 - win: circleci/windows@5.0 -_defaults: &defaults - working_directory: ~/code - environment: - JVM_OPTS: -Xmx3200m -_gradle_checksum: &gradle_checksum - name: Generate Cache Checksum - command: >- - find . -name 'build.gradle' | sort | xargs cat | shasum | awk '{print - $1}' > /tmp/gradle_cache_seed -_gradle_checksum_windows: &gradle_checksum_windows - name: Generate Cache Checksum (Windows) - command: >- - Get-ChildItem -Filter *.gradle* -Recurse | Get-FileHash | Out-File -FilePath ".circleci/gradle_cache_seed" -jobs: - build-linux: - docker: - - image: cimg/openjdk:17.0.9@sha256:a36da58bce6d1b6c43984970acec45546e746e628969b1261d6700367aa6e8dc - resource_class: large - <<: *defaults - steps: - - checkout - # We can't use gradle/with_cache because it does not include the .konan dir where there kotlin native compiler lives - - run: - <<: *gradle_checksum - - restore_cache: - key: >- - gradle-{{ checksum "/tmp/gradle_cache_seed" }}-{{ checksum - ".circleci/config.yml" }}-linux - - run: - name: Build - command: ./gradlew build - - gradle/collect_test_results: - test_results_path: build/test-results - reports_path: build/reports - - run: - name: Deploy - command: | - if [ "${CIRCLE_BRANCH}" == "main" ]; then - echo "$MAVEN_CENTRAL_SEC_RING" | base64 -d > $HOME/secring.gpg - gpg --import --batch $HOME/secring.gpg - ./gradlew dokkaJavadocCommonJar - ./gradlew publish -PsonatypeUsername="$SONATYPE_USERNAME" -PsonatypePassword="$SONATYPE_PASSWORD" -Psigning.keyId="$MAVEN_CENTRAL_KEY_ID" -Psigning.password="$MAVEN_CENTRAL_KEY_PASSPHRASE" -Psigning.secretKeyRingFile=$HOME/secring.gpg --no-parallel - fi - - save_cache: - paths: - - ~/.gradle/caches - - ~/.gradle/wrapper - - ~/.konan - key: >- - gradle-{{ checksum "/tmp/gradle_cache_seed" }}-{{ checksum - ".circleci/config.yml" }}-linux - build-macos: - macos: - xcode: "14.1.0" - resource_class: macos.m1.medium.gen1 - <<: *defaults - steps: - - checkout - # We can't use gradle/with_cache because it incorrectly uses the same cache key from build-linux - - run: - <<: *gradle_checksum - - restore_cache: - key: >- - gradle-{{ checksum "/tmp/gradle_cache_seed" }}-{{ checksum - ".circleci/config.yml" }}-macos - - run: - name: Build Apple - command: ./gradlew buildApple - - run: - name: Deploy - command: | - if [ "${CIRCLE_BRANCH}" == "main" ]; then - echo "$MAVEN_CENTRAL_SEC_RING" | base64 -D -o $HOME/secring.gpg - ./gradlew dokkaJavadocCommonJar - ./gradlew publishApple -PsonatypeUsername="$SONATYPE_USERNAME" -PsonatypePassword="$SONATYPE_PASSWORD" -Psigning.keyId="$MAVEN_CENTRAL_KEY_ID" -Psigning.password="$MAVEN_CENTRAL_KEY_PASSPHRASE" -Psigning.secretKeyRingFile=$HOME/secring.gpg --no-parallel - fi - - save_cache: - paths: - - ~/.gradle/caches - - ~/.gradle/wrapper - - ~/.konan - key: >- - gradle-{{ checksum "/tmp/gradle_cache_seed" }}-{{ checksum - ".circleci/config.yml" }}-macos - build-windows: - executor: - name: win/default - size: large - steps: - - checkout - - run: - <<: *gradle_checksum_windows - - restore_cache: - key: >- - gradle-{{ checksum ".circleci/gradle_cache_seed" }}-{{ checksum - ".circleci/config.yml" }}-windows - - run: - command: ./gradlew --no-daemon build -x wasmJsNodeTest -x wasmWasiNodeTest - shell: bash.exe - - save_cache: - paths: - - ~/.gradle/caches - - ~/.gradle/wrapper - - ~/.konan - key: >- - gradle-{{ checksum ".circleci/gradle_cache_seed" }}-{{ checksum - ".circleci/config.yml" }}-windows -workflows: - version: 2 - build: - jobs: - - build-linux: - filters: - branches: - ignore: main - - build-macos: - filters: - branches: - ignore: main - - build-windows: - filters: - branches: - ignore: main - - build-linux: - context: opensource-maven - filters: - branches: - only: main - - build-macos: - context: opensource-maven - filters: - branches: - only: main diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..f722e68b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,59 @@ +name: CI + +on: + pull_request: + branches: [ main ] + push: + workflow_dispatch: + +jobs: + build: + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + include: + - os: ubuntu-latest + build-command: ./gradlew build + - os: macos-latest + build-command: ./gradlew buildApple + - os: windows-latest + build-command: ./gradlew --no-daemon build -x wasmJsNodeTest -x wasmWasiNodeTest + + runs-on: ${{ matrix.os }} + + env: + JVM_OPTS: -Xmx3200m + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Set up JDK 24 + uses: actions/setup-java@v5 + with: + java-version: '24' + distribution: 'temurin' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + + - name: Build + run: ${{ matrix.build-command }} + + - name: Upload test results + uses: actions/upload-artifact@v3 + if: always() + with: + name: test-results-${{ runner.os }} + path: | + build/test-results/**/*.xml + */build/test-results/**/*.xml + + - name: Upload test reports + uses: actions/upload-artifact@v3 + if: always() + with: + name: test-reports-${{ runner.os }} + path: | + build/reports/**/* + */build/reports/**/* diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..11f738c0 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,64 @@ +name: deploy + +on: + push: + branches: [ main ] + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + + env: + JVM_OPTS: -Xmx3200m + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK 24 + uses: actions/setup-java@v4 + with: + java-version: '24' + distribution: 'temurin' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + cache-read-only: true + + - name: Build + run: ./gradlew build + + - name: Upload test results + uses: actions/upload-artifact@v3 + if: always() + with: + name: test-results-linux + path: | + build/test-results/**/*.xml + */build/test-results/**/*.xml + + - name: Setup GPG + env: + MAVEN_CENTRAL_SEC_RING: ${{ secrets.MAVEN_CENTRAL_SEC_RING }} + run: | + echo "$MAVEN_CENTRAL_SEC_RING" | base64 -d > $HOME/secring.gpg + gpg --import --batch $HOME/secring.gpg + + - name: Generate Javadoc + run: ./gradlew dokkaJavadocCommonJar + + - name: Publish to Maven Central + env: + SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + MAVEN_CENTRAL_KEY_ID: ${{ secrets.MAVEN_CENTRAL_KEY_ID }} + MAVEN_CENTRAL_KEY_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_KEY_PASSPHRASE }} + run: | + ./gradlew publish \ + -PsonatypeUsername="$SONATYPE_USERNAME" \ + -PsonatypePassword="$SONATYPE_PASSWORD" \ + -Psigning.keyId="$MAVEN_CENTRAL_KEY_ID" \ + -Psigning.password="$MAVEN_CENTRAL_KEY_PASSPHRASE" \ + -Psigning.secretKeyRingFile=$HOME/secring.gpg \ + --no-parallel