Skip to content

Allow CI/CD workflow to create releases #6

Allow CI/CD workflow to create releases

Allow CI/CD workflow to create releases #6

Workflow file for this run

name: CI/CD
on: push
permissions:
contents: write
jobs:
test:
name: Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Test
run: cargo test --verbose
build-linux:
name: Build Linux binary
needs: [test]
runs-on: ubuntu-latest
strategy:
matrix:
target:
- x86_64-unknown-linux-gnu
- aarch64-unknown-linux-gnu
- i686-unknown-linux-gnu
steps:
- uses: actions/checkout@v3
- name: Install gcc-aarch64-linux-gnu
if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }}
run: sudo apt-get update && sudo apt-get install gcc-aarch64-linux-gnu
- name: Install 32-bit gcc
if: ${{ matrix.target == 'i686-unknown-linux-gnu' }}
run: sudo apt-get update && sudo apt-get install gcc-multilib
- name: Add target with rustup
run: rustup target add ${{ matrix.target }}
- name: Build release
run: cargo build --release --target=${{ matrix.target }}
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/yangfmt
build-macos:
name: Build MacOS binary
needs: [test]
runs-on: macos-latest
strategy:
matrix:
target:
- x86_64-apple-darwin
- aarch64-apple-darwin
steps:
- uses: actions/checkout@v3
- name: Add target with rustup
run: rustup target add ${{ matrix.target }}
- name: Build release
run: cargo build --release --target=${{ matrix.target }}
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/yangfmt
build-windows:
name: Build Windows binary
needs: [test]
runs-on: windows-latest
strategy:
matrix:
target:
- x86_64-pc-windows-msvc
- i686-pc-windows-msvc
steps:
- uses: actions/checkout@v3
- name: Add target with rustup
run: rustup target add ${{ matrix.target }}
- name: Build release
run: cargo build --release --target=${{ matrix.target }}
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/yangfmt.exe
create-release:
name: Create release
needs: [build-linux, build-macos, build-windows]
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
runs-on: ubuntu-latest
steps:
- name: Create release temporary directory
run: mkdir artifacts && mkdir releases
- uses: actions/download-artifact@v3
with:
path: artifacts
- name: Mark build artifacts as executable
run: find artifacts -type f -exec chmod 755 {} \;
- name: Zip up the build artifacts
run: find artifacts -type f -exec bash -c 'zip -r releases/$(basename $(dirname {})).zip -j {}' \;
- name: Create release
uses: softprops/action-gh-release@v1
with:
files: releases/*.zip