Skip to content

Build #239

Build #239 #239

Workflow file for this run

name: Build
run-name: "Build #${{ github.run_number }}"
on:
push:
tags:
- 'v*'
branches:
- main
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
modpack-info:
name: Modpack Info
runs-on: ubuntu-latest
outputs:
projectname: ${{ steps.info.outputs.projectname }}
projectsuffix: ${{ steps.info.outputs.projectsuffix }}
mcversion: ${{ steps.info.outputs.mcversion }}
tag: ${{ steps.version.outputs.tag }}
news: ${{ steps.mod_changes.outputs.news }}
steps:
- name: Checkout with fetch depth 2
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Get tag
id: version
uses: "WyriHaximus/github-action-get-previous-tag@v1"
with:
fallback: tag_not_found
- name: Get modpack info
id: info
shell: bash
run: |
set +e
if [ ! -f pax/modpack/manifest.json ]; then
echo "::error::Could not find manifest.json" && exit 1
fi
manifestjson=`cat pax/modpack/manifest.json`
projectname=`echo $(jq -r '.name' <<< "$manifestjson")`
echo "projectname=$projectname" >> $GITHUB_OUTPUT
mcversion=`echo $(jq -r '.minecraft.version' <<< "$manifestjson")`
echo "mcversion=$mcversion" >> $GITHUB_OUTPUT
if [[ ${{ startsWith(github.ref, 'refs/tags/v') }} == true ]]; then
echo "projectsuffix=${{ steps.version.outputs.tag }}" >> $GITHUB_OUTPUT
else
echo "projectsuffix=build.${{ github.run_number }}" >> $GITHUB_OUTPUT
fi
- name: Checkout with fetch depth 0
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Process changelog
id: mod_changes
shell: bash
run: |
set +e
curl https://github.com/josephburnett/jd/releases/download/v1.7.1/jd-amd64-linux -o ./pax/jd -L -J
sudo chmod +x ./pax/jd
manifest="./pax/modpack/manifest.json"
changelog="./CHANGELOG.md"
branch=$(git rev-parse --abbrev-ref HEAD)
current_commit=$(git rev-parse --short ${{ github.sha }})
previous_commit=$(git log -n 1 --skip 1 --pretty=format:"%h" -- $manifest)
latest_commit=$(git log -n 1 --pretty=format:"%h" $branch -- $manifest)
latest_tag=$(git describe --tags --abbrev=0)
latest_tagged_commit=$(git rev-list -n 1 --pretty=format:"%h" $latest_tag | sed -n 2p)
if [ "$latest_tag" = ${{ steps.version.outputs.tag }} ]; then
latest_tag=$(git describe --tags --abbrev=0 $(git describe --tags --abbrev=0)^)
latest_tagged_commit=$(git rev-list -n 1 --pretty=format:"%h" $latest_tag | sed -n 2p)
fi
if [ "$latest_commit" = "$current_commit" ]; then
echo "changed=true" >> $GITHUB_OUTPUT
else
echo "changed=false" >> $GITHUB_OUTPUT
fi
echo "branch: $branch"
echo "current commit: $current_commit"
echo "previous commit: $previous_commit"
echo "latest commit: $latest_commit"
echo "latest tagged commit: $latest_tagged_commit"
echo "latest tag: $latest_tag"
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;36m'
NC='\033[0m'
git show $latest_tagged_commit:$manifest > ./pax/modpack/manifest_prev.json
mods_removed_raw=$(./pax/jd -set ./pax/modpack/manifest_prev.json $manifest | grep '^-' | grep -P -o '"name":[\s]*"\K[^"]*' | tr -d '\[\]')
mods_added_raw=$(./pax/jd -set ./pax/modpack/manifest_prev.json $manifest | grep '^+' | grep -P -o '"name":[\s]*"\K[^"]*' | tr -d '\[\]')
mods_added=""
mods_removed=""
mods_updated=""
mod_changes=""
if [[ ! -z ""$mods_added_raw"" ]]; then
while IFS= read -r line1; do
foo=""
while IFS= read -r line2; do
foo="${line1//$line2}"
if [[ -z ""$foo"" ]]; then
if [[ ! -z ""$mods_updated"" ]]; then
mods_updated+="\n"
fi
mods_updated+="- $line1"
break
fi
done <<< "$mods_removed_raw"
if [[ ! -z ""$foo"" ]]; then
if [[ ! -z ""$mods_added"" ]]; then
mods_added+="\n"
fi
mods_added+="- $foo"
fi
done <<< "$mods_added_raw"
fi
if [[ ! -z ""$mods_removed_raw"" ]]; then
while IFS= read -r line1; do
bar=""
while IFS= read -r line2; do
bar="${line1//$line2}"
if [[ -z ""$bar"" ]]; then
break
fi
done <<< "$mods_added_raw"
if [[ ! -z ""$bar"" ]]; then
if [[ ! -z ""$mods_removed"" ]]; then
mods_removed+="\n"
fi
mods_removed+="- $bar"
fi
done <<< "$mods_removed_raw"
fi
if [[ ! -z ""$mods_added"" ]] || [[ ! -z ""$mods_removed"" ]] || [[ ! -z ""$mods_updated"" ]]; then
echo -e "x---------------x"
echo -e "| Mod Changes |"
mod_changes+="## Mod Changes\n\n"
mod_changes+="Since: [\`$latest_tag\`](<https://github.com/${{ github.repository }}/releases/tag/$latest_tag>)\n\n"
mod_changes+="\`\`\`markdown\n"
fi
if [[ ! -z ""$mods_added"" ]]; then
echo -e "${GREEN}Added:"
echo -e "$mods_added"
mod_changes+="Added:\n"
mod_changes+="$mods_added\n"
if [[ ! -z ""$mods_removed"" ]] || [[ ! -z ""$mods_updated"" ]]; then
mod_changes+="\n"
fi
fi
if [[ ! -z ""$mods_removed"" ]]; then
echo -e "${RED}Removed:"
echo -e "$mods_removed"
mod_changes+="Removed:\n"
mod_changes+="$mods_removed\n"
if [[ ! -z ""$mods_updated"" ]]; then
mod_changes+="\n"
fi
fi
if [[ ! -z ""$mods_updated"" ]]; then
echo -e "${BLUE}Updated:"
echo -e "$mods_updated"
mod_changes+="Updated:\n"
mod_changes+="$mods_updated\n"
fi
if [[ ! -z ""$mods_added"" ]] || [[ ! -z ""$mods_removed"" ]] || [[ ! -z ""$mods_updated"" ]]; then
echo -e "${NC}x---------------x"
mod_changes+="\`\`\`"
fi
if [[ ! -z ""$mod_changes"" ]]; then
echo -e "$mod_changes" >> $GITHUB_STEP_SUMMARY
fi
# Upload @mod_changes@
mod_changes=$(echo $mod_changes | sed -r 's/[/]/\\\//g')
perl -i -pe "s/\@mod_changes\@/$mod_changes/g" $changelog
# Replace @mod_changes@
mod_changes=$(echo $mod_changes | sed -r 's/\\\\n/\\n/g')
echo "markdown=$mod_changes" >> $GITHUB_OUTPUT
rm ./pax/modpack/manifest_prev.json
# Replace @version@
perl -i -pe "s/\@version\@/${{ steps.info.outputs.projectsuffix }}/g" $changelog
# Get & upload @news@
news=$(grep -Pzo '\@news\@\{\K[\s]\n*([\s\S]*)\n(?=\})' $changelog | sed '/^$/d' | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g')
echo news=$news >> $GITHUB_OUTPUT
# Replace @news@
perl -0777 -i -pe "s/\@news\@\{[\s]\n*([\s\S]*)\n\}\n/$news/g" $changelog
# Finally, Rename changelog
mv $changelog CHANGELOG-${{ steps.info.outputs.projectsuffix }}.md
- name: Upload changelog
uses: actions/upload-artifact@v4
with:
name: changelog
path: CHANGELOG-${{ steps.info.outputs.projectsuffix }}.md
- name: Send Discord message
if: ${{ steps.mod_changes.outputs.changed == 'true' }}
uses: "hugoalh/send-discord-webhook-ghaction@v6.0.1"
with:
key: ${{ secrets.DISCORD_WEBHOOK }}
content: "${{ steps.mod_changes.outputs.markdown }}"
username: "UnderBot"
avatar_url: "https://media.forgecdn.net/avatars/828/211/638215807562150866.png"
build-modpack:
name: Build Modpack
runs-on: ubuntu-latest
needs: [modpack-info]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download changelog
uses: actions/download-artifact@v4
with:
name: changelog
path: pax/modpack
- name: Replace strings
shell: bash
run: |
set +e
manifest="./pax/modpack/manifest.json"
custom_window_title="./config/fancymenu/config.txt"
fancymenu="./config/fancymenu/customization/main_menu.txt"
rich_presence="./config/DiscordRPC.cfg"
grooovy="./groovy/runConfig.json"
perl -i -pe "s/\@version\@/${{ needs.modpack-info.outputs.projectsuffix }}/g" $manifest
perl -i -pe "s/\@version\@/${{ needs.modpack-info.outputs.projectsuffix }}/g" $custom_window_title
perl -i -pe "s/\@version\@/${{ needs.modpack-info.outputs.projectsuffix }}/g" $fancymenu
perl -i -pe "s/\@version\@/${{ needs.modpack-info.outputs.projectsuffix }}/g" $rich_presence
perl -i -pe "s/\@version\@/${{ needs.modpack-info.outputs.projectsuffix }}/g" $grooovy
cat <<< $(jq '.debug = false' $grooovy) > $grooovy
- name: Sync overrides
run: |
cd pax/
chmod +x ./sync_overrides.sh
./sync_overrides.sh
- name: Export modpack
run: |
cd pax/
pax_version=$(grep -Po '(?<="PAX": ")[^"]*' setup.json)
curl https://github.com/froehlichA/pax/releases/download/v$pax_version/pax -o pax -L -J
sudo chmod +x ./pax
./pax export
- name: Rename zip
run: mv pax/.out/${{ needs.modpack-info.outputs.projectname }}.zip pax/.out/${{ needs.modpack-info.outputs.projectname }}-${{ needs.modpack-info.outputs.projectsuffix }}.zip
- name: Upload zip
uses: actions/upload-artifact@v4
with:
name: modpack
path: pax/.out/${{ needs.modpack-info.outputs.projectname }}-${{ needs.modpack-info.outputs.projectsuffix }}.zip
build-serverpack:
name: Build Serverpack
runs-on: ubuntu-latest
needs: [modpack-info]
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download Mods
run: |
cd pax/
modpack_downloader_version=$(grep -Po '(?<="ModpackDownloader": ")[^"]*' setup.json)
curl https://github.com/Joshyx/ModpackDownloader/releases/download/v$modpack_downloader_version/ModpackDownloader-$modpack_downloader_version.jar -o ModpackDownloader-$modpack_downloader_version.jar -L -J
java -jar ModpackDownloader-$modpack_downloader_version.jar modpack ..
- name: Export serverpack
run: |
cd pax/
server_pack_creator_version=$(grep -Po '(?<="ServerPackCreator": ")[^"]*' setup.json)
cd serverpack/
curl https://github.com/Griefed/ServerPackCreator/releases/download/$server_pack_creator_version/ServerPackCreator-$server_pack_creator_version.jar -o ServerPackCreator-$server_pack_creator_version.jar -L -J
java -jar ServerPackCreator-$server_pack_creator_version.jar -cli
- name: Rename zip
run: |
mv pax/serverpack/server-packs/_server_pack.zip pax/serverpack/server-packs/${{ needs.modpack-info.outputs.projectname }}-${{ needs.modpack-info.outputs.projectsuffix }}-Server-Pack.zip
- name: Upload zip
uses: actions/upload-artifact@v4
with:
name: serverpack
path: pax/serverpack/server-packs/${{ needs.modpack-info.outputs.projectname }}-${{ needs.modpack-info.outputs.projectsuffix }}-Server-Pack.zip
release:
name: Release
needs: [modpack-info, build-modpack, build-serverpack]
if: startsWith(github.ref, 'refs/tags/v')
uses: ./.github/workflows/Release.yml
with:
projectname: ${{ needs.modpack-info.outputs.projectname }}
projectsuffix: ${{ needs.modpack-info.outputs.projectsuffix }}
mcversion: ${{ needs.modpack-info.outputs.mcversion }}
tag: ${{ needs.modpack-info.outputs.tag }}
news: ${{ needs.modpack-info.outputs.news }}
secrets: inherit