diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index a98cb18..42a6499 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: @@ -73,7 +73,7 @@ jobs: uses: fsfe/reuse-action@v6 build: - name: Build Archive + name: Build win-x64 needs: - init - 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