Enhance version handling in CI workflows and update artifact naming conventions

This commit is contained in:
xxanqw committed 2025-11-26 13:19:25 +02:00
1 parent cc5c6ba553
commit 5e2888348e
3 files changed
+63 -19

No files matched your search

+51 -14
View File
@@ -9,9 +9,43 @@ permissions:
contents: write
jobs:
extract-version:
name: Extract Version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get_version.outputs.version }}
version_valid: ${{ steps.validate_version.outputs.valid }}
steps:
- uses: actions/checkout@v4
- name: Get version from Cargo.toml
id: get_version
run: |
VERSION=$(grep '^version =' Cargo.toml | sed -E 's/version = "([^"]+)"/\1/')
echo "Extracted version: $VERSION"
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Validate SemVer
id: validate_version
run: |
VERSION=${{ steps.get_version.outputs.version }}
# Comprehensive SemVer validation regex
# Supports: MAJOR.MINOR.PATCH-PRERELEASE+BUILD
# Where PRERELEASE can be: alpha, beta, rc.1, etc.
# Where BUILD can be: build.123, sha.abc123, etc.
if [[ ! $VERSION =~ ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?(\+([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?$ ]]; then
echo "Error: Version '$VERSION' is not a valid SemVer string"
echo "valid=false" >> $GITHUB_OUTPUT
exit 1
else
echo "Version '$VERSION' is valid SemVer"
echo "valid=true" >> $GITHUB_OUTPUT
fi
build-windows:
name: Build Windows
runs-on: windows-latest
needs: extract-version
strategy:
matrix:
target:
@@ -32,17 +66,18 @@ jobs:
run: |
mkdir artifacts
$arch = "${{ matrix.target }}".Split('-')[0]
copy "target\${{ matrix.target }}\release\mikusays.exe" "artifacts\mikusays-windows-$arch.exe"
$version = "${{ needs.extract-version.outputs.version }}"
copy "target\${{ matrix.target }}\release\mikusays.exe" "artifacts\mikusays-windows-$arch-$version.exe"
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: mikusays-windows-${{ matrix.target }}
path: artifacts\*
build-linux:
name: Build Linux
runs-on: ubuntu-latest
needs: extract-version
strategy:
matrix:
include:
@@ -79,7 +114,8 @@ jobs:
- name: Prepare artifact
run: |
mkdir -p artifacts
cp target/${{ matrix.target }}/release/mikusays artifacts/mikusays-linux-${{ matrix.arch }}
version="${{ needs.extract-version.outputs.version }}"
cp target/${{ matrix.target }}/release/mikusays artifacts/mikusays-linux-${{ matrix.arch }}-$version
chmod +x artifacts/mikusays-linux-${{ matrix.arch }}
- name: Upload artifact
@@ -87,10 +123,10 @@ jobs:
with:
name: mikusays-linux-${{ matrix.arch }}
path: artifacts/*
build-macos:
name: Build macOS
runs-on: macos-latest
needs: extract-version
strategy:
matrix:
include:
@@ -115,7 +151,8 @@ jobs:
- name: Prepare artifact
run: |
mkdir -p artifacts
cp target/${{ matrix.target }}/release/mikusays artifacts/mikusays-macos-${{ matrix.arch }}
version="${{ needs.extract-version.outputs.version }}"
cp target/${{ matrix.target }}/release/mikusays artifacts/mikusays-macos-${{ matrix.arch }}-$version
chmod +x artifacts/mikusays-macos-${{ matrix.arch }}
- name: Upload artifact
@@ -127,8 +164,8 @@ jobs:
create-release:
name: Create Release
runs-on: ubuntu-latest
needs: [build-windows, build-linux, build-macos]
if: startsWith(github.ref, 'refs/tags/v')
needs: [extract-version, build-windows, build-linux, build-macos]
if: startsWith(github.ref, 'refs/tags/v') && needs.extract-version.outputs.version_valid == 'true'
steps:
- uses: actions/checkout@v4
@@ -144,7 +181,7 @@ jobs:
- name: Create Release
uses: softprops/action-gh-release@v1
with:
files: artifacts/*
files: artifacts/mikusays-*
draft: false
prerelease: false
generate_release_notes: true
@@ -152,15 +189,15 @@ jobs:
## Downloads
### Windows
- **x64**: `mikusays-windows-x86_64.exe`
- **ARM64**: `mikusays-windows-aarch64.exe`
- **x64**: `mikusays-windows-x86_64-${{ needs.extract-version.outputs.version }}.exe`
- **ARM64**: `mikusays-windows-aarch64-${{ needs.extract-version.outputs.version }}.exe`
### Windows Installer
- **Any**: `mikusays-windows-inst-any.exe`
### Linux (binary)
- **x64**: `mikusays-linux-x64`
- **ARM64**: `mikusays-linux-arm64`
- **x64**: `mikusays-linux-x64-${{ needs.extract-version.outputs.version }}`
- **ARM64**: `mikusays-linux-arm64-${{ needs.extract-version.outputs.version }}`
### Debian Package
- **x64 Debian Package**: `mikusays-debian-x64.deb`
@@ -174,8 +211,8 @@ jobs:
Information on how to add it available here https://apt.xxanqw.pp.ua
### macOS
- **Intel (x64)**: `mikusays-macos-x64`
- **Apple Silicon (ARM64)**: `mikusays-macos-arm64`
- **Intel (x64)**: `mikusays-macos-x64-${{ needs.extract-version.outputs.version }}`
- **Apple Silicon (ARM64)**: `mikusays-macos-arm64-${{ needs.extract-version.outputs.version }}`
## Usage
```bash