Files
TFG/.github/workflows/release.yml
2024-10-29 07:21:22 +05:00

404 lines
16 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Release
run-name: "Release #${{ github.run_number }} by @${{ github.actor }}"
env:
RELEASE_TYPE: "beta"
MINECRAFT_VERSION: "1.20.1"
on:
push:
tags:
- "*.*.*"
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
info:
name: Project Info
runs-on: ubuntu-latest
outputs:
project_version: ${{ steps.project_version.outputs.tag }}
project_name: ${{ steps.project_name.outputs.value }}
changelog: ${{ steps.changelog.outputs.description }}
truncated_changelog: ${{ steps.truncated.outputs.text }}
diff: ${{ steps.lockfile.outputs.diff }}
release_type: ${{ env.RELEASE_TYPE }}
minecraft_version: ${{ env.MINECRAFT_VERSION }}
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Check lockfile
shell: bash
run: |
set +e
echo "🔎 Getting modpack info..."
if [ ! -f pakku-lock.json ]; then
echo "::error::Could not find pakku-lock.json" && exit 1
else
echo "✔️ pakku-lock.json"
fi
if [ ! -f pakku.json ]; then
echo "::error::Could not find pakku.json" && exit 1
else
echo "✔️ pakku.json"
fi
- name: Get previous lockfile
id: lockfile
shell: bash
run: |
set +e
echo "🔎 Getting previous lockfile..."
if [ "$latest_tag" = ${{ github.ref_name }} ]; then
latest_tag_prev=$(git describe --tags --abbrev=0 $(git describe --tags --abbrev=0)^)
latest_tagged_commit=$(git rev-list -n 1 --pretty=format:"%h" $latest_tag_prev | sed -n 2p)
if git cat-file -e $latest_tagged_commit:./pakku-lock.json; then
git show $latest_tagged_commit:./pakku-lock.json > ./pakku-lock-prev.json
curl https://github.com/juraj-hrivnak/pakku/releases/latest/download/pakku.jar -o pakku.jar -L -J
java -jar pakku.jar diff -v --markdown PROJECTS_DIFF.md ./pakku-lock-pre.json ./pakku-lock.json
else
echo "❌ File pakku-lock.json not found in previous tag"
fi
fi
if [ ! -f PROJECTS_DIFF.md ]; then
touch PROJECTS_DIFF.md
fi
{
echo 'diff<<EOF'
cat -v PROJECTS_DIFF.md
echo EOF
} >> "$GITHUB_OUTPUT"
- name: Get Project Name
id: project_name
uses: ActionsTools/read-json-action@v1.0.5
with:
file_path: "pakku.json"
prop_path: "name"
- name: Get Project Version
id: project_version
uses: "WyriHaximus/github-action-get-previous-tag@v1.4.0"
with:
fallback: build.${{ github.run_number }}
- name: Changelog Parser
id: changelog
uses: coditory/changelog-parser@v1.0.2
with:
path: CHANGELOG.md
- name: Truncate Changelog
id: truncated
uses: johnforeland/truncate-tool@v0.5.0
with:
text: ${{ steps.changelog.outputs.description }}
max_characters: '1450'
string_to_append: '...'
- name: Upload Diff
id: diff
uses: actions/upload-artifact@v4.4.3
with:
name: Mods-diff
path: PROJECTS_DIFF.md
- name: Generate Github Summary
run: |
echo "📃 Project Name=${{ steps.project_name.outputs.value }}" >> $GITHUB_STEP_SUMMARY
echo "📃 Project Version=${{ steps.project_version.outputs.tag }}" >> $GITHUB_STEP_SUMMARY
echo "📃 MC Versions=${{ env.MINECRAFT_VERSION }}" >> $GITHUB_STEP_SUMMARY
echo "📃 Release Type=${{ env.RELEASE_TYPE }}" >> $GITHUB_STEP_SUMMARY
echo "${{ steps.changelog.outputs.description }}" >> $GITHUB_STEP_SUMMARY
echo "${{ steps.lockfile.outputs.diff }}" >> $GITHUB_STEP_SUMMARY
build-modpack:
name: Build Modpack
runs-on: ubuntu-latest
needs: [info]
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Replace strings
shell: bash
run: |
set +e
VERSION=${{ needs.info.outputs.project_version }}
sed -i -e "s/DEV/${VERSION}/g" pakku.json
sed -i -e "s/DEV/${VERSION}/g" config/fancymenu/customization/gui_main_menu.txt
# - name: Cache pakku
# uses: actions/cache@v4.1.2
# 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/upload-artifact@v4.4.3
with:
name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-curseforge
path: ./build/curseforge/${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-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/upload-artifact@v4.4.3
with:
name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-modrinth
path: ./build/modrinth/${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-modrinth.mrpack
if-no-files-found: warn
build-server:
name: Build Server Pack
runs-on: ubuntu-latest
needs: [info]
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Replace strings
shell: bash
run: |
set +e
VERSION=${{ needs.info.outputs.project_version }}
sed -i -e "s/DEV/${VERSION}/g" pakku.json
sed -i -e "s/DEV/${VERSION}/g" config/fancymenu/customization/gui_main_menu.txt
# - name: Cache pakku
# uses: actions/cache@v4.1.2
# 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/upload-artifact@v4.4.3
with:
name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-serverpack
path: ./build/serverpack/${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-serverpack.zip
if-no-files-found: error
build-multimc:
name: Build MultiMC Pack
runs-on: ubuntu-latest
needs: [info]
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Replace strings
shell: bash
run: |
set +e
VERSION=${{ needs.info.outputs.project_version }}
sed -i -e "s/DEV/${VERSION}/g" pakku.json
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/cache@v4.1.2
# 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_name }}-${{ needs.info.outputs.project_version }}-multimc.zip icon.png mmc-pack.json instance.cfg .minecraft/ flame/
- name: Upload zip multimc
uses: actions/upload-artifact@v4.4.3
with:
name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-multimc
path: .pakku/multimc-overrides/${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-multimc.zip
if-no-files-found: error
# release-curseforge:
# name: Deploy to CurseForge
# needs: [info, build-modpack, build-server]
# runs-on: ubuntu-latest
# outputs:
# id: ${{ steps.cf_release.outputs.id }}
# steps:
# - name: Check if CF_API_TOKEN exist
# shell: bash
# run: |
# if [ "${{ secrets.CF_API_TOKEN }}" == '' ]; then
# echo '::error::No value found for secret key `CF_API_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/download-artifact@v4.1.8
# with:
# name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-curseforge
# - name: Download artifact server
# uses: actions/download-artifact@v4.1.8
# with:
# name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-serverpack
# - name: Upload Curseforge
# id: cf_release
# uses: Xikaro/upload-curseforge-modpack-action@1.1.1
# with:
# api-token: ${{ secrets.CF_API_TOKEN }}
# project-id: ${{ vars.CF_MODPACK_ID }}
# display-name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}
# modpack-path: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-curseforge.zip
# server-display-name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-serverpack
# modpack-server-path: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-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: Deploy 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_API_TOKEN }}" == '' ]; then
# echo '::error::No value found for secret key `MODRINTH_API_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/download-artifact@v4.1.8
# with:
# name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-modrinth
# - name: Download artifact server
# uses: actions/download-artifact@v4.1.8
# with:
# name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-serverpack
# - name: Upload Modrinth
# id: cf_release
# uses: Xikaro/upload-curseforge-modpack-action@1.1.1
# with:
# api-token: ${{ secrets.MODRINTH_API_TOKEN }}
# project-id: ${{ vars.MODRINTH_MODPACK_ID }}
# modpack-path: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-modrinth.mrpack
# modpack-server-path: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-serverpack.zip
# changelog: ${{ needs.info.outputs.changelog }}
# changelog-format: markdown
# game-version: ${{ needs.info.outputs.minecraft_version }}
# display-name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}
# server-display-name: ${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-serverpack
# release-type: ${{ needs.info.outputs.release_type }}
release-github:
name: Deploy to GitHub
needs: [info, build-modpack, build-server, build-multimc]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Download artifact
uses: actions/download-artifact@v4.1.8
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: Create release
uses: softprops/action-gh-release@v2.0.8
with:
name: ${{ needs.info.outputs.project_version }}
tag_name: ${{ needs.info.outputs.project_version }}
body: |
${{ needs.info.outputs.changelog }}
```markdown
${{ needs.info.outputs.truncated_changelog }}
```
files: |
${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-curseforge.zip
${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-serverpack.zip
${{ needs.info.outputs.project_name }}-${{ needs.info.outputs.project_version }}-multimc.zip
prerelease: ${{ env.RELEASE_TYPE != 'release' }}
generate_release_notes: true
token: ${{ secrets.GITHUB_TOKEN }}
discord-message:
name: Discord Message
needs: [info, release-github]
runs-on: ubuntu-latest
steps:
- name: Send Discord message
uses: hugoalh/send-discord-webhook-ghaction@v7.0.2
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/files/5855711) • [GitHub](https://github.com/${{ github.repository }}/releases/tag/${{ needs.info.outputs.project_version }}) • [Issues](https://github.com/${{ github.repository }}/issues)
```markdown
${{ needs.info.outputs.truncated_changelog }}
```
** [Read more...](https://github.com/${{ github.repository }}/releases/tag/${{ needs.info.outputs.project_version }}) **