-
Notifications
You must be signed in to change notification settings - Fork 0
131 lines (114 loc) · 3.56 KB
/
Copy pathrelease.yml
File metadata and controls
131 lines (114 loc) · 3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: Release Binaries
on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
tag:
description: "Release tag to publish (for manual runs), e.g. v0.1.0"
required: false
type: string
permissions:
contents: write
jobs:
build:
name: Build ${{ matrix.asset_name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
asset_name: scanr-x86_64-unknown-linux-gnu
use_cross: false
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
asset_name: scanr-aarch64-unknown-linux-gnu
use_cross: true
- os: macos-latest
target: x86_64-apple-darwin
asset_name: scanr-x86_64-apple-darwin
use_cross: false
- os: macos-latest
target: aarch64-apple-darwin
asset_name: scanr-aarch64-apple-darwin
use_cross: false
- os: windows-latest
target: x86_64-pc-windows-msvc
asset_name: scanr-x86_64-pc-windows-msvc.exe
use_cross: false
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Install cross (Linux ARM64)
if: matrix.use_cross
uses: taiki-e/install-action@cross
- name: Build binary (cargo)
if: ${{ !matrix.use_cross }}
shell: bash
run: |
cargo build --release --package scanr-cli --bin scanr --target "${{ matrix.target }}"
- name: Build binary (cross)
if: matrix.use_cross
shell: bash
run: |
cross build --release --package scanr-cli --bin scanr --target "${{ matrix.target }}"
- name: Collect artifact (unix)
if: runner.os != 'Windows'
shell: bash
run: |
cp "target/${{ matrix.target }}/release/scanr" "${{ matrix.asset_name }}"
- name: Collect artifact (windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
Copy-Item "target/${{ matrix.target }}/release/scanr.exe" "${{ matrix.asset_name }}"
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.asset_name }}
path: ${{ matrix.asset_name }}
release:
name: Publish GitHub Release
needs: build
runs-on: ubuntu-latest
steps:
- name: Resolve release tag
id: release_tag
shell: bash
run: |
if [ "${GITHUB_REF_TYPE}" = "tag" ]; then
echo "tag=${GITHUB_REF_NAME}" >> "${GITHUB_OUTPUT}"
exit 0
fi
MANUAL_TAG="${{ github.event.inputs.tag }}"
if [ -n "${MANUAL_TAG}" ]; then
echo "tag=${MANUAL_TAG}" >> "${GITHUB_OUTPUT}"
exit 0
fi
echo "No tag found. Push a v* tag or provide workflow_dispatch input 'tag'." >&2
exit 1
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: dist
pattern: scanr-*
merge-multiple: true
- name: Generate SHA256 checksums
shell: bash
run: |
cd dist
sha256sum scanr-* > sha256sums.txt
- name: Publish release assets
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.release_tag.outputs.tag }}
files: |
dist/scanr-*
dist/sha256sums.txt