Skip to content

ci: add release

ci: add release #2

Workflow file for this run

name: Create Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
build-and-release:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
build-type: [Release]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install dependencies (Linux)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y build-essential cmake
- name: Configure CMake (Unix)
if: runner.os != 'Windows'
run: cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.build-type }}
- name: Configure CMake (Windows)
if: runner.os == 'Windows'
run: cmake -B build -G "Visual Studio 17 2022"
- name: Build (Unix)
if: runner.os != 'Windows'
run: cmake --build build
- name: Build (Windows)
if: runner.os == 'Windows'
run: cmake --build build --config ${{ matrix.build-type }}
- name: Run Tests (Unix)
if: runner.os != 'Windows'
run: cd build && ./hash_table_demo
- name: Run Tests (Windows)
if: runner.os == 'Windows'
run: cd build && .\${{ matrix.build-type }}\hash_table_demo.exe
- name: Upload Binary Artifact
uses: actions/upload-artifact@v4
with:
name: hash_table_demo-${{ runner.os }}
path: ${{ runner.os == 'Windows' && 'build/Release/hash_table_demo.exe' || 'build/hash_table_demo' }}
retention-days: 1
create-release:
needs: build-and-release
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Prepare release assets
run: |
mkdir release-assets
cp artifacts/hash_table_demo-Linux/hash_table_demo release-assets/hash_table_demo-linux-x64
cp artifacts/hash_table_demo-macOS/hash_table_demo release-assets/hash_table_demo-macos-arm64
cp artifacts/hash_table_demo-Windows/hash_table_demo.exe release-assets/hash_table_demo-windows-x64.exe
- name: Generate release notes
run: |
cat > release-notes.md << 'EOF'
## 🚀 Hash Table v${{ github.ref_name }}
### ✅ Проверено на платформах:
- 🐧 Linux (x64)
- 🍎 macOS (arm64/x64)
- 🪟 Windows (x64)
### 📦 Сборка из исходников:
\`\`\`bash
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
\`\`\`
Полные изменения: $(git log $(git describe --tags --abbrev=0 HEAD^)..HEAD --oneline)
EOF
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
name: "Release ${{ github.ref_name }}"
body_path: release-notes.md
files: |
release-assets/hash_table_demo-linux-x64
release-assets/hash_table_demo-macos-arm64
release-assets/hash_table_demo-windows-x64.exe
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}