diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index ee3eb86..4e2f435 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -12,24 +12,21 @@ on: env: BINARY_NAME: hotsave - ARTIFACT_NAME: hotsave-artifact + ARTIFACT_NAME_VERSION: hotsave-version + ARTIFACT_NAME_LINUX: hotsave-linux + ARTIFACT_NAME_MACOS: hotsave-macos LINUX_TARGET_x86_64: x86_64-unknown-linux-gnu + MACOS_TARGET_x86_64: x86_64-apple-darwin jobs: - build: - name: Build cli application + store_version: + name: Determine version runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Setup tooling - run: | - sudo apt-get install -y libxi-dev libxtst-dev - rustup update stable - rustup default stable - cargo install cargo-edit - name: Install GitVersion uses: gittools/actions/gitversion/setup@v3.0.2 with: @@ -43,30 +40,104 @@ jobs: 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 $GitVersion_FullSemVer + 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 - if: github.event_name == 'push' uses: actions/upload-artifact@v4 with: - name: ${{ env.ARTIFACT_NAME }} + 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 publish: if: github.event_name == 'push' name: Create release runs-on: ubuntu-latest - needs: build + needs: | + store_version + build_linux + build_macos steps: - name: Download artifact uses: actions/download-artifact@v4 with: - name: ${{ env.ARTIFACT_NAME }} + 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: Load version run: echo "VERSION=$(cat ./dist/version.txt)" >> $GITHUB_ENV