diff --git a/.github/advanced-issue-labeler.yml b/.github/advanced-issue-labeler.yml new file mode 100644 index 0000000..5c37928 --- /dev/null +++ b/.github/advanced-issue-labeler.yml @@ -0,0 +1,22 @@ +policy: + - template: [report-a-bug.yml] + section: + - id: [minecraftVersion] + block-list: [other] + label: + - name: Minecraft 1.21.4 + keys: ['1.21.4'] + - name: Minecraft 1.21.1 + keys: ['1.21.1 (LTS)'] + - name: Minecraft 1.20.1 + keys: ['1.20.1 (LTS)'] + - name: EOL + keys: ['Other (specify below)'] + - id: [modLoader] + label: + - name: NeoForge + keys: ['NeoForge'] + - name: Fabric + keys: ['Fabric'] + - name: 'Forge' + keys: ['Forge'] \ No newline at end of file diff --git a/.github/workflows/label-issues.yaml b/.github/workflows/label-issues.yaml new file mode 100644 index 0000000..6abd8ba --- /dev/null +++ b/.github/workflows/label-issues.yaml @@ -0,0 +1,28 @@ +name: Label Issues +on: + issues: + types: [ opened ] +jobs: + label-component: + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + strategy: + matrix: + template: [ report-a-bug.yml ] + steps: + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 + + - name: Parse issue form + uses: TwelveIterations/github-issue-parser@main + id: issue-parser + with: + template-path: https://raw.githubusercontent.com/TwelveIterationMods/.github/refs/heads/main/.github/ISSUE_TEMPLATE/${{ matrix.template }} + + - name: Set labels based on component field + uses: redhat-plumbers-in-action/advanced-issue-labeler@d498805e5c7c0658e336948b3363480bcfd68da6 + with: + issue-form: ${{ steps.issue-parser.outputs.jsonString }} + template: ${{ matrix.template }} + token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/manage-labels.yaml b/.github/workflows/manage-labels.yaml new file mode 100644 index 0000000..2c7026a --- /dev/null +++ b/.github/workflows/manage-labels.yaml @@ -0,0 +1,30 @@ +name: manage-labels +on: + workflow_dispatch: + inputs: + dry: + description: 'Dry run (no changes, log only)' + required: false + default: true + type: boolean + remove_missing: + description: 'Remove labels not present in the source data' + required: false + default: false + type: boolean +jobs: + manage-labels: + permissions: + contents: read + issues: write + runs-on: ubuntu-latest + name: manage-labels + steps: + - uses: actions/checkout@v2 + - uses: TwelveIterations/manage-labels@main + with: + dry: ${{ inputs.dry }} + remove_missing: ${{ inputs.remove_missing }} + source: https://raw.githubusercontent.com/TwelveIterationMods/.github/refs/heads/main/labels.yaml + env: + GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index c66e3b3..b59bc2d 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -2,15 +2,21 @@ name: publish-release on: workflow_dispatch: inputs: - bump: - description: 'The bump in version for this release' + forge: + description: 'Forge' required: true - type: choice - default: patch - options: - - major - - minor - - patch + type: boolean + default: true + fabric: + description: 'Fabric' + required: true + type: boolean + default: true + neoforge: + description: 'NeoForge' + required: true + type: boolean + default: true jobs: create-release: @@ -18,9 +24,11 @@ jobs: outputs: ref: v${{ steps.bump-version.outputs.version }} version: ${{ steps.bump-version.outputs.version }} + build-matrix: ${{ steps.set-build-matrix.outputs.result }} + publish-matrix: ${{ steps.set-publish-matrix.outputs.result }} steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Extracting version from properties shell: bash run: echo "version=$(cat gradle.properties | grep -w "\bversion" | cut -d= -f2)" >> $GITHUB_OUTPUT @@ -29,7 +37,7 @@ jobs: uses: TwelveIterationMods/bump-version@v1 with: version: ${{ steps.extract-version.outputs.version }} - bump: ${{ inputs.bump }} + bump: patch id: bump-version - name: Updating version properties run: | @@ -43,36 +51,136 @@ jobs: shell: bash env: BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + - name: Preparing build matrix + id: set-build-matrix + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + const settingsGradle = fs.readFileSync('settings.gradle', 'utf8'); + const includePattern = /^(?!\s*\/\/)\s*include\s*\(\s*(['"]([^'"]+)['"](?:,\s*['"]([^'"]+)['"])*\s*)\)/gm; + const includes = [...settingsGradle.matchAll(includePattern)].flatMap(match => match[0].match(/['"]([^'"]+)['"]/g).map(item => item.replace(/['"]/g, ''))); + const includeFabric = includes.includes('fabric') && ${{inputs.fabric}}; + const includeForge = includes.includes('forge') && ${{inputs.forge}}; + const includeNeoForge = includes.includes('neoforge') && ${{inputs.neoforge}}; + return { + loader: [includeFabric ? 'fabric' : false, includeForge ? 'forge' : false, includeNeoForge ? 'neoforge' : false].filter(Boolean), + } + - name: Preparing publish matrix + id: set-publish-matrix + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + const settingsGradle = fs.readFileSync('settings.gradle', 'utf8'); + const includePattern = /^(?!\s*\/\/)\s*include\s*\(\s*(['"]([^'"]+)['"](?:,\s*['"]([^'"]+)['"])*\s*)\)/gm; + const includes = [...settingsGradle.matchAll(includePattern)].flatMap(match => match[0].match(/['"]([^'"]+)['"]/g).map(item => item.replace(/['"]/g, ''))); + const includeFabric = includes.includes('fabric') && ${{inputs.fabric}}; + const includeForge = includes.includes('forge') && ${{inputs.forge}}; + const includeNeoForge = includes.includes('neoforge') && ${{inputs.neoforge}}; + return { + loader: ['common', includeFabric ? 'fabric' : false, includeForge ? 'forge' : false, includeNeoForge ? 'neoforge' : false].filter(Boolean), + site: ['curseforge', 'modrinth', 'publish'], + exclude: [ + {loader: 'common', site: 'curseforge'}, + {loader: 'common', site: 'modrinth'} + ] + } + build-common: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + ref: ${{ needs.create-release.outputs.ref }} + - name: Validate gradle wrapper + uses: gradle/actions/wrapper-validation@v3 + - name: Setup JDK + uses: actions/setup-java@v4 + with: + java-version: 21 + distribution: temurin + cache: 'gradle' + - name: Make gradle wrapper executable + run: chmod +x ./gradlew + - name: Build common artifact + run: ./gradlew :common:build '-Pversion=${{needs.create-release.outputs.version}}' + - name: Upload common artifact + uses: actions/upload-artifact@v4 + with: + name: common-artifact + path: common/build + needs: create-release + build-release: + runs-on: ubuntu-latest + strategy: + matrix: ${{fromJson(needs.create-release.outputs.build-matrix)}} + fail-fast: false + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + ref: ${{ needs.create-release.outputs.ref }} + - name: Validate gradle wrapper + uses: gradle/actions/wrapper-validation@v3 + - name: Setup JDK + uses: actions/setup-java@v4 + with: + java-version: 21 + distribution: temurin + cache: 'gradle' + - name: Make gradle wrapper executable + run: chmod +x ./gradlew + - name: Download common artifact + uses: actions/download-artifact@v4 + with: + name: common-artifact + path: common/build + - name: Build ${{ matrix.loader }} artifact + run: ./gradlew :${{ matrix.loader }}:build '-Pversion=${{needs.create-release.outputs.version}}' + - name: Upload ${{ matrix.loader }} artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.loader }}-artifact + path: ${{ matrix.loader }}/build + needs: + - create-release + - build-common publish-release: runs-on: ubuntu-latest - permissions: - packages: write strategy: - matrix: - loader: [ common, fabric, forge, neoforge ] - site: [ curseforge, modrinth, publish ] - exclude: - - loader: common - site: curseforge - - loader: common - site: modrinth + matrix: ${{fromJson(needs.create-release.outputs.publish-matrix)}} + fail-fast: false steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ needs.create-release.outputs.ref }} + - name: Download ${{ matrix.loader }} artifact + uses: actions/download-artifact@v4 + with: + name: ${{ matrix.loader }}-artifact + path: ${{ matrix.loader }}/build - name: Validate gradle wrapper uses: gradle/actions/wrapper-validation@v3 - name: Setup JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 21 distribution: temurin + cache: 'gradle' - name: Make gradle wrapper executable run: chmod +x ./gradlew + - name: Check current artifact hash TODO + run: sha1sum ${{ matrix.loader }}/build/libs/* - name: Publish run: ./gradlew :${{ matrix.loader }}:${{ matrix.site }} '-Pversion=${{needs.create-release.outputs.version}}' '-PtwelveIterationsNexusUsername=${{ secrets.NEXUS_USER }}' '-PtwelveIterationsNexusPassword=${{ secrets.NEXUS_PASSWORD }}' env: CURSEFORGE_TOKEN: ${{secrets.CURSEFORGE_TOKEN}} MODRINTH_TOKEN: ${{secrets.MODRINTH_TOKEN}} - needs: create-release \ No newline at end of file + - name: Check new artifact hash TODO + run: sha1sum ${{ matrix.loader }}/build/libs/* + needs: + - create-release + - build-common + - build-release \ No newline at end of file diff --git a/.github/workflows/publish-snapshot.yml b/.github/workflows/publish-snapshot.yml index 9cae1f5..ef34a81 100644 --- a/.github/workflows/publish-snapshot.yml +++ b/.github/workflows/publish-snapshot.yml @@ -5,21 +5,41 @@ on: - '**' jobs: + prepare-matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.result }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Preparing matrix + id: set-matrix + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + const settingsGradle = fs.readFileSync('settings.gradle', 'utf8'); + const includePattern = /^(?!\s*\/\/)\s*include\s*\(\s*(['"]([^'"]+)['"](?:,\s*['"]([^'"]+)['"])*\s*)\)/gm; + const includes = [...settingsGradle.matchAll(includePattern)] + .flatMap(match => match[0].match(/['"]([^'"]+)['"]/g).map(item => item.replace(/['"]/g, ''))); + const includeFabric = includes.includes('fabric'); + const includeForge = includes.includes('forge'); + const includeNeoForge = includes.includes('neoforge'); + return { + loader: ['common', includeFabric ? 'fabric' : false, includeForge ? 'forge' : false, includeNeoForge ? 'neoforge' : false].filter(Boolean), + }; publish-snapshot: runs-on: ubuntu-latest - permissions: - packages: write strategy: - matrix: - loader: [common, fabric, forge, neoforge] + matrix: ${{fromJson(needs.prepare-matrix.outputs.matrix)}} fail-fast: false steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Validate gradle wrapper uses: gradle/actions/wrapper-validation@v3 - name: Setup JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 21 distribution: temurin @@ -36,4 +56,5 @@ jobs: bump: patch id: bump-version - name: Publish - run: ./gradlew :${{ matrix.loader }}:publish '-Pversion=${{ steps.bump-version.outputs.version }}-SNAPSHOT' '-PtwelveIterationsNexusUsername=${{ secrets.NEXUS_USER }}' '-PtwelveIterationsNexusPassword=${{ secrets.NEXUS_PASSWORD }}' \ No newline at end of file + run: ./gradlew :${{ matrix.loader }}:publish '-Pversion=${{ steps.bump-version.outputs.version }}-SNAPSHOT' '-PtwelveIterationsNexusUsername=${{ secrets.NEXUS_USER }}' '-PtwelveIterationsNexusPassword=${{ secrets.NEXUS_PASSWORD }}' + needs: prepare-matrix \ No newline at end of file diff --git a/build.gradle b/build.gradle index 98c4692..7ce200a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.7-SNAPSHOT' apply(false) + id 'fabric-loom' version '1.9-SNAPSHOT' apply(false) id 'net.neoforged.moddev' version '0.1.110' apply(false) id 'net.darkhax.curseforgegradle' version '1.1.18' apply(false) id "com.modrinth.minotaur" version "2.+" apply(false) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0d18421..e48eca5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index bce959e..6c262f9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -43,7 +43,4 @@ plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' } -include("common") -include("fabric") -include("neoforge") -include("forge") +include('common', 'fabric', 'neoforge', 'forge') \ No newline at end of file