193 lines
7.8 KiB
YAML
193 lines
7.8 KiB
YAML
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@v4
|
||
- 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@v7
|
||
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@v4
|
||
with:
|
||
ref: ${{ steps.getbranchinfo.outputs.branchname }}
|
||
- name: Set up JDK
|
||
uses: actions/setup-java@v4
|
||
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@v4
|
||
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@v4
|
||
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@v4
|
||
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@v4
|
||
- name: Set up JDK
|
||
uses: actions/setup-java@v4
|
||
with:
|
||
distribution: microsoft
|
||
java-version: 25
|
||
cache: 'gradle'
|
||
- name: Checkout wiki
|
||
uses: actions/checkout@v4
|
||
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
|