Skip to content

chore: bump to 0.1.4 #9

chore: bump to 0.1.4

chore: bump to 0.1.4 #9

Workflow file for this run

on:
push:
tags:
- "v*.*.*"
name: "Release"
jobs:
crate-info:
name: "Extract crate info"
runs-on: "ubuntu-latest"
outputs:
version: ${{ steps.derive.outputs.version }}
steps:
- id: "derive"
name: "Derive crate info from Git tag"
run: |
FULL_REF="${{ github.ref }}"
REGEX="^refs\/tags\/v(.*)$"
[[ $FULL_REF =~ $REGEX ]];
echo "version=${BASH_REMATCH[1]}" >> $GITHUB_OUTPUT
# Just in case we accidentally release something not on main.
commit-branch-check:
name: "Check commit branch"
runs-on: "ubuntu-latest"
needs:
- "crate-info"
steps:
- name: "Checkout source code"
uses: "actions/checkout@v3"
with:
fetch-depth: 0
- name: "Check if commit is on main"
run: |
COMMIT_HASH=$(git log -1 --format=%H ${{ github.ref }})
GREP_OUTPUT=$(git log origin/main --format=%H | grep "$COMMIT_HASH")
if [ -z "$GREP_OUTPUT" ]; then
echo "Cannot release commits not on the main branch"
exit 1
fi
crate-version-check:
name: "Check crate version"
runs-on: "ubuntu-latest"
needs:
- "crate-info"
steps:
- name: "Checkout source code"
uses: "actions/checkout@v3"
- name: "Check against Cargo.toml"
run: |
GREP_OUTPUT=$(cat Cargo.toml | grep "^version = \"${{ needs.crate-info.outputs.version }}\"$")
if [ -z "$GREP_OUTPUT" ]; then
echo "Crate version mismatch"
exit 1
fi
draft-release:
name: "Create draft release"
runs-on: "ubuntu-latest"
needs:
- "crate-info"
- "commit-branch-check"
- "crate-version-check"
outputs:
release-id: ${{ steps.create.outputs.id }}
steps:
- id: "create"
name: "Create draft release"
run: |
ID=$(curl -L --fail "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases" \
-H "Authorization: Bearer ${{ secrets.GH_TOKEN }}" \
-d '{"tag_name":"v${{ needs.crate-info.outputs.version }}","name":"v${{ needs.crate-info.outputs.version }}","draft":true,"generate_release_notes":true}' |
jq ".id")
echo "id=$ID" >> $GITHUB_OUTPUT
release-non-apple:
name: "Build for ${{ matrix.target }}"
runs-on: "${{ matrix.os }}"
needs:
- "crate-info"
- "draft-release"
- "commit-branch-check"
- "crate-version-check"
strategy:
matrix:
include:
- os: "ubuntu-latest"
target: "x86_64-unknown-linux-gnu"
exe: "kipt"
compressed_ext: "tar.gz"
- os: "ubuntu-latest"
target: "x86_64-unknown-linux-musl"
exe: "kipt"
compressed_ext: "tar.gz"
- os: "ubuntu-latest"
target: "aarch64-unknown-linux-gnu"
exe: "kipt"
compressed_ext: "tar.gz"
- os: "ubuntu-latest"
target: "aarch64-unknown-linux-musl"
exe: "kipt"
compressed_ext: "tar.gz"
- os: "windows-latest"
target: "x86_64-pc-windows-msvc"
exe: "kipt.exe"
compressed_ext: "zip"
steps:
- name: "Checkout source code"
uses: "actions/checkout@v3"
- name: "Setup stable toolchain"
uses: "actions-rs/toolchain@v1"
with:
toolchain: "stable"
profile: "minimal"
override: true
- name: "Install cross"
run: |
cargo install --locked --version 0.2.5 cross
- name: "Build release"
run: |
cross build --release --target ${{ matrix.target }}
- name: "Upload artifacts"
uses: "actions/upload-artifact@v3"
with:
name: "kipt-${{ matrix.target }}"
path: "target/${{ matrix.target }}/release/${{ matrix.exe }}"
- name: "Tar release"
if: matrix.os != 'windows-latest'
run: |
cd target/${{ matrix.target }}/release/
tar zcvf ./kipt-${{ matrix.target }}.tar.gz ./${{ matrix.exe }}
- name: "Zip release"
uses: "TheDoctor0/[email protected]"
if: matrix.os == 'windows-latest'
with:
type: "zip"
filename: "kipt-${{ matrix.target }}.zip"
directory: "target/${{ matrix.target }}/release/"
path: "${{ matrix.exe }}"
- name: "Publish compressed artifact"
shell: "bash"
run: |
ARTIFACT_NAME="kipt-${{ matrix.target }}.${{ matrix.compressed_ext }}"
curl -L --fail "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ needs.draft-release.outputs.release-id }}/assets?name=${ARTIFACT_NAME}" \
-H "Authorization: Bearer ${{ secrets.GH_TOKEN }}" \
-H "Content-Type: application/octet-stream" \
--data-binary "@target/${{ matrix.target }}/release/${ARTIFACT_NAME}"
release-apple:
name: "Build for ${{ matrix.target }}"
runs-on: "${{ matrix.os }}"
needs:
- "crate-info"
- "draft-release"
- "commit-branch-check"
- "crate-version-check"
strategy:
matrix:
include:
- os: "macos-latest"
target: "x86_64-apple-darwin"
exe: "kipt"
- os: "macos-latest"
target: "aarch64-apple-darwin"
exe: "kipt"
steps:
- name: "Checkout source code"
uses: "actions/checkout@v3"
- name: "Setup stable toolchain"
uses: "actions-rs/toolchain@v1"
with:
toolchain: "stable"
profile: "minimal"
target: "${{ matrix.target }}"
override: true
- name: "Apple M1 setup"
if: ${{ matrix.target == 'aarch64-apple-darwin' }}
run: |
echo "SDKROOT=$(xcrun -sdk macosx --show-sdk-path)" >> $GITHUB_ENV
echo "MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx --show-sdk-platform-version)" >> $GITHUB_ENV
- name: "Build release"
run: |
cargo build --release --target ${{ matrix.target }}
- name: "Upload artifacts"
uses: "actions/upload-artifact@v3"
with:
name: "kipt-${{ matrix.target }}"
path: "target/${{ matrix.target }}/release/${{ matrix.exe }}"
- name: "Tar release"
run: |
cd target/${{ matrix.target }}/release/
tar zcvf ./kipt-${{ matrix.target }}.tar.gz ./${{ matrix.exe }}
- name: "Publish compressed artifact"
run: |
ARTIFACT_NAME="kipt-${{ matrix.target }}.tar.gz"
curl -L --fail "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ needs.draft-release.outputs.release-id }}/assets?name=${ARTIFACT_NAME}" \
-H "Authorization: Bearer ${{ secrets.GH_TOKEN }}" \
-H "Content-Type: application/octet-stream" \
--data-binary "@target/${{ matrix.target }}/release/${ARTIFACT_NAME}"
release-docker-images:
name: "Build Docker image for ${{ matrix.tag }}"
runs-on: "ubuntu-latest"
needs:
# We don't really need all these, but we want to make sure all platforms build successfully
# before running this step, as this step makes Docker images public already.
- "crate-info"
- "release-non-apple"
- "release-apple"
strategy:
matrix:
include:
- tag: "amd64"
artifact: "kipt-x86_64-unknown-linux-musl"
- tag: "arm64"
artifact: "kipt-aarch64-unknown-linux-musl"
steps:
- name: "Checkout source code"
uses: "actions/checkout@v3"
- name: "Login to Docker Hub"
uses: "docker/login-action@v2"
with:
username: "${{ secrets.DOCKER_USERNAME }}"
password: "${{ secrets.DOCKER_PASSWORD }}"
- name: "Determine full Docker tag"
run: |
echo "DOCKER_TAG=glihm/kipt:${{ needs.crate-info.outputs.version }}-${{ matrix.tag }}" >> $GITHUB_ENV
- name: "Prepare work directory"
run: |
mkdir /tmp/work
cp ./.github/workflows/docker/Dockerfile.${{ matrix.tag }} /tmp/work/Dockerfile
cd /tmp/work
- name: "Download artifact"
uses: "actions/download-artifact@v3"
with:
name: "${{ matrix.artifact }}"
path: /tmp/work/kipt
- name: "Build Docker image"
run: |
cd /tmp/work
docker build -t $DOCKER_TAG .
- name: "Push Docker image"
run: |
docker push $DOCKER_TAG
release-docker-multiarch:
name: "Build Docker multi-arch image"
runs-on: "ubuntu-latest"
needs:
- "crate-info"
- "release-docker-images"
steps:
- name: "Login to Docker Hub"
uses: "docker/login-action@v2"
with:
username: "${{ secrets.DOCKER_USERNAME }}"
password: "${{ secrets.DOCKER_PASSWORD }}"
- name: "Pull arch-specific images"
run: |
docker pull glihm/kipt:${{ needs.crate-info.outputs.version }}-amd64
docker pull glihm/kipt:${{ needs.crate-info.outputs.version }}-arm64
- name: "Publish multi-arch manifest"
run: |
docker manifest create glihm/kipt:${{ needs.crate-info.outputs.version }} \
glihm/kipt:${{ needs.crate-info.outputs.version }}-amd64 \
glihm/kipt:${{ needs.crate-info.outputs.version }}-arm64
docker manifest create glihm/kipt:latest \
glihm/kipt:${{ needs.crate-info.outputs.version }}-amd64 \
glihm/kipt:${{ needs.crate-info.outputs.version }}-arm64
docker manifest push glihm/kipt:${{ needs.crate-info.outputs.version }}
docker manifest push glihm/kipt:latest
publish-release:
name: "Publish release"
runs-on: "ubuntu-latest"
needs:
- "draft-release"
- "release-non-apple"
- "release-apple"
- "release-docker-multiarch"
steps:
- name: "Publish release"
run: |
curl -L --fail "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ needs.draft-release.outputs.release-id }}" \
-X PATCH \
-H "Authorization: Bearer ${{ secrets.GH_TOKEN }}" \
-d '{"draft":false}'