Skip to content

Nightly modpack build #744

Nightly modpack build

Nightly modpack build #744

name: Nightly modpack build
on:
workflow_dispatch:
schedule:
- cron: '30 2 * * *' # 2:30am UTC every day
jobs:
nightly-modpack-build:
runs-on: ubuntu-latest
steps:
# check-out repo and set-up python
- name: Check out repository
uses: actions/checkout@v4
with:
token: ${{ secrets.NIGHTLY_GITHUB_TOKEN }}
fetch-depth: 0
ref: master
- name: Set up python
id: setup-python
uses: actions/setup-python@v5
with:
python-version: 3.10.5
- name: Setup private repo access token
shell: bash
run: echo "${{ secrets.NIGHTLY_GITHUB_TOKEN }}" > ~/.github_personal_token
# install & configure poetry
- name: Install Poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
installer-parallel: true
# load cached venv if cache exists
- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v4
with:
path: .venv
key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock', '*/poetry.lock') }}
# install dependencies if cache does not exist
- name: Install dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --no-interaction --no-root
# install your root project, if required
- name: Install library
run: poetry install --no-interaction
- name: Get current date
id: date
shell: bash
run: |
echo "today=$(date --iso-8601)+${{ github.run_number }}" >> "$GITHUB_OUTPUT"
echo "cachedate=$(date '+%G-w%V')" >> "$GITHUB_OUTPUT"
- name: Load cached mod zips
id: load_mod_cache
uses: actions/cache/restore@v4
with:
path: cache
key: daxxl-${{ runner.os }}-${{ steps.date.outputs.cachedate }}
restore-keys: |
daxxl-${{ runner.os }}-
- name: Build modpack archives
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.NIGHTLY_GITHUB_TOKEN }}
run: |
poetry run python -m gtnh.cli.generate_nightly --update-available
poetry run python -m gtnh.cli.assemble_nightly
- name: Save cached mod zips
uses: actions/cache/save@v4
if: steps.load_mod_cache.outputs.cache-hit != 'true'
with:
path: cache
key: daxxl-${{ runner.os }}-${{ steps.date.outputs.cachedate }}
- name: Retrieve last non-nightly release name
shell: bash
if: success() || failure()
run: |
last_non_nightly_release_name="$(jq -r '.releases | map(select(contains("nightly") | not)) | last' <./gtnh-modpack.json)"
echo "nightly_non_nightly_changelog_file=./releases/changelogs/changelog from ${last_non_nightly_release_name} to nightly.md" >> $GITHUB_ENV
echo "last_non_nightly_release_name=${last_non_nightly_release_name}" >> $GITHUB_ENV
- name: Generate changelog between nightly and last non-nightly release
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.NIGHTLY_GITHUB_TOKEN }}
run: |
poetry run python -m gtnh.cli.generate_changelog --previous-release-name "$last_non_nightly_release_name" nightly > "$nightly_non_nightly_changelog_file"
# Upload modpack
- name: Upload manifest
uses: actions/upload-artifact@v4
# Upload all archives even if one of the zips fails to upload
if: success() || failure()
with:
name: gtnh-nightly-${{ steps.date.outputs.today }}-manifest.json
path: releases/manifests/nightly.json
- name: Upload manifest job summary
shell: bash
if: success() || failure()
continue-on-error: true
run: |
echo "# GTNH Nightly build ${{ steps.date.outputs.today }}" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "## Github mods" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "| Mod | Version | Side |" >> "$GITHUB_STEP_SUMMARY"
echo "| --- | ------- | ---- |" >> "$GITHUB_STEP_SUMMARY"
jq -r '.github_mods | keys[] as $k | ["", $k, .[$k].version, .[$k].side, ""] | join(" | ") | ltrimstr(" ")' releases/manifests/nightly.json | sort >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "## External mods" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "| Mod | Version | Side |" >> "$GITHUB_STEP_SUMMARY"
echo "| --- | ------- | ---- |" >> "$GITHUB_STEP_SUMMARY"
jq -r '.external_mods | keys[] as $k | ["", $k, .[$k].version, .[$k].side, ""] | join(" | ") | ltrimstr(" ")' releases/manifests/nightly.json | sort >> "$GITHUB_STEP_SUMMARY"
- name: Relocate built zips
shell: bash
run: |
mv releases/zip/GT_New_Horizons_nightly_Server_Java_8.zip "GTNH-${{ steps.date.outputs.today }}-server.zip"
mv releases/zip/GT_New_Horizons_nightly_Server_Java_17-21.zip "GTNH-${{ steps.date.outputs.today }}-server-new-java.zip"
mv releases/multi_poly/GT_New_Horizons_nightly_Java_8.zip "GTNH-${{ steps.date.outputs.today }}-mmcprism-java8.zip"
mv releases/multi_poly/GT_New_Horizons_nightly_Java_17-21.zip "GTNH-${{ steps.date.outputs.today }}-mmcprism-new-java.zip"
- name: Upload server zip
uses: actions/upload-artifact@v4
# Upload all archives even if one of the zips fails to upload
if: success() || failure()
with:
name: gtnh-nightly-${{ steps.date.outputs.today }}-server
path: GTNH-${{ steps.date.outputs.today }}-server.zip
compression-level: 0 # already compressed by Python
- name: Upload modern java server zip
uses: actions/upload-artifact@v4
# Upload all archives even if one of the zips fails to upload
if: success() || failure()
with:
name: gtnh-nightly-${{ steps.date.outputs.today }}-server-new-java
path: GTNH-${{ steps.date.outputs.today }}-server-new-java.zip
compression-level: 0 # already compressed by Python
- name: Upload MMC zip
uses: actions/upload-artifact@v4
# Upload all archives even if one of the zips fails to upload
if: success() || failure()
with:
name: gtnh-nightly-${{ steps.date.outputs.today }}-mmcprism-java8
path: GTNH-${{ steps.date.outputs.today }}-mmcprism-java8.zip
compression-level: 0 # already compressed by Python
- name: Upload modern java Prism zip
uses: actions/upload-artifact@v4
# Upload all archives even if one of the zips fails to upload
if: success() || failure()
with:
name: gtnh-nightly-${{ steps.date.outputs.today }}-mmcprism-new-java
path: GTNH-${{ steps.date.outputs.today }}-mmcprism-new-java.zip
compression-level: 0 # already compressed by Python
# Pulls the newest changelog filename and stores it in an env variable
# so we can use it in the commit
- name: Retrieve Changelog Name
shell: bash
if: success() || failure()
run: |
echo "changelog_name=$(./scripts/newest_nightly_changelog.sh './releases/changelogs/nightly builds')" >> $GITHUB_ENV
- name: Push nightly changelog in commit to master
shell: bash
if: success() || failure()
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config pull.rebase true
git add "$nightly_non_nightly_changelog_file"
git add "./releases/changelogs/nightly builds"
git add ./releases/manifests/nightly.json
git add ./gtnh-assets.json
git commit -m "Upload $changelog_name"
git push origin master