name: ci
on:
push:
branches:
- main
- dev
tags:
- "v[0-9]+.[0-9]+.[0-9]+**"
jobs:
matrix:
name: Create Matrix
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.x.outputs.matrix }}
steps:
- uses: actions/checkout@v3
- id: x
run: |
MATRIX=$(jq -rc '.' .github/workflows/matrix.json)
echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
version:
name: Check Version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.x.outputs.version }}
steps:
- uses: actions/checkout@v3
- run: git fetch --tags origin
- id: x
run: |
VERSION=$(make next-prerelease-version)
echo "version=$VERSION" >> $GITHUB_OUTPUT
build-and-test:
name: Build & Test
needs: [matrix]
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}
steps:
- uses: actions/checkout@v3
- run: make ci-git-user
- name: Run tests
run: make ci-test
release:
name: Release on GitHub
needs: [matrix, build-and-test, version]
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}
steps:
- uses: actions/checkout@v3
- run: |
TARGET_DIR=./target/${{ matrix.target }}
echo "TARGET_DIR=$TARGET_DIR" >> $GITHUB_ENV
echo "BINFILE=$TARGET_DIR/release/git-nu" >> $GITHUB_ENV
- name: Build binary
run: make ci-build
env:
CARGO_BUILD_TARGET_DIR: ${{ env.TARGET_DIR }}
- name: Strip release binary
if: >-
(matrix.build == 'linux' || matrix.build == 'linux-arm' || matrix.build == 'macos')
run: strip ${{ env.BINFILE }}
- name: Build archive
run: |
STAGING="git-nu-v${{ needs.version.outputs.version }}-${{ matrix.target }}"
mkdir -p "$STAGING"
cp ${{ env.BINFILE }} "$STAGING"
tar czf "$STAGING.tar.gz" "$STAGING"
echo "ASSET=$STAGING.tar.gz" >> $GITHUB_ENV
- name: Release
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ needs.version.outputs.version }}
files: ${{ env.ASSET }}
crates-io-publish:
name: Publish to Crates.io
needs: [build-and-test, version]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Get git tags
run: git fetch --tags origin
- run: make ci-git-user
- name: Increment prerelease version number
run: make ci-increment-prerelease
- uses: katyo/publish-crates@v2
with:
registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}