diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index dc49cc9e..835d66ee 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -5,7 +5,7 @@ on: - 'dev/**' - 'exp/**' paths: - - "**.gradle" + - "*.gradle" - "gradle.properties" - "src/**" - "versions/**" @@ -16,94 +16,93 @@ on: pull_request: jobs: - build: + dev-build: if: ${{ github.event_name == 'push' && !startsWith(github.event.ref, 'refs/tags/') && contains(github.event.head_commit.message, '[build skip]') == false }} - strategy: - matrix: - java: [ 17 ] - os: [ ubuntu-latest ] - runs-on: ${{ matrix.os }} + uses: ./.github/workflows/build.yml + secrets: inherit + with: + release: false + release: + if: ${{ github.event_name == 'release' }} + uses: ./.github/workflows/build.yml + secrets: inherit + with: + release: true + publish: + if: ${{ jobs.dev-build.result == 'success' || jobs.dev-build.result == 'skipped' || jobs.release.result == 'success' || jobs.release.result == 'skipped'}} + needs: + - dev-build + - release + runs-on: ubuntu-latest + # Allow the mod publish step to add asserts to release + # https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token + permissions: + contents: write steps: - name: Checkout the sources uses: actions/checkout@v4 with: fetch-depth: 0 - - - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v4 - with: - distribution: 'adopt' - java-version: ${{ matrix.java }} - - - name: Cache Gradle packages - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ./.gradle/loom-caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} - - - name: Get short commit sha - id: get_short_sha - run: | - short_sha=$(echo ${GITHUB_SHA} | cut -c1-7) - echo "short_sha=$short_sha" >> $GITHUB_OUTPUT - - - name: Get commit count - id: get_commit_count - run: | - commit_count=$(git log | grep -e '^commit [a-zA-Z0-9]*' | wc -l) - echo "commit_count=$commit_count" >> $GITHUB_OUTPUT - - - name: Read Properties mod info - id: mod_info - uses: christian-draeger/read-properties@1.1.1 + - name: Download build artifacts + uses: actions/download-artifact@v4 with: - path: gradle.properties - properties: 'mod_name mod_version' - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Preprocess sources - env: - BUILD_TYPE: "BETA" - run: ./gradlew preprocessResources --stacktrace - - - name: Publish Maven with Gradle - env: - BUILD_TYPE: "BETA" - MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} - MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }} - SIGNING_PGP_KEY: ${{ secrets.SIGNING_PGP_KEY }} - run: ./gradlew build publish -x test --stacktrace - - - name: Upload assets to GitHub Action - uses: actions/upload-artifact@v4 - with: - name: ${{ steps.mod_info.outputs.mod_name }} ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_commit_count.outputs.commit_count }}+${{ steps.get_short_sha.outputs.short_sha }} - path: | - LICENSE - fabricWrapper/build/libs/*.jar - fabricWrapper/build/tmp/submods/META-INF/jars/*.jar - - - name: Create Github release - if: contains(github.event.head_commit.message, '[publish skip]') == false && contains(github.event.ref, 'refs/heads/exp') == false - uses: softprops/action-gh-release@v1 + name: build-artifacts + path: build-artifacts + - name: Publish Minecraft Mods + uses: Kir-Antipov/mc-publish@v3.3 with: - prerelease: true +# modrinth-id: mv1zH6ln +# modrinth-token: ${{ secrets.MODRINTH_API_TOKEN }} +# curseforge-id: 576459 +# curseforge-token: ${{ secrets.CF_API_TOKEN }} + github-tag: ${{ github.ref_name }}.${{ steps.get_commit_count.outputs.commit_count }} + github-token: ${{ secrets.GITHUB_TOKEN }} files: | - LICENSE - fabricWrapper/build/libs/*.jar - fabricWrapper/build/tmp/submods/META-INF/jars/*.jar - name: "[CI#${{ github.run_number }}]${{ steps.mod_info.outputs.mod_name }} ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_commit_count.outputs.commit_count }}+${{ steps.get_short_sha.outputs.short_sha }}" - tag_name: "${{ github.ref_name }}.${{ steps.get_commit_count.outputs.commit_count }}" - target_commitish: ${{ github.event.ref }} - generate_release_notes: true + magiclib-wrapper/fabric/release/build/libs/!(*-@(dev|sources|javadoc)).jar + magiclib-wrapper/fabric/release/build/tmp/submods/META-INF/jars/!(*-@(dev|sources|javadoc)).jar + name: '[CI#${{ github.run_number }}]${{ steps.mod_info.outputs.mod_name }} ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_git_info.outputs.commit_count }}+${{ steps.get_git_info.outputs.short_sha }}' + version: ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_commit_count.outputs.commit_count }}+${{ steps.get_short_sha.outputs.short_sha }} + version-type: release + github-generate-changelog: true + loaders: | + fabric + quilt + game-versions: | + 1.14.4 + 1.15.2 + 1.16.5 + 1.17.1 + 1.18.2 + 1.19.2 + 1.19.3 + 1.19.4 + 1.20.1 + 1.20.2 + 1.20.4 + game-version-filter: any + java: | + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + dependencies: | + carpet(optional) + malilib(optional) + retry-attempts: 2 + retry-delay: 10000 - publish: - if: ${{ github.event_name == 'release' }} + publish-legacy: + if: false strategy: matrix: java: [ 17 ] diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..58a674b8 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,63 @@ +name: step.build +on: + workflow_call: + inputs: + release: + type: boolean + required: false + default: false +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout the sources + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: 21 + - name: Cache gradle files + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + ./.gradle/loom-cache + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle', '**/gradle.properties', '**/*.accesswidener', 'settings.json') }} + restore-keys: | + ${{ runner.os }}-gradle- + - name: Get git info + id: get_git_info + run: | + short_sha=$(echo ${GITHUB_SHA} | cut -c1-7) + commit_count=$(git log | grep -e '^commit [a-zA-Z0-9]*' | wc -l) + echo "short_sha=$short_sha" >> $GITHUB_OUTPUT + echo "commit_count=$commit_count" >> $GITHUB_OUTPUT + - name: Read Properties mod info + id: mod_info + uses: christian-draeger/read-properties@1.1.1 + with: + path: gradle.properties + properties: 'mod.name mod.version' + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Build with gradle + run: ./gradlew build + env: + BUILD_TYPE: ${{ inputs.release == true && 'RELEASE' || 'BETA' }} + - name: Publish Maven with Gradle + run: ./gradlew publish + env: + BUILD_TYPE: ${{ inputs.release == true && 'RELEASE' || 'BETA' }} + MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} + MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }} + SIGNING_PGP_KEY: ${{ secrets.SIGNING_PGP_KEY }} + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: build-artifacts + path: | + */**/build/libs/