Skip to content

Release

Release #19

Workflow file for this run

name: ESOUI Release
on:
workflow_dispatch:
schedule:
# every sunday at 22:15am
- cron: "15 22 * * 0"
jobs:
test:
if: github.repository_owner == 'm00nyONE'
uses: ./.github/workflows/_tests.yml
test-pc:
if: github.repository_owner == 'm00nyONE'
uses: ./.github/workflows/_tests_pc.yml
test-console:
if: github.repository_owner == 'm00nyONE'
uses: ./.github/workflows/_tests_console.yml
docs:
if: github.repository_owner == 'm00nyONE'
uses: ./.github/workflows/_generate-docs.yml
permissions:
contents: write
release:
if: github.repository_owner == 'm00nyONE'
name: "release"
runs-on: ubuntu-latest
permissions: write-all
needs: [ 'test' ]
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Check for changes since last release
id: check_changes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "🔍 Checking for changes since the last release..."
REPO="$GITHUB_REPOSITORY"
LAST_RELEASE_TAG=$(gh api repos/${GITHUB_REPOSITORY}/releases/latest --jq .tag_name || echo "")
if [ -z "$LAST_RELEASE_TAG" ] || [ "$LAST_RELEASE_TAG" = "null" ]; then
echo "⚠️ No previous release found, proceeding with release."
echo "should_release=true" >> $GITHUB_OUTPUT
exit 0
fi
echo "Last release tag: $LAST_RELEASE_TAG"
git fetch --quiet --tags
CHANGED=$(git diff --name-only "$LAST_RELEASE_TAG" HEAD | grep -E '\.(lua|txt|md|xml|addon|dds)$' || true)
if [ -z "$CHANGED" ]; then
echo "✅ No relevant file changes since $LAST_RELEASE_TAG."
echo "should_release=false" >> $GITHUB_OUTPUT
else
echo "✅ Changes detected:"
echo "$CHANGED"
echo "should_release=true" >> $GITHUB_OUTPUT
fi
- name: get repo name
run: echo "REPO_NAME=${{ github.event.repository.name }}" >> $GITHUB_ENV
- name: Get current year, month and day
if: steps.check_changes.outputs.should_release == 'true'
run: |
echo "BUILD_DATE_YEAR=$(date -u +'%Y')" >> $GITHUB_ENV
echo "BUILD_DATE_MONTH=$(date -u +'%m')" >> $GITHUB_ENV
echo "BUILD_DATE_DAY=$(date -u +'%d')" >> $GITHUB_ENV
echo "BUILD_DATE_NUMBER=$(date +'%Y%m%d')" >> $GITHUB_ENV
echo "BUILD_DATE_WITH_DOT=$(date +'%Y.%m.%d')" >> $GITHUB_ENV
echo "BUILD_DATE_WITH_HYPHEN=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
- name: Create env variables
if: steps.check_changes.outputs.should_release == 'true'
run: |
addon_name="${{ env.REPO_NAME }}"
version="${{ env.BUILD_DATE_WITH_HYPHEN }}"
echo "ADDON_NAME=$addon_name" >> $GITHUB_ENV
echo "ADDON_VERSION=$version" >> $GITHUB_ENV
echo "ZIP_FULL_NAME_PC=${addon_name}-${version}-pc.zip" >> $GITHUB_ENV
echo "ZIP_FULL_NAME_CONSOLE=${addon_name}-${version}-console.zip" >> $GITHUB_ENV
- name: Replace placeholders with current date
if: steps.check_changes.outputs.should_release == 'true'
run: |
sed -i "s/version = \"dev\"/version = \"${{ env.ADDON_VERSION }}\"/g" ${{ env.ADDON_NAME }}.lua
sed -i "s/## Version: dev/## Version: ${{ env.ADDON_VERSION }}/g" ${{ env.ADDON_NAME }}.addon
sed -i "s/## AddOnVersion: 99999999/## AddOnVersion: ${{ env.BUILD_DATE_NUMBER }}/g" ${{ env.ADDON_NAME }}.addon
- name: Create ZIP archive
if: steps.check_changes.outputs.should_release == 'true'
run: |
REPO_FOLDER=$(pwd)
TMP_FOLDER_PC="/tmp/pc/${{ env.ADDON_NAME }}"
TMP_FOLDER_CONSOLE="/tmp/console/${{ env.ADDON_NAME }}"
# Define the path to the ignore pattern file
ignore_file=".build-ignore"
# Read and process ignore patterns into a single line
exclude_patterns=$(cat "$ignore_file" | awk '{print "--exclude " $0}' | tr '\n' ' ')
# Make folder and copy content for PC
mkdir -p $TMP_FOLDER_PC
rsync -a --quiet $exclude_patterns --exclude "Console" "$REPO_FOLDER/" "$TMP_FOLDER_PC/"
# Make folder and copy content for Console
mkdir -p $TMP_FOLDER_CONSOLE
rsync -a --quiet $exclude_patterns --exclude "PC" "$REPO_FOLDER/" "$TMP_FOLDER_CONSOLE/"
# create zip for PC
(cd /tmp/pc && zip -r --quiet "$REPO_FOLDER/${{ env.ZIP_FULL_NAME_PC }}" "${{ env.ADDON_NAME }}")
# create zip for Console
(cd /tmp/console && zip -r --quiet "$REPO_FOLDER/${{ env.ZIP_FULL_NAME_CONSOLE }}" "${{ env.ADDON_NAME }}")
- name: Extract latest changelog entry
if: steps.check_changes.outputs.should_release == 'true'
run: |
awk '/^## / { if (!found) { found=1; print; next } else { exit } } found' CHANGELOG.md > latest_changes.md
cat latest_changes.md
- name: Create GitHub Release
if: steps.check_changes.outputs.should_release == 'true'
uses: ncipollo/release-action@v1
with:
name: "${{ env.ADDON_VERSION }}"
commit: ${{ github.ref }}
tag: "${{ env.ADDON_VERSION }}"
artifacts: "${{ env.ZIP_FULL_NAME_PC }},${{ env.ZIP_FULL_NAME_CONSOLE }}"
artifactContentType: application/zip
bodyFile: latest_changes.md
allowUpdates: true
makeLatest: true
- name: Test Upload to ESOUI
uses: m00nyONE/esoui-upload@main
if: steps.check_changes.outputs.should_release == 'true'
with:
api_key: ${{ secrets.ESOUI_API_KEY }}
addon_id: '4155'
version: ${{ env.ADDON_VERSION }}
zip_file: ${{ env.ZIP_FULL_NAME_PC }}
changelog_file: 'CHANGELOG.md'
test: true
- name: Upload to ESOUI
uses: m00nyONE/esoui-upload@main
if: steps.check_changes.outputs.should_release == 'true'
with:
api_key: ${{ secrets.ESOUI_API_KEY }}
addon_id: '4155'
version: ${{ env.ADDON_VERSION }}
zip_file: ${{ env.ZIP_FULL_NAME_PC }}
changelog_file: 'CHANGELOG.md'
- name: Upload to BNET
uses: m00nyONE/bnet-upload@main
if: steps.check_changes.outputs.should_release == 'true'
with:
BNET_USERNAME: ${{ secrets.BNET_USERNAME }}
BNET_PASSWORD: ${{ secrets.BNET_PASSWORD }}
addon_id: "5eaa0d91-47f8-4c5e-8673-db3ab518a752"
version: ${{ env.ADDON_VERSION }}
zip_file: ${{ env.ZIP_FULL_NAME_CONSOLE }}
release_notes_file: latest_changes.md