Skip to content

build for macos (#5) #30

build for macos (#5)

build for macos (#5) #30

Workflow file for this run

name: CI-CD
on:
pull_request:
types: [opened, reopened, synchronize]
branches:
- main
push:
branches:
- main
workflow_dispatch:
env:
BINARY_NAME: hotsave
ARTIFACT_NAME_VERSION: hotsave-version
ARTIFACT_NAME_LINUX: hotsave-linux
ARTIFACT_NAME_MACOS: hotsave-macos
ARTIFACT_NAME_MACOS_ARM: hotsave-macos-arm
LINUX_TARGET_x86_64: x86_64-unknown-linux-gnu
MACOS_TARGET_x86_64: x86_64-apple-darwin
MACOS_TARGET_ARM: aarch64-apple-darwin
jobs:
store_version:
name: Determine version
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install GitVersion
uses: gittools/actions/gitversion/[email protected]
with:
versionSpec: "5.x"
- name: Determine version
uses: gittools/actions/gitversion/[email protected]
with:
useConfigFile: true
configFilePath: GitVersion.yml
- name: Store version
run: |
mkdir dist
echo "$GitVersion_FullSemVer" > ./dist/version.txt
- name: Publish artifact
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_VERSION }}
path: dist
build_linux:
name: Build for Linux
runs-on: ubuntu-latest
needs: store_version
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_VERSION }}
path: dist
- name: Load version
run: echo "VERSION=$(cat ./dist/version.txt)" >> $GITHUB_ENV
- name: Setup tooling
run: |
sudo apt-get install -y libxi-dev libxtst-dev
rustup update stable
rustup default stable
rustup target install ${{ env.LINUX_TARGET_x86_64 }}
cargo install cargo-edit
- name: Build Linux release
run: |
cargo set-version ${{ env.VERSION }}
cargo build --locked --release --bin ${{ env.BINARY_NAME }} --target=${{ env.LINUX_TARGET_x86_64 }}
- name: Create artifact
run: tar -C ./target/${{ env.LINUX_TARGET_x86_64 }}/release -zcvf ./dist/${{ env.LINUX_TARGET_x86_64 }}.tar.gz ./${{ env.BINARY_NAME }}
- name: Publish artifact
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_LINUX }}
path: dist
build_macos:
name: Build for macOS
runs-on: macos-latest
needs: store_version
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_VERSION }}
path: dist
- name: Load version
run: echo "VERSION=$(cat ./dist/version.txt)" >> $GITHUB_ENV
- name: Setup tooling
run: |
rustup update stable
rustup default stable
rustup target install ${{ env.MACOS_TARGET_x86_64 }}
cargo install cargo-edit
- name: Build macOS release
run: |
cargo set-version ${{ env.VERSION }}
cargo build --locked --release --bin ${{ env.BINARY_NAME }} --target=${{ env.MACOS_TARGET_x86_64 }}
- name: Create artifact
run: tar -C ./target/${{ env.MACOS_TARGET_x86_64 }}/release -zcvf ./dist/${{ env.MACOS_TARGET_x86_64 }}.tar.gz ./${{ env.BINARY_NAME }}
- name: Publish artifact
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_MACOS }}
path: dist
build_macos_arm:
name: Build for macOS ARM
runs-on: macos-latest
needs: store_version
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_VERSION }}
path: dist
- name: Load version
run: echo "VERSION=$(cat ./dist/version.txt)" >> $GITHUB_ENV
- name: Setup tooling
run: |
rustup update stable
rustup default stable
rustup target install ${{ env.MACOS_TARGET_ARM }}
cargo install cargo-edit
- name: Build macOS ARM release
run: |
cargo set-version ${{ env.VERSION }}
cargo build --locked --release --bin ${{ env.BINARY_NAME }} --target=${{ env.MACOS_TARGET_ARM }}
- name: Create artifact
run: tar -C ./target/${{ env.MACOS_TARGET_ARM }}/release -zcvf ./dist/${{ env.MACOS_TARGET_ARM }}.tar.gz ./${{ env.BINARY_NAME }}
- name: Publish artifact
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_MACOS_ARM }}
path: dist
publish:
if: github.event_name == 'push'
name: Create release
runs-on: ubuntu-latest
needs: [store_version, build_linux, build_macos, build_macos_arm]
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_VERSION }}
path: dist
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_LINUX }}
path: dist
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_MACOS }}
path: dist
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_MACOS_ARM }}
path: dist
- name: Load version
run: echo "VERSION=$(cat ./dist/version.txt)" >> $GITHUB_ENV
- name: Publish GitHub release
run: gh release create --repo $GITHUB_REPOSITORY --title "New release" --notes "This is a new automatically generated release" ${{ env.VERSION }} ./dist/*.tar.gz
env:
GH_TOKEN: ${{ secrets.RELEASE_PAT }}