name: Create Release on Push (GitHub) on: push: branches: - master # or your default branch workflow_dispatch: # Allows manual triggering of the workflow jobs: build_linux_amd64: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install build dependencies run: sudo apt-get update && sudo apt-get install -y build-essential - name: Build project for Linux (AMD64) run: make all working-directory: ${{ github.workspace }} - name: Upload Linux AMD64 artifact uses: actions/upload-artifact@v4 with: name: agg-linux-amd64 path: bin/agg build_linux_aarch64: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install cross-compilation tools run: | sudo apt-get update sudo apt-get install -y build-essential gcc-aarch64-linux-gnu - name: Build project for Linux (AArch64) run: make CC=aarch64-linux-gnu-gcc all working-directory: ${{ github.workspace }} - name: Upload Linux AArch64 artifact uses: actions/upload-artifact@v4 with: name: agg-linux-aarch64 path: bin/agg build_windows_amd64: runs-on: windows-latest steps: - name: Checkout code uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install MinGW/GCC and Make run: | choco install mingw --limit-features choco install make --limit-features # Add MinGW bin directory to PATH for the current session "C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding Utf8 -Append shell: powershell - name: Build project for Windows (AMD64) run: make all working-directory: ${{ github.workspace }} shell: pwsh - name: Upload Windows AMD64 artifact uses: actions/upload-artifact@v4 with: name: agg-windows-amd64 path: bin/agg.exe create_release_and_upload_assets: runs-on: ubuntu-latest needs: [build_linux_amd64, build_linux_aarch64, build_windows_amd64] permissions: contents: write # Grant write permissions to the GITHUB_TOKEN for creating releases steps: - name: Checkout code uses: actions/checkout@v3 with: fetch-depth: 0 - name: Get latest unique tag id: get_tag run: |\ LATEST_TAG=$(git tag --sort=-v:refname | head -n1 || echo "v0.0.0") echo "Debug: Initial LATEST_TAG: $LATEST_TAG"\ NEW_TAG="" if [[ "$LATEST_TAG" =~ ^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$ ]]; then MAJOR=${BASH_REMATCH[1]}\ MINOR=${BASH_REMATCH[2]}\ PATCH=${BASH_REMATCH[3]}\ echo "Debug: Parsed: MAJOR=$MAJOR, MINOR=$MINOR, PATCH=$PATCH"\ while : ; do PATCH=$((PATCH + 1))\ CANDIDATE_TAG="v$MAJOR.$MINOR.$PATCH"\ echo "Debug: Trying CANDIDATE_TAG: $CANDIDATE_TAG"\ if ! git rev-parse "$CANDIDATE_TAG" >/dev/null 2>&1; then NEW_TAG=$CANDIDATE_TAG\ echo "Debug: Found NEW_TAG: $NEW_TAG (unused)"\ break\ fi done else NEW_TAG="v0.0.1"\ echo "Debug: No previous semver tags found. Setting NEW_TAG: $NEW_TAG"\ fi echo "Debug: Final LATEST_TAG for ENV: $LATEST_TAG"\ echo "Debug: Final NEW_TAG for ENV: $NEW_TAG"\ echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV\ echo \\"NEW_TAG=$NEW_TAG\\" >> $GITHUB_ENV shell: bash - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ env.NEW_TAG }} release_name: Release ${{ env.NEW_TAG }} body: |\ Automated release created on push.\ Commit: ${{ github.sha }} draft: false prerelease: false - name: Download Linux AMD64 artifact uses: actions/download-artifact@v4 with: name: agg-linux-amd64 path: ./artifacts/linux-amd64/ - name: Download Linux AArch64 artifact uses: actions/download-artifact@v4 with: name: agg-linux-aarch64 path: ./artifacts/linux-aarch64/