diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml
index a98cb18..402a871 100644
--- a/.github/workflows/workflow.yml
+++ b/.github/workflows/workflow.yml
@@ -34,31 +34,31 @@ jobs:
name: Init
runs-on: ubuntu-latest
outputs:
- archive-name: ${{ steps.vars.outputs.archive-name }}
- artifact-name: ${{ steps.vars.outputs.artifact-name }}
release-name: ${{ steps.vars.outputs.release-name }}
release-tag: ${{ steps.vars.outputs.release-tag }}
safe-ref: ${{ steps.vars.outputs.safe-ref }}
short-sha: ${{ steps.vars.outputs.short-sha }}
+ version: ${{ steps.vars.outputs.version }}
steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+
- name: Compute workflow variables
id: vars
shell: bash
run: |
short_sha="${GITHUB_SHA::7}"
safe_ref="$(echo "${GITHUB_REF_NAME}" | tr '[:upper:]' '[:lower:]' | sed 's#[^a-z0-9._-]#-#g')"
- archive_name="sharpemu-win64-${short_sha}.zip"
- artifact_name="sharpemu-win64-${short_sha}"
- release_tag="win64-${safe_ref}-${short_sha}"
- release_name="SharpEmu win64 ${short_sha}"
+ version="$(python3 -c 'import sys, xml.etree.ElementTree as ET; version = ET.parse("Directory.Build.props").getroot().findtext(".//SharpEmuVersion"); sys.exit("Directory.Build.props is missing SharpEmuVersion") if not version or not version.strip() else print(version.strip())')"
+ release_tag="v${version}"
+ release_name="SharpEmu v${version}"
{
echo "short-sha=${short_sha}"
echo "safe-ref=${safe_ref}"
- echo "archive-name=${archive_name}"
- echo "artifact-name=${artifact_name}"
echo "release-tag=${release_tag}"
echo "release-name=${release_name}"
+ echo "version=${version}"
} >> "$GITHUB_OUTPUT"
reuse:
@@ -112,7 +112,8 @@ jobs:
run: |
New-Item -ItemType Directory -Path $env:RELEASE_DIR -Force | Out-Null
- $archivePath = Join-Path $env:RELEASE_DIR "${{ needs.init.outputs.archive-name }}"
+ $archiveName = "sharpemu-${{ needs.init.outputs.version }}-win-x64-${{ needs.init.outputs.short-sha }}.zip"
+ $archivePath = Join-Path $env:RELEASE_DIR $archiveName
if (Test-Path $archivePath) {
Remove-Item $archivePath -Force
}
@@ -122,8 +123,8 @@ jobs:
- name: Upload build artifact
uses: actions/upload-artifact@v7
with:
- name: ${{ needs.init.outputs.artifact-name }}
- path: ${{ env.RELEASE_DIR }}\${{ needs.init.outputs.archive-name }}
+ name: sharpemu-win-x64-${{ needs.init.outputs.short-sha }}
+ path: ${{ env.RELEASE_DIR }}\sharpemu-${{ needs.init.outputs.version }}-win-x64-${{ needs.init.outputs.short-sha }}.zip
if-no-files-found: error
build-posix:
@@ -175,14 +176,14 @@ jobs:
run: |
mkdir -p "$RELEASE_DIR"
# tar keeps the executable bit, which zip would drop.
- tar -czf "$RELEASE_DIR/sharpemu-${{ matrix.rid }}-${{ needs.init.outputs.short-sha }}.tar.gz" \
+ tar -czf "$RELEASE_DIR/sharpemu-${{ needs.init.outputs.version }}-${{ matrix.rid }}-${{ needs.init.outputs.short-sha }}.tar.gz" \
-C "$PUBLISH_DIR" .
- name: Upload build artifact
uses: actions/upload-artifact@v7
with:
name: sharpemu-${{ matrix.rid }}-${{ needs.init.outputs.short-sha }}
- path: ${{ env.RELEASE_DIR }}/sharpemu-${{ matrix.rid }}-${{ needs.init.outputs.short-sha }}.tar.gz
+ path: ${{ env.RELEASE_DIR }}/sharpemu-${{ needs.init.outputs.version }}-${{ matrix.rid }}-${{ needs.init.outputs.short-sha }}.tar.gz
if-no-files-found: error
release:
@@ -190,77 +191,39 @@ jobs:
needs:
- init
- build
- if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref == 'refs/heads/main')
- runs-on: ubuntu-latest
- permissions:
- contents: write
- steps:
- - name: Download build artifact
- uses: actions/download-artifact@v8
- with:
- name: ${{ needs.init.outputs.artifact-name }}
- path: release
-
- - name: Create or update release
- shell: bash
- env:
- ARCHIVE_NAME: ${{ needs.init.outputs.archive-name }}
- GH_REPO: ${{ github.repository }}
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- RELEASE_NAME: ${{ needs.init.outputs.release-name }}
- RELEASE_TAG: ${{ needs.init.outputs.release-tag }}
- run: |
- asset_path="release/${ARCHIVE_NAME}"
- notes="Automated Windows build for commit ${GITHUB_SHA}."
-
- if gh release view "${RELEASE_TAG}" >/dev/null 2>&1; then
- gh release upload "${RELEASE_TAG}" "${asset_path}" --clobber
- gh release edit "${RELEASE_TAG}" --title "${RELEASE_NAME}" --notes "${notes}"
- else
- gh release create "${RELEASE_TAG}" "${asset_path}" \
- --title "${RELEASE_NAME}" \
- --notes "${notes}" \
- --target "${GITHUB_SHA}"
- fi
-
- release-posix:
- name: Publish GitHub Release (${{ matrix.rid }})
- needs:
- - init
- build-posix
if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref == 'refs/heads/main')
runs-on: ubuntu-latest
permissions:
contents: write
- strategy:
- fail-fast: false
- matrix:
- rid: [linux-x64, osx-x64]
steps:
- - name: Download build artifact
+ - name: Download build artifacts
uses: actions/download-artifact@v8
with:
- name: sharpemu-${{ matrix.rid }}-${{ needs.init.outputs.short-sha }}
path: release
- name: Create or update release
shell: bash
env:
- ARCHIVE_NAME: sharpemu-${{ matrix.rid }}-${{ needs.init.outputs.short-sha }}.tar.gz
GH_REPO: ${{ github.repository }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- RELEASE_NAME: SharpEmu ${{ matrix.rid }} ${{ needs.init.outputs.short-sha }}
- RELEASE_TAG: ${{ matrix.rid }}-${{ needs.init.outputs.safe-ref }}-${{ needs.init.outputs.short-sha }}
- RID: ${{ matrix.rid }}
+ RELEASE_NAME: ${{ needs.init.outputs.release-name }}
+ RELEASE_TAG: ${{ needs.init.outputs.release-tag }}
+ VERSION: ${{ needs.init.outputs.version }}
run: |
- asset_path="release/${ARCHIVE_NAME}"
- notes="Automated ${RID} build for commit ${GITHUB_SHA}."
+ mapfile -t assets < <(find release -type f \( -name '*.zip' -o -name '*.tar.gz' \) | sort)
+ if [ "${#assets[@]}" -eq 0 ]; then
+ echo "No release assets found." >&2
+ exit 1
+ fi
+
+ notes="Automated SharpEmu v${VERSION} build for commit ${GITHUB_SHA}."
if gh release view "${RELEASE_TAG}" >/dev/null 2>&1; then
- gh release upload "${RELEASE_TAG}" "${asset_path}" --clobber
+ gh release upload "${RELEASE_TAG}" "${assets[@]}" --clobber
gh release edit "${RELEASE_TAG}" --title "${RELEASE_NAME}" --notes "${notes}"
else
- gh release create "${RELEASE_TAG}" "${asset_path}" \
+ gh release create "${RELEASE_TAG}" "${assets[@]}" \
--title "${RELEASE_NAME}" \
--notes "${notes}" \
--target "${GITHUB_SHA}"
diff --git a/Directory.Build.props b/Directory.Build.props
index c732911..9e55dab 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -10,6 +10,8 @@ SPDX-License-Identifier: GPL-2.0-or-later
enable
true
true
+ 0.0.1
+ $(SharpEmuVersion)
$([MSBuild]::NormalizeDirectory('$(MSBuildThisFileDirectory)'))
diff --git a/src/SharpEmu.CLI/SharpEmu.CLI.csproj b/src/SharpEmu.CLI/SharpEmu.CLI.csproj
index 20b9985..219d12f 100644
--- a/src/SharpEmu.CLI/SharpEmu.CLI.csproj
+++ b/src/SharpEmu.CLI/SharpEmu.CLI.csproj
@@ -25,7 +25,6 @@ SPDX-License-Identifier: GPL-2.0-or-later
true
enable
true
- 0.0.1
true
true
true
diff --git a/src/SharpEmu.GUI/SharpEmu.GUI.csproj b/src/SharpEmu.GUI/SharpEmu.GUI.csproj
index 86415a5..668e97f 100644
--- a/src/SharpEmu.GUI/SharpEmu.GUI.csproj
+++ b/src/SharpEmu.GUI/SharpEmu.GUI.csproj
@@ -9,7 +9,6 @@ SPDX-License-Identifier: GPL-2.0-or-later
the executable is started without arguments. -->
false
- 0.0.1
true