Project Build #118 #118
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Project Build | |
run-name: "Project Build #${{ github.run_number }}" | |
on: | |
push: | |
branches: | |
- main | |
concurrency: | |
group: ${{ github.workflow }} | |
cancel-in-progress: true | |
env: | |
RELEASE_TYPE: "alpha" | |
MINECRAFT_VERSION: "1.20.1" | |
jobs: | |
info: | |
name: 🖥️ Project Info | |
runs-on: ubuntu-latest | |
outputs: | |
project_version: ${{ steps.project_version.outputs.value }} | |
project_name: ${{ steps.project_name.outputs.value }} | |
project_full_name: ${{ steps.project_name.outputs.value }}-${{ steps.project_version.outputs.value }} | |
changelog: ${{ steps.changelog.outputs.description }} | |
diff: ${{ steps.read_diff.outputs.diff }} | |
release_type: ${{ env.RELEASE_TYPE }} | |
minecraft_version: ${{ env.MINECRAFT_VERSION }} | |
exists: ${{ steps.check_tag.outputs.exists }} | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
with: | |
fetch-depth: 0 | |
- name: 🔍 Check pakku-lock.json | |
id: check_pakku_lock | |
shell: bash | |
run: | | |
if [ ! -f pakku-lock.json ]; then | |
echo "❌ Could not find pakku-lock.json" && exit 1 | |
else | |
echo "✔️ pakku-lock.json" | |
fi | |
- name: 🔍 Check pakku.json | |
id: check_pakku | |
shell: bash | |
run: | | |
if [ ! -f pakku.json ]; then | |
echo "❌ Could not find pakku.json" && exit 1 | |
else | |
echo "✔️ pakku.json" | |
fi | |
- name: 📈 Get latest tag | |
id: latest_tag | |
shell: bash | |
run: | | |
tag=$(git describe --tags --abbrev=0) | |
if [ -z "$tag" ]; then | |
echo "❌ Latest tag not found" && exit 1 | |
else | |
echo "✔️ Latest tag found: $tag" | |
echo "tag=$tag" >> $GITHUB_OUTPUT | |
fi | |
- name: 🔍 Check pakku-lock.json in previous tag | |
id: check_pakku_lock_prev | |
shell: bash | |
run: | | |
if git cat-file -e ${{ steps.latest_tag.outputs.tag }}:./pakku-lock.json 2>/dev/null; then | |
echo "✔️ File pakku-lock.json found in previous tag" | |
echo "file_found=true" >> $GITHUB_OUTPUT | |
else | |
echo "❌ File pakku-lock.json not found in previous tag" | |
echo "file_found=false" >> $GITHUB_OUTPUT | |
fi | |
- name: 📁 Check and copy pakku-lock.json from previous tag | |
id: check_copy_lock | |
if: steps.check_pakku_lock_prev.outputs.file_found == 'true' | |
shell: bash | |
run: | | |
git show tags/${{ steps.latest_tag.outputs.tag }}:./pakku-lock.json > ./pakku-lock-prev.json | |
if [ -s ./pakku-lock-prev.json ]; then | |
echo "✔️ File pakku-lock-prev.json created" | |
else | |
echo "❌ Error: File pakku-lock-prev.json is empty or not created" && exit 1 | |
fi | |
fi | |
- name: 📦 Download pakku.jar | |
id: download_pakku | |
if: steps.check_pakku_lock_prev.outputs.file_found == 'true' | |
shell: bash | |
run: | | |
curl https://github.com/juraj-hrivnak/pakku/releases/latest/download/pakku.jar -o pakku.jar -L -J | |
echo "✔️ Downloaded pakku.jar " | |
- name: 🔄 Run pakku diff | |
id: pakku_diff | |
if: steps.check_pakku_lock_prev.outputs.file_found == 'true' | |
shell: bash | |
run: | | |
java -jar pakku.jar diff -v --markdown PROJECTS_DIFF.md ./pakku-lock-prev.json ./pakku-lock.json | |
if [ -f PROJECTS_DIFF.md ]; then | |
echo "✔️ Comparison completed" | |
else | |
echo "❌ Error: File PROJECTS_DIFF.md not created" && exit 1 | |
fi | |
- name: 📝 Read PROJECTS_DIFF.md to variable | |
id: read_diff | |
if: steps.check_pakku_lock_prev.outputs.file_found == 'true' | |
shell: bash | |
run: | | |
echo "📝 Reading PROJECTS_DIFF.md to variable..." | |
{ | |
echo 'diff<<EOF' | |
cat -v PROJECTS_DIFF.md | |
echo EOF | |
} >> "$GITHUB_OUTPUT" | |
echo "✔️ Diff content read to variable" | |
- name: 📊 Get Project Name | |
id: project_name | |
uses: ActionsTools/[email protected] | |
with: | |
file_path: "pakku.json" | |
prop_path: "name" | |
- name: 📊 Get Project Version | |
id: project_version | |
uses: ActionsTools/[email protected] | |
with: | |
file_path: "pakku.json" | |
prop_path: "version" | |
- name: 📊 Get Minecraft Version | |
id: minecraft_version | |
uses: ActionsTools/[email protected] | |
with: | |
file_path: "pakku-lock.json" | |
prop_path: "mc_versions" | |
- name: 📄 Changelog Parser | |
id: changelog | |
uses: coditory/[email protected] | |
with: | |
path: CHANGELOG.md | |
- name: 📈 Upload Diff | |
id: upload_diff | |
if: ${{ steps.read_diff.outputs.diff != '' }} && steps.check_pakku_lock_prev.outputs.file_found == 'true' | |
uses: actions/[email protected] | |
with: | |
name: Mods-diff | |
path: PROJECTS_DIFF.md | |
- name: 🔍 Check if tag exists | |
uses: mukunku/[email protected] | |
id: check_tag | |
with: | |
tag: ${{ steps.project_version.outputs.value }} | |
- name: 📝 Generate Github Summary | |
uses: WcAServices/[email protected] | |
with: | |
template: | | |
📃 **Name**: ${{ steps.project_name.outputs.value }} | |
📃 **Release**: ${{ steps.project_version.outputs.value }} | |
📃 **Release Type**: ${{ env.RELEASE_TYPE }} | |
📃 **Game Version**: ${{ env.MINECRAFT_VERSION }} | |
${{ steps.changelog.outputs.description }} | |
${{ steps.read_diff.outputs.diff }} | |
build-modpack: | |
name: 📦 Build Modpack | |
needs: [info] | |
runs-on: ubuntu-latest | |
if: needs.info.outputs.exists != 'true' | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: 🔄 Replace strings | |
shell: bash | |
run: | | |
set +e | |
VERSION=${{ needs.info.outputs.project_version }} | |
sed -i -e "s/DEV/${VERSION}/g" config/fancymenu/customization/gui_main_menu.txt | |
# - name: Cache pakku | |
# uses: actions/[email protected] | |
# with: | |
# path: build/.cache | |
# key: ${{ runner.OS }}-pakku-cache-${{ hashFiles('build/.cache/') }} | |
# restore-keys: ${{ runner.OS }}-pakku-cache- | |
- name: 📦 Export modpack | |
run: | | |
curl https://github.com/juraj-hrivnak/pakku/releases/latest/download/pakku.jar -o pakku.jar -L -J | |
java -jar pakku.jar export | |
- name: 📁 Rename artifact curseforge | |
run: | | |
cd ./build/curseforge/ | |
mv *.zip $(basename -s .zip *.zip)-curseforge.zip | |
- name: 🚀 Upload artifact CurseForge | |
uses: actions/[email protected] | |
with: | |
name: ${{ needs.info.outputs.project_full_name }}-curseforge | |
path: ./build/curseforge/${{ needs.info.outputs.project_full_name }}-curseforge.zip | |
if-no-files-found: error | |
- name: 📁 Rename artifact modrinth | |
run: | | |
cd ./build/modrinth/ | |
mv *.mrpack $(basename -s .mrpack *.mrpack)-modrinth.mrpack | |
- name: 🚀 Upload artifact modrinth | |
uses: actions/[email protected] | |
with: | |
name: ${{ needs.info.outputs.project_full_name }}-modrinth | |
path: ./build/modrinth/${{ needs.info.outputs.project_full_name }}-modrinth.mrpack | |
if-no-files-found: warn | |
build-server: | |
name: 📦 Build Server | |
needs: [info] | |
runs-on: ubuntu-latest | |
if: needs.info.outputs.exists != 'true' | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: 🔄 Replace strings | |
shell: bash | |
run: | | |
set +e | |
VERSION=${{ needs.info.outputs.project_version }} | |
sed -i -e "s/DEV/${VERSION}/g" config/fancymenu/customization/gui_main_menu.txt | |
# - name: Cache pakku | |
# uses: actions/[email protected] | |
# with: | |
# path: build/.cache | |
# key: ${{ runner.OS }}-pakku-cache-${{ hashFiles('build/.cache/') }} | |
# restore-keys: ${{ runner.OS }}-pakku-cache- | |
- name: 📦 Export modpack | |
run: | | |
mv -vf ./.pakku/server-overrides/* ./ | |
curl https://github.com/juraj-hrivnak/pakku/releases/latest/download/pakku.jar -o pakku.jar -L -J | |
java -jar pakku.jar export | |
- name: 📁 Rename artifact server | |
run: | | |
cd ./build/serverpack/ | |
mv *.zip $(basename -s .zip *.zip)-serverpack.zip | |
- name: 🚀 Upload artifact server | |
uses: actions/[email protected] | |
with: | |
name: ${{ needs.info.outputs.project_full_name }}-serverpack | |
path: ./build/serverpack/${{ needs.info.outputs.project_full_name }}-serverpack.zip | |
if-no-files-found: error | |
build-multimc: | |
name: 📦 Build MultiMC | |
needs: [info] | |
runs-on: ubuntu-latest | |
if: needs.info.outputs.exists != 'true' | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: 🔄 Replace strings | |
shell: bash | |
run: | | |
set +e | |
VERSION=${{ needs.info.outputs.project_version }} | |
sed -i -e "s/DEV/${VERSION}/g" config/fancymenu/customization/gui_main_menu.txt | |
sed -i -e "s/DEV/${VERSION}/g" .pakku/multimc-overrides/instance.cfg | |
# - name: Cache pakku | |
# uses: actions/[email protected] | |
# with: | |
# path: build/.cache | |
# key: ${{ runner.OS }}-pakku-cache-${{ hashFiles('build/.cache/') }} | |
# restore-keys: ${{ runner.OS }}-pakku-cache- | |
- name: 📦 Export | |
run: | | |
curl https://github.com/juraj-hrivnak/pakku/releases/latest/download/pakku.jar -o pakku.jar -L -J | |
java -jar pakku.jar --debug fetch | |
java -jar pakku.jar --debug export | |
- name: 📁 Move files | |
run: | | |
ls | |
mkdir -p .pakku/multimc-overrides/flame | |
mv -vf ./build/.cache/curseforge/manifest.json .pakku/multimc-overrides/flame/manifest.json | |
mv -vf ./build/.cache/curseforge/overrides .pakku/multimc-overrides/.minecraft | |
mv -vf ./mods .pakku/multimc-overrides/.minecraft/mods | |
cd .pakku/multimc-overrides/ | |
zip -r ${{ needs.info.outputs.project_full_name }}-multimc.zip icon.png mmc-pack.json instance.cfg .minecraft/ flame/ | |
- name: 🚀 Upload zip multimc | |
uses: actions/[email protected] | |
with: | |
name: ${{ needs.info.outputs.project_full_name }}-multimc | |
path: .pakku/multimc-overrides/${{ needs.info.outputs.project_full_name }}-multimc.zip | |
if-no-files-found: error | |
release-curseforge: | |
name: 🚀 Release to CurseForge | |
needs: [info, build-modpack, build-server] | |
runs-on: ubuntu-latest | |
outputs: | |
id: ${{ steps.release.outputs.id }} | |
steps: | |
- name: 🔒 Check if CURSEFORGE_TOKEN exist | |
shell: bash | |
run: | | |
if [ "${{ secrets.CURSEFORGE_TOKEN }}" == '' ]; then | |
echo '::error::No value found for secret key `CURSEFORGE_TOKEN`. See https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository' && exit 1 | |
fi | |
- name: 📦 Download artifact curseforge | |
uses: actions/[email protected] | |
with: | |
name: ${{ needs.info.outputs.project_full_name }}-curseforge | |
- name: 📦 Download artifact server | |
uses: actions/[email protected] | |
with: | |
name: ${{ needs.info.outputs.project_full_name }}-serverpack | |
- name: 🚀 Upload Curseforge | |
id: release | |
uses: Xikaro/[email protected] | |
with: | |
api-token: ${{ secrets.CURSEFORGE_TOKEN }} | |
project-id: ${{ vars.CURSEFORGE_ID }} | |
display-name: ${{ needs.info.outputs.project_full_name }} | |
modpack-path: ${{ needs.info.outputs.project_full_name }}-curseforge.zip | |
server-display-name: ${{ needs.info.outputs.project_full_name }}-serverpack | |
modpack-server-path: ${{ needs.info.outputs.project_full_name }}-serverpack.zip | |
changelog: | | |
${{ needs.info.outputs.changelog }} | |
${{ needs.info.outputs.diff }} | |
changelog-format: markdown | |
game-version: ${{ needs.info.outputs.minecraft_version }} | |
release-type: ${{ needs.info.outputs.release_type }} | |
# release-modrinth: | |
# name: 🚀 Release to Modrinth | |
# needs: [info, build-modpack, build-server] | |
# runs-on: ubuntu-latest | |
# steps: | |
# - name: 🔒 Check if MODRINTH_API_TOKEN exist | |
# shell: bash | |
# run: | | |
# if [ "${{ secrets.MODRINTH_TOKEN }}" == '' ]; then | |
# echo '::error::No value found for secret key `MODRINTH_TOKEN`. See https://docs.github.com/en/ actionssecurity-guides/ encrypted-secrets#creating-encrypted-secrets-for-a-repository' && exit 1 | |
# fi | |
# - name: 📦 Download artifact modrinth | |
# uses: actions/[email protected] | |
# with: | |
# name: ${{ needs.info.outputs.project_full_name }}-modrinth | |
# - name: 📦 Download artifact server | |
# uses: actions/[email protected] | |
# with: | |
# name: ${{ needs.info.outputs.project_full_name }}-serverpack | |
# - name: 🚀 Upload Modrinth | |
# id: release | |
# uses: Xikaro/[email protected] | |
# with: | |
# api-token: ${{ secrets.MODRINTH_TOKEN }} | |
# project-id: ${{ vars.MODRINTH_ID }} | |
# modpack-path: ${{ needs.info.outputs.project_full_name }}-modrinth.mrpack | |
# modpack-server-path: ${{ needs.info.outputs.project_full_name }}-serverpack.zip | |
# changelog: ${{ needs.info.outputs.changelog }} | |
# changelog-format: markdown | |
# game-version: ${{ needs.info.outputs.minecraft_version }} | |
# display-name: ${{ needs.info.outputs.project_full_name }} | |
# server-display-name: ${{ needs.info.outputs.project_full_name }}-serverpack | |
# release-type: ${{ needs.info.outputs.release_type }} | |
release-github: | |
name: 🚀 Release to GitHub | |
needs: [info, build-modpack, build-server, build-multimc] | |
runs-on: ubuntu-latest | |
outputs: | |
url: ${{ steps.release.outputs.url }} | |
steps: | |
- name: 📦 Checkout | |
uses: actions/[email protected] | |
- name: 📦 Download artifact | |
uses: actions/[email protected] | |
with: | |
merge-multiple: true | |
- name: 🚫 Сlose fixed in dev | |
uses: Xikaro/close-issues-based-on-label@master | |
env: | |
LABEL: "2. Status: In Dev" | |
COMMENT: In ${{ needs.info.outputs.project_version }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Format diff | |
id: format_diff | |
if: ${{ needs.info.outputs.diff != '' }} | |
uses: roamingowl/[email protected] | |
with: | |
template: | | |
```markdown | |
${{ needs.info.outputs.diff }} | |
``` | |
- name: 🚀 Create release | |
id: release | |
uses: softprops/[email protected] | |
with: | |
name: ${{ needs.info.outputs.project_version }} | |
tag_name: ${{ needs.info.outputs.project_version }} | |
body: | | |
${{ needs.info.outputs.changelog }} | |
${{ steps.format_diff.outputs.text }} | |
files: | | |
${{ needs.info.outputs.project_full_name }}-curseforge.zip | |
${{ needs.info.outputs.project_full_name }}-serverpack.zip | |
${{ needs.info.outputs.project_full_name }}-multimc.zip | |
prerelease: ${{ needs.info.outputs.release_type != 'release' }} | |
generate_release_notes: true | |
token: ${{ secrets.GITHUB_TOKEN }} | |
discord-message: | |
name: 📱 Discord Message | |
needs: [info, release-curseforge, release-github] | |
runs-on: ubuntu-latest | |
steps: | |
- name: ✂️ Truncate Changelog | |
id: truncated | |
uses: cisox/[email protected] | |
with: | |
text: '${{ needs.info.outputs.changelog }}' | |
max_chars: '1450' | |
- name: 📨 Send Discord message | |
uses: hugoalh/[email protected] | |
with: | |
key: ${{ secrets.DISCORD_RELEASES }} | |
username: "TerraFirmaGreg" | |
avatar_url: "https://raw.githubusercontent.com/TerraFirmaGreg-Team/.github/main/branding/logo.png" | |
content_links_no_embed: .+ | |
content: | | |
**Release**: `${{ needs.info.outputs.project_version }}` | |
**Release Type**: `${{ needs.info.outputs.release_type }}` | |
**Game Version**: `${{ needs.info.outputs.minecraft_version }}` | |
[CurseForge](https://www.curseforge.com/minecraft/modpacks/terrafirmagreg-modern/files/${{ needs.release-curseforge.outputs.id }}) • [GitHub](${{ needs.release-github.outputs.url }}) • [Issues](https://github.com/${{ github.repository }}/issues) | |
```markdown | |
${{ steps.truncated.outputs.text }} | |
- ...``` | |
** [Read more...](${{ needs.release-github.outputs.url }}) ** |