forked from nesszer/Win-CodexBar
-
Notifications
You must be signed in to change notification settings - Fork 0
116 lines (101 loc) · 3.61 KB
/
Copy pathrelease-cli.yml
File metadata and controls
116 lines (101 loc) · 3.61 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
name: Release Linux CLI
on:
release:
types: [published]
workflow_dispatch:
permissions:
contents: write
jobs:
build-linux-cli:
strategy:
fail-fast: false
matrix:
include:
- name: linux-x64
runs-on: ubuntu-24.04
target: x86_64-unknown-linux-gnu
arch: x86_64
- name: linux-arm64
runs-on: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
arch: aarch64
runs-on: ${{ matrix.runs-on }}
steps:
- uses: actions/checkout@v6
- name: Install Linux system dependencies
run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libxdo-dev libayatana-appindicator3-dev
- name: Read app version
shell: bash
run: |
set -euo pipefail
VERSION="$(sed -n 's/^version = "\(.*\)"/\1/p' rust/Cargo.toml | head -n 1)"
if [[ -z "$VERSION" ]]; then
echo "Failed to determine app version from rust/Cargo.toml" >&2
exit 1
fi
echo "APP_VERSION=$VERSION" >> "$GITHUB_ENV"
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Build Linux CLI
run: cargo build --manifest-path rust/Cargo.toml --release --target ${{ matrix.target }} --bin codexbar
- name: Smoke test CLI
shell: bash
run: |
set -euo pipefail
BIN="target/${{ matrix.target }}/release/codexbar"
"$BIN" --help >/dev/null
"$BIN" --version >/dev/null
"$BIN" usage --help >/dev/null
- name: Package release asset
id: package
shell: bash
run: |
set -euo pipefail
VERSION_PREFIX="v${APP_VERSION}"
if [[ "${{ github.event_name }}" == "release" ]]; then
TAG="${GITHUB_REF_NAME}"
if [[ "$TAG" != "$VERSION_PREFIX" ]]; then
echo "Release tag $TAG does not match rust/Cargo.toml version $VERSION_PREFIX" >&2
exit 1
fi
ASSET_VERSION="$TAG"
else
ASSET_VERSION="$VERSION_PREFIX"
fi
OUT_DIR="$(mktemp -d)"
BIN="target/${{ matrix.target }}/release/codexbar"
install -m 0755 "$BIN" "$OUT_DIR/codexbar"
cp rust/README.md "$OUT_DIR/README.md"
cp LICENSE "$OUT_DIR/LICENSE"
ASSET="codexbar-${ASSET_VERSION}-linux-${{ matrix.arch }}.tar.gz"
(
cd "$OUT_DIR"
tar czf "$ASSET" codexbar README.md LICENSE
)
sha256sum "$OUT_DIR/$ASSET" > "$OUT_DIR/$ASSET.sha256"
echo "out_dir=$OUT_DIR" >> "$GITHUB_OUTPUT"
echo "asset=$ASSET" >> "$GITHUB_OUTPUT"
- name: Upload release assets
if: github.event_name == 'release'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
set -euo pipefail
gh release upload "$GITHUB_REF_NAME" \
"${{ steps.package.outputs.out_dir }}/${{ steps.package.outputs.asset }}" \
"${{ steps.package.outputs.out_dir }}/${{ steps.package.outputs.asset }}.sha256" \
--clobber
- name: Upload workflow artifact
if: github.event_name != 'release'
uses: actions/upload-artifact@v6
with:
name: codexbar-linux-cli-${{ matrix.name }}
path: |
${{ steps.package.outputs.out_dir }}/${{ steps.package.outputs.asset }}
${{ steps.package.outputs.out_dir }}/${{ steps.package.outputs.asset }}.sha256