diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 32e0764b..59197890 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -27,6 +27,16 @@ on: required: false type: boolean default: false + gradle_project: + description: 'Gradle project path or name without leading colon' + required: false + type: string + default: '' + module_dir: + description: 'Module directory relative to repository root' + required: false + type: string + default: '' secrets: maven_url: description: 'Maven URL' @@ -51,6 +61,8 @@ jobs: NOT_DEV: ${{ secrets.maven_url != '' && secrets.maven_user != '' && secrets.maven_pass != '' }} CI_BUILD: ${{ inputs.ci_build }} PR_BUILD: ${{ inputs.pr_build }} + GRADLE_PROJECT: ${{ inputs.gradle_project != '' && inputs.gradle_project || format('{0}-neoforge-1.21.1', inputs.module_id) }} + MODULE_DIR: ${{ inputs.module_dir != '' && inputs.module_dir || format('module.{0}', inputs.module) }} steps: - name: checkout uses: actions/checkout@v4 @@ -79,23 +91,32 @@ jobs: uses: gradle/actions/setup-gradle@v3 - name: Build - run: ./gradlew :${{ inputs.module_id }}-neoforge-1.21.1:build + run: ./gradlew :${{ env.GRADLE_PROJECT }}:build - name: Get Version id: version + shell: bash run: | - MESSAGE=$(ls module.${{ inputs.module }}/build/libs/* | grep javadoc.jar -v | grep sources.jar -v | grep shadow.jar -v | grep slim.jar -v | awk -F '${{ inputs.mod_id }}-neoforge-|.jar' '{print $2}') - echo "version=$MESSAGE" >> $GITHUB_OUTPUT + ARTIFACT=$(find "$MODULE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' \ + ! -name '*-javadoc.jar' \ + ! -name '*-sources.jar' \ + ! -name '*-shadow.jar' \ + ! -name '*-slim.jar' | head -n 1) + FILENAME=$(basename "$ARTIFACT") + VERSION=${FILENAME#${{ inputs.mod_id }}-neoforge-} + VERSION=${VERSION%.jar} + echo "artifact=$ARTIFACT" >> $GITHUB_OUTPUT + echo "version=$VERSION" >> $GITHUB_OUTPUT - name: capture build artifacts uses: actions/upload-artifact@v4.3.3 with: name: "${{ inputs.module_id }} ${{ steps.version.outputs.version }}" - path: module.${{ inputs.module }}/build/libs/${{ inputs.mod_id }}-neoforge-${{ steps.version.outputs.version }}.jar + path: ${{ steps.version.outputs.artifact }} - name: Publish to maven if: ${{ !inputs.pr_build && env.NOT_DEV == 'true' }} - run: ./gradlew :${{ inputs.module_id }}-neoforge-1.21.1:publish + run: ./gradlew :${{ env.GRADLE_PROJECT }}:publish env: MAVEN_URL: ${{ secrets.maven_url }} MAVEN_USERNAME: ${{ secrets.maven_user }} @@ -106,24 +127,24 @@ jobs: uses: actions/upload-artifact@v4.3.3 with: name: "${{ inputs.module_id }}-deploy" - path: module.${{ inputs.module }}/build/staging-deploy/ + path: ${{ env.MODULE_DIR }}/build/staging-deploy/ - name: gametest if: ${{ inputs.ci_build && inputs.gametest }} uses: Anvil-Dev/dedicated-server-launch-test@1.21.1-neoforge with: - mod: module.${{ inputs.module }}/build/libs/${{ inputs.mod_id }}-neoforge-${{ steps.version.outputs.version }}.jar + mod: ${{ steps.version.outputs.artifact }} - name: Upload Release Jar if: ${{ !inputs.ci_build && !inputs.pr_build }} uses: softprops/action-gh-release@v0.1.15 with: files: | - module.${{ inputs.module }}/build/libs/${{ inputs.mod_id }}-neoforge-${{ steps.version.outputs.version }}.jar + ${{ steps.version.outputs.artifact }} - name: Upload MCMOD if: ${{ inputs.module == 'main' && !inputs.pr_build }} - run: ./gradlew :${{ inputs.module_id }}-neoforge-1.21.1:publishMods + run: ./gradlew :${{ env.GRADLE_PROJECT }}:publishMods env: CURSEFORGE_TOKEN: ${{ secrets.curseforge_token }} MODRINTH_TOKEN: ${{ secrets.modrinth_token }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6d4b3131..34a7d6b4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,8 +13,11 @@ on: - .github/workflows/generate-matrix.js - gradle/** - module.*/src/** + - module.sync/processor/src/** - module.*/build.gradle + - module.sync/processor/build.gradle - module.*/gradle.properties + - module.sync/processor/gradle.properties - build.gradle - gradle.properties - settings.gradle @@ -33,6 +36,22 @@ jobs: # ── Build (topological levels) ────────────────────────────────── + processor-build: + needs: [prepare] + uses: ./.github/workflows/build_and_test.yml + with: + module: sync + module_id: anvillib-sync-processor + mod_id: anvillib_sync_processor + ci_build: true + pr_build: false + gradle_project: anvillib-sync-neoforge-1.21.1:anvillib-sync-processor-neoforge-1.21.1 + module_dir: module.sync/processor + secrets: + maven_url: ${{ secrets.MAVEN_URL }} + maven_user: ${{ secrets.MAVEN_USER }} + maven_pass: ${{ secrets.MAVEN_PASS }} + build-l0: needs: [prepare] strategy: @@ -66,7 +85,7 @@ jobs: maven_pass: ${{ secrets.MAVEN_PASS }} build-l2: - needs: [prepare, build-l1] + needs: [prepare, build-l1, processor-build] strategy: matrix: ${{ fromJSON(needs.prepare.outputs.level_2) }} uses: ./.github/workflows/build_and_test.yml @@ -83,6 +102,21 @@ jobs: # ── Maven Central deploy ──────────────────────────────────────── + processor-deploy: + needs: [processor-build] + uses: ./.github/workflows/publish_maven_central.yml + with: + module: sync + module_id: anvillib-sync-processor + gradle_project: anvillib-sync-neoforge-1.21.1:anvillib-sync-processor-neoforge-1.21.1 + module_dir: module.sync/processor + secrets: + maven_central_username: ${{ secrets.MAVEN_CENTRAL_USERNAME }} + maven_central_password: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} + signing_key: ${{ secrets.SIGNING_KEY }} + signing_public_key: ${{ secrets.SIGNING_PUBLIC_KEY }} + signing_password: ${{ secrets.SIGNING_PASSWORD }} + deploy-l0: needs: [prepare, build-l0] strategy: diff --git a/.github/workflows/publish_maven_central.yml b/.github/workflows/publish_maven_central.yml index 9fe16c90..ff1d5433 100644 --- a/.github/workflows/publish_maven_central.yml +++ b/.github/workflows/publish_maven_central.yml @@ -10,6 +10,16 @@ on: description: 'Module ID to build' required: true type: string + gradle_project: + description: 'Gradle project path or name without leading colon' + required: false + type: string + default: '' + module_dir: + description: 'Module directory relative to repository root' + required: false + type: string + default: '' secrets: maven_central_username: description: 'Maven Central Username' @@ -30,6 +40,9 @@ on: jobs: publish: runs-on: ubuntu-latest + env: + GRADLE_PROJECT: ${{ inputs.gradle_project != '' && inputs.gradle_project || format('{0}-neoforge-1.21.1', inputs.module_id) }} + MODULE_DIR: ${{ inputs.module_dir != '' && inputs.module_dir || format('module.{0}', inputs.module) }} steps: - name: Checkout repository uses: actions/checkout@v4 @@ -54,10 +67,10 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.module_id }}-deploy - path: module.${{ inputs.module }}/build/staging-deploy/ + path: ${{ env.MODULE_DIR }}/build/staging-deploy/ - name: Publish to Maven Central - run: ./gradlew :${{ inputs.module_id }}-neoforge-1.21.1:jreleaserDeploy --no-configuration-cache + run: ./gradlew :${{ env.GRADLE_PROJECT }}:jreleaserDeploy --no-configuration-cache env: JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.maven_central_username }} JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.maven_central_password }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 34389044..85de2937 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -13,8 +13,11 @@ on: - .github/workflows/generate-matrix.js - gradle/** - module.*/src/** + - module.sync/processor/src/** - module.*/build.gradle + - module.sync/processor/build.gradle - module.*/gradle.properties + - module.sync/processor/gradle.properties - build.gradle - gradle.properties - settings.gradle @@ -39,6 +42,18 @@ jobs: # ── Build (topological levels) ────────────────────────────────── + processor-build: + needs: [prepare] + uses: ./.github/workflows/build_and_test.yml + with: + module: sync + module_id: anvillib-sync-processor + mod_id: anvillib_sync_processor + ci_build: true + pr_build: true + gradle_project: anvillib-sync-neoforge-1.21.1:anvillib-sync-processor-neoforge-1.21.1 + module_dir: module.sync/processor + build-l0: needs: [prepare] strategy: @@ -64,7 +79,7 @@ jobs: pr_build: true build-l2: - needs: [prepare, build-l1] + needs: [prepare, build-l1, processor-build] strategy: matrix: ${{ fromJSON(needs.prepare.outputs.level_2) }} uses: ./.github/workflows/build_and_test.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index be9ff32f..9e4e6dfe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,6 +22,22 @@ jobs: # ── Build (topological levels) ────────────────────────────────── + processor-build: + needs: [prepare] + uses: ./.github/workflows/build_and_test.yml + with: + module: sync + module_id: anvillib-sync-processor + mod_id: anvillib_sync_processor + ci_build: false + pr_build: false + gradle_project: anvillib-sync-neoforge-1.21.1:anvillib-sync-processor-neoforge-1.21.1 + module_dir: module.sync/processor + secrets: + maven_url: ${{ secrets.MAVEN_URL }} + maven_user: ${{ secrets.MAVEN_USER }} + maven_pass: ${{ secrets.MAVEN_PASS }} + build-l0: needs: [prepare] strategy: @@ -55,7 +71,7 @@ jobs: maven_pass: ${{ secrets.MAVEN_PASS }} build-l2: - needs: [prepare, build-l1] + needs: [prepare, build-l1, processor-build] strategy: matrix: ${{ fromJSON(needs.prepare.outputs.level_2) }} uses: ./.github/workflows/build_and_test.yml @@ -72,6 +88,21 @@ jobs: # ── Maven Central deploy ──────────────────────────────────────── + processor-deploy: + needs: [processor-build] + uses: ./.github/workflows/publish_maven_central.yml + with: + module: sync + module_id: anvillib-sync-processor + gradle_project: anvillib-sync-neoforge-1.21.1:anvillib-sync-processor-neoforge-1.21.1 + module_dir: module.sync/processor + secrets: + maven_central_username: ${{ secrets.MAVEN_CENTRAL_USERNAME }} + maven_central_password: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} + signing_key: ${{ secrets.SIGNING_KEY }} + signing_public_key: ${{ secrets.SIGNING_PUBLIC_KEY }} + signing_password: ${{ secrets.SIGNING_PASSWORD }} + deploy-l0: needs: [prepare, build-l0] strategy: