Skip to content

enable modern CMake CRT handling #8

enable modern CMake CRT handling

enable modern CMake CRT handling #8

Workflow file for this run

name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
build-and-package:
strategy:
matrix:
include:
- os: ubuntu-latest
- os: windows-latest
- os: macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Set up CMake
uses: lukka/get-cmake@v3.29.0
with:
cmake-version: '3.25.x'
- name: Configure CMake
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_SLICK_SOCKET_TESTING=OFF -DBUILD_SLICK_SOCKET_EXAMPLES=OFF
- name: Build
run: |
cmake --build build --config Release
- name: Create Distribution (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
mkdir -p dist
xcopy /E /I include dist\include
mkdir dist\lib
mkdir dist\bin
if (Test-Path build\lib\Release\slick-socket.lib) { copy build\lib\Release\slick-socket.lib dist\lib\ }
if (Test-Path build\Release\slick-socket-shared.dll) { copy build\Release\slick-socket-shared.dll dist\bin\ }
- name: Create Distribution (Linux/macOS)
if: runner.os == 'Linux' || runner.os == 'macOS'
run: |
mkdir -p dist
cp -r include dist/
- name: Create Archive (Windows)
if: runner.os == 'Windows'
run: |
cd dist
cmake -E tar "cfv" "${{ github.workspace }}/slick-socket-Windows-${{ github.ref_name }}.zip" --format=zip .
- name: Create Archive (Linux)
if: runner.os == 'Linux'
run: |
cd dist
cmake -E tar "cfzv" "${{ github.workspace }}/slick-socket-Linux-${{ github.ref_name }}.tar.gz" .
- name: Create Archive (macOS)
if: runner.os == 'macOS'
run: |
cd dist
cmake -E tar "cfzv" "${{ github.workspace }}/slick-socket-macOS-${{ github.ref_name }}.tar.gz" .
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: slick-socket-${{ runner.os }}-${{ github.ref_name }}
path: slick-socket-*
retention-days: 30
extract-changelog:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get_version.outputs.VERSION }}
changelog: ${{ steps.changelog.outputs.CHANGELOG_CONTENT }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Extract version from tag
id: get_version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- name: Extract changelog for this version
id: changelog
run: |
if [ -f CHANGELOG ]; then
# Extract the section for this version from CHANGELOG
VERSION="${{ github.ref_name }}"
# Remove any suffix after the version (e.g., -test, -rc1)
VERSION_CLEAN=$(echo "$VERSION" | sed 's/-.*$//')
# Escape dots in version for regex
VERSION_ESCAPED=$(echo "$VERSION_CLEAN" | sed 's/\./\\./g')
# Use awk to extract content: start at version header (format: v1.5.2 - [date]), stop at next version header
CHANGES=$(awk "BEGIN{p=0} /^#$VERSION_ESCAPED/{p=1;next} /^#/{p=0} p" CHANGELOG | sed '/^$/d')
if [ -z "$CHANGES" ]; then
echo "CHANGELOG_CONTENT=No changelog entry found for this version." >> $GITHUB_OUTPUT
else
# Escape newlines for GitHub output
echo "CHANGELOG_CONTENT<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
fi
else
echo "CHANGELOG_CONTENT=CHANGELOG not found." >> $GITHUB_OUTPUT
fi
create-release:
runs-on: ubuntu-latest
needs: [extract-changelog, build-and-package]
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/download-artifact@v4
with:
path: artifacts
- name: Create Release
uses: softprops/action-gh-release@v1
with:
name: Release ${{ github.ref_name }}
body: |
## Changes
${{ needs.extract-changelog.outputs.changelog }}
draft: true
prerelease: false
generate_release_notes: false
files: |
artifacts/**/*.zip
artifacts/**/*.tar.gz