name: Publish Release on: release: types: [published] jobs: Get-Properties: runs-on: ubuntu-latest outputs: release-type: ${{ steps.type.outputs.release-type }} carpet-version: ${{ steps.properties.outputs.mod_version }} minecraft-version: ${{ steps.properties.outputs.minecraft_version }} curse-versions: ${{ steps.properties.outputs.release-curse-versions }} matrix-exclude-branch: ${{ steps.processmatrix.outputs.matrix-to-exclude }} extra-branch-name: ${{ steps.properties.outputs.release-extra-branch-name }} extra-branch-curse-version: ${{ steps.properties.outputs.release-extra-curse-version }} steps: - name: Checkout the sources uses: actions/checkout@v7 - name: Determine release type id: type run: | if ${{ github.event.release.prerelease }}; then echo "release-type=beta" >> $GITHUB_OUTPUT else echo "release-type=release" >> $GITHUB_OUTPUT fi - name: Read relevant fields from gradle.properties id: properties run: | # From christian-draeger/read-properties, using the action makes it extremely messy until christian-draeger/read-properties#2 path='./gradle.properties' for property in mod_version minecraft_version release-curse-versions release-extra-branch release-extra-branch-name release-extra-curse-version do result=$(sed -n "/^[[:space:]]*$property[[:space:]]*=[[:space:]]*/s/^[[:space:]]*$property[[:space:]]*=[[:space:]]*//p" "$path") echo "$property: $result" echo "$property=$result" >> $GITHUB_OUTPUT done - name: Process property for matrix id: processmatrix run: | if ! ${{ steps.properties.outputs.release-extra-branch }}; then echo "matrix-to-exclude=Snapshots" >> $GITHUB_OUTPUT fi - uses: actions/github-script@v9 env: READ_VERSION: ${{ steps.properties.outputs.mod_version }} with: script: | const { READ_VERSION } = process.env; console.log('Read version is: ' + READ_VERSION); let releases = (await github.rest.repos.listReleases({ owner: context.repo.owner, repo: context.repo.repo })).data; console.log('Previous release was: ' + releases[1].name); for (let release of releases.slice(1)) { if (release.name.includes(' ' + READ_VERSION + ' ')) core.setFailed('Version number is the same as a previous release!') } Build-And-Publish: runs-on: ubuntu-latest needs: [Get-Properties] strategy: matrix: branch: [Release, Snapshots] exclude: - branch: ${{ needs.Get-Properties.outputs.matrix-exclude-branch }} steps: - name: Get info from branch to run id: getbranchinfo run: | if ${{ matrix.branch == 'Snapshots'}}; then echo "branchname=${{ needs.Get-Properties.outputs.extra-branch-name }}" >> $GITHUB_OUTPUT echo "version=${{ needs.Get-Properties.outputs.extra-branch-curse-version }}" >> $GITHUB_OUTPUT echo "curse-versions=${{ needs.Get-Properties.outputs.extra-branch-curse-version }}" >> $GITHUB_OUTPUT else echo "version=${{ needs.Get-Properties.outputs.minecraft-version }}" >> $GITHUB_OUTPUT echo "curse-versions=${{ needs.Get-Properties.outputs.curse-versions }}" >> $GITHUB_OUTPUT fi - name: Checkout the sources uses: actions/checkout@v7 with: ref: ${{ steps.getbranchinfo.outputs.branchname }} - name: Set up JDK uses: actions/setup-java@v5 with: distribution: microsoft java-version: 25 cache: 'gradle' - name: Grant execute permission to gradlew run: chmod +x gradlew - name: Build with Gradle run: ./gradlew build - name: Find correct JAR id: findjar run: | output="$(find build/libs/ ! -name "*-dev.jar" ! -name "*-sources.jar" -type f -printf "%f\n")" echo "jarname=$output" >> $GITHUB_OUTPUT - name: Save build artifacts in the action uses: actions/upload-artifact@v7 with: name: Artifacts for ${{ matrix.branch }} path: build/libs - name: Upload to the Github release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} asset_path: build/libs/${{ steps.findjar.outputs.jarname }} asset_name: ${{ steps.findjar.outputs.jarname }} asset_content_type: application/java-archive - name: Upload to Curseforge uses: itsmeow/curseforge-upload@v3.1.2 with: token: ${{ secrets.CF_API_TOKEN }} project_id: 349239 game_endpoint: minecraft file_path: build/libs/${{ steps.findjar.outputs.jarname }} changelog_type: markdown changelog: ${{ github.event.release.body }} display_name: Carpet v${{ needs.Get-Properties.outputs.carpet-version }} for ${{ steps.getbranchinfo.outputs.version }} game_versions: 7499,4458,${{ steps.getbranchinfo.outputs.curse-versions }} #Fabric,Java 8,[version (s) for the branch] release_type: ${{ needs.Get-Properties.outputs.release-type }} - name: Ask Gradle to publish run: ./gradlew publish - name: Save publish folder in action's artifacts # Remove when automated uses: actions/upload-artifact@v7 with: name: Maven publishing artifacts for ${{ matrix.branch }} path: publish/carpet/fabric-carpet/ Publish-To-Discord: runs-on: ubuntu-latest needs: [Build-And-Publish] steps: - name: Publish to discord uses: Crec0/announce-n-crosspost@v1 with: bot-token: ${{ secrets.DISCORD_BOT_TOKEN }} channel: '897934715200339999' content: | **${{ github.event.release.name }}** has been released! ${{ github.event.release.body }} ​ Get it on Github Releases: <${{ github.event.release.html_url }}> Or on CurseForge Merge-Scarpet-Docs: runs-on: ubuntu-latest steps: - name: Checkout the sources uses: actions/checkout@v7 with: ref: master - name: Merge docs run: | ./mergedoc.sh - name: Commit merged docs continue-on-error: true run: | git config --global user.name 'github-actions[bot]' git config --global user.email 'github-actions[bot]@users.noreply.github.com' git commit -am "Merge docs for '${{ github.event.release.name }}'" || exit 0 git push Update-Rules-Wiki: runs-on: ubuntu-latest steps: - name: Checkout Carpet sources uses: actions/checkout@v7 - name: Set up JDK uses: actions/setup-java@v5 with: distribution: microsoft java-version: 25 cache: 'gradle' - name: Checkout wiki uses: actions/checkout@v7 with: repository: ${{github.repository}}.wiki path: wiki - name: Run rule printer into the wiki page run: | chmod +x gradlew ./gradlew runServer --args="-- -carpetDumpRules -dumpPath ../wiki/Current-Available-Settings.md" - name: Commit updated wiki page continue-on-error: true run: | cd wiki git config --global user.name 'github-actions-bot' # Releases don't have valid commiter info :( git config --global user.email 'github-actions[bot]@users.noreply.github.com' git commit -am "Update wiki for '${{ github.event.release.name }}'" || exit 0 git push