Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 0 additions & 25 deletions .github/workflows/discord.yml

This file was deleted.

69 changes: 48 additions & 21 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -1,36 +1,63 @@
name: Publish build
name: Publish API

on:
push:
branches:
- master
- release
paths:
- "headdb-api/**"
- "pom.xml"
- ".github/workflows/publish.yml"
workflow_dispatch:

jobs:
publish:
name: Upload build
deploy-api:
name: Deploy headdb-api
runs-on: ubuntu-latest
if: contains(github.event.head_commit.message, '[ci skip]') == false
if: github.event_name != 'push' || !contains(github.event.head_commit.message, '[ci skip]')
permissions:
contents: read

steps:
- uses: actions/checkout@v4
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up JDK 17
- name: Set up JDK 25
uses: actions/setup-java@v4
with:
distribution: 'adopt'
java-version: '17'
java-package: jdk
architecture: x64
distribution: temurin
java-version: "25"
cache: maven

- name: Build with Maven
run: mvn -B package
- name: Configure Maven credentials
env:
NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }}
NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
run: |
if [ -z "${NEXUS_USERNAME}" ] || [ -z "${NEXUS_PASSWORD}" ]; then
echo "NEXUS_USERNAME and NEXUS_PASSWORD secrets are required." >&2
exit 1
fi

- name: Upload build
uses: WalshyDev/blob-builds/gh-action@main
with:
project: HeadDB
releaseChannel: ${{ github.ref == 'refs/heads/release' && 'Release' || 'Dev' }}
apiToken: ${{ secrets.BUILDS_API_TOKEN }}
file: './target/HeadDB.jar'
releaseNotes: ${{ github.event.head_commit.message }}
mkdir -p "${HOME}/.m2"
cat > "${HOME}/.m2/settings.xml" <<EOF
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>nexus-releases</id>
<username>${NEXUS_USERNAME}</username>
<password>${NEXUS_PASSWORD}</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>${NEXUS_USERNAME}</username>
<password>${NEXUS_PASSWORD}</password>
</server>
</servers>
</settings>
EOF

- name: Deploy API artifact
run: mvn -B -ntp -f headdb-api/pom.xml -DskipTests deploy
122 changes: 122 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
name: GitHub Release

on:
push:
branches:
- master
tags:
- "v*"
workflow_dispatch:
inputs:
tag:
description: "Tag to release (example: v6.0.2)"
required: true
type: string

permissions:
contents: write

concurrency:
group: github-release
cancel-in-progress: false

jobs:
release:
name: Create release
runs-on: ubuntu-latest
env:
REQUESTED_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_type == 'tag' && github.ref_name || '' }}

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ env.REQUESTED_TAG || github.sha }}
fetch-depth: 0

- name: Set up JDK 25
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "25"
cache: maven

- name: Resolve release metadata
id: metadata
shell: bash
run: |
VERSION="$(mvn -q help:evaluate -Dexpression=project.version -DforceStdout)"
VERSION="$(printf '%s' "${VERSION}" | tr -d '\r')"

if [[ -z "${VERSION}" || "${VERSION}" == *-SNAPSHOT ]]; then
echo "The Maven project version must be a non-SNAPSHOT release version." >&2
exit 1
fi

if [[ -n "${REQUESTED_TAG}" ]]; then
RELEASE_TAG="${REQUESTED_TAG}"
else
RELEASE_TAG="v${VERSION}"
fi

if [[ "${RELEASE_TAG}" != "v${VERSION}" ]]; then
echo "Tag ${RELEASE_TAG} does not match the Maven project version ${VERSION}." >&2
exit 1
fi

if [[ "${GITHUB_EVENT_NAME}" == "push" && "${GITHUB_REF_TYPE}" == "branch" ]] &&
git rev-parse --verify --quiet "refs/tags/${RELEASE_TAG}" >/dev/null; then
echo "Release tag ${RELEASE_TAG} already exists; nothing to publish." >> "${GITHUB_STEP_SUMMARY}"
echo "should_release=false" >> "${GITHUB_OUTPUT}"
exit 0
fi

CHANGELOG_FILE="changelog/${VERSION}.md"

echo "should_release=true" >> "${GITHUB_OUTPUT}"
echo "tag=${RELEASE_TAG}" >> "${GITHUB_OUTPUT}"
echo "version=${VERSION}" >> "${GITHUB_OUTPUT}"

if [ -f "${CHANGELOG_FILE}" ]; then
echo "has_changelog=true" >> "${GITHUB_OUTPUT}"
echo "changelog_file=${CHANGELOG_FILE}" >> "${GITHUB_OUTPUT}"
else
echo "has_changelog=false" >> "${GITHUB_OUTPUT}"
fi

- name: Build release artifacts
if: steps.metadata.outputs.should_release == 'true'
run: mvn -B -ntp verify

- name: Create release tag
if: steps.metadata.outputs.should_release == 'true' && github.event_name == 'push' && github.ref_type == 'branch'
env:
RELEASE_TAG: ${{ steps.metadata.outputs.tag }}
RELEASE_VERSION: ${{ steps.metadata.outputs.version }}
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git tag --annotate "${RELEASE_TAG}" --message "HeadDB ${RELEASE_VERSION}"
git push origin "${RELEASE_TAG}"

- name: Create release from changelog
if: steps.metadata.outputs.should_release == 'true' && steps.metadata.outputs.has_changelog == 'true'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.metadata.outputs.tag }}
name: HeadDB ${{ steps.metadata.outputs.version }}
body_path: ${{ steps.metadata.outputs.changelog_file }}
files: |
headdb-core/target/HeadDB-*.jar
fail_on_unmatched_files: true

- name: Create release with generated notes
if: steps.metadata.outputs.should_release == 'true' && steps.metadata.outputs.has_changelog != 'true'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.metadata.outputs.tag }}
name: HeadDB ${{ steps.metadata.outputs.version }}
generate_release_notes: true
files: |
headdb-core/target/HeadDB-*.jar
fail_on_unmatched_files: true
Loading