-
Notifications
You must be signed in to change notification settings - Fork 157
139 lines (132 loc) · 5.14 KB
/
automated-build.yml
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
132
133
134
135
136
137
138
139
name: Automated build
env:
CI_INTERMEDIATES_DIR: "_ci-intermediates"
on:
release:
types: [created]
push:
tags:
- 'v*'
jobs:
build:
name: ${{ matrix.job.os }} (${{ matrix.job.target }})
runs-on: ${{ matrix.job.os }}
strategy:
fail-fast: false
matrix:
job:
- {os: ubuntu-22.04, target: arm-unknown-linux-gnueabihf, use-cross: true}
- {os: ubuntu-22.04, target: arm-unknown-linux-musleabihf, use-cross: true}
- {os: ubuntu-22.04, target: aarch64-unknown-linux-musl, use-cross: true}
- {os: ubuntu-22.04, target: aarch64-unknown-linux-gnu, use-cross: true}
- {os: ubuntu-22.04, target: x86_64-unknown-linux-musl, use-cross: true}
- {os: ubuntu-22.04, target: x86_64-unknown-linux-gnu}
- {os: macos-latest, target: aarch64-apple-darwin}
- {os: macos-13, target: x86_64-apple-darwin}
steps:
- name: Checkout source code
uses: actions/checkout@v2
- name: Install prerequisites
shell: bash
run: |
case ${{ matrix.job.target }} in
arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
esac
- name: Extract crate information
shell: bash
run: |
echo "PROJECT_NAME=joshuto" >> $GITHUB_ENV
echo "PROJECT_VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV
echo "PROJECT_MAINTAINER=$(sed -n 's/^authors = \["\(.*\)"\]/\1/p' Cargo.toml)" >> $GITHUB_ENV
echo "PROJECT_HOMEPAGE=$(sed -n 's/^homepage = "\(.*\)"/\1/p' Cargo.toml)" >> $GITHUB_ENV
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: ${{ matrix.job.target }}
override: true
profile: minimal # minimal component installation (ie, no documentation)
- name: Show version information (Rust, cargo, GCC)
shell: bash
run: |
gcc --version || true
rustup -V
rustup toolchain list
rustup default
cargo -V
rustc -V
- name: Build
uses: actions-rs/cargo@v1
with:
use-cross: ${{ matrix.job.use-cross }}
command: build
args: --release --target=${{ matrix.job.target }}
- name: Create tarball
id: package
shell: bash
run: |
# Figure out suffix of binary
EXE_suffix=""
case ${{ matrix.job.target }} in
*-pc-windows-*) EXE_suffix=".exe" ;;
esac;
BIN_NAME="${{ env.PROJECT_NAME }}${EXE_suffix}"
PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
PKG_BASENAME=${PROJECT_NAME}-v${PROJECT_VERSION}-${{ matrix.job.target }}
PKG_NAME=${PKG_BASENAME}${PKG_suffix}
PKG_STAGING="${{ env.CI_INTERMEDIATES_DIR }}/package"
ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/"
mkdir -p "${ARCHIVE_DIR}"
# Binary
cp "target/${{ matrix.job.target }}/release/${BIN_NAME}" "$ARCHIVE_DIR"
# base compressed package
pushd "${PKG_STAGING}/" >/dev/null
case ${{ matrix.job.target }} in
*-pc-windows-*) 7z -y a "${PKG_NAME}" "${PKG_BASENAME}"/* | tail -2 ;;
*) tar czf "${PKG_NAME}" "${PKG_BASENAME}"/* ;;
esac;
popd >/dev/null
# Let subsequent steps know where to find the compressed package
echo "PKG_PATH=${PKG_STAGING}/${PKG_NAME}" >> $GITHUB_ENV
echo "PKG_NAME=${PKG_NAME}" >> $GITHUB_ENV
echo "PKG_STAGING=${PKG_STAGING}" >> $GITHUB_ENV
- name: "Generate checksum"
id: checksum
shell: bash
run: |
SUM_NAME=${{ env.PKG_NAME }}.sha256sum
SUM_PATH=${PKG_STAGING}/${SUM_NAME}
OS="$(uname -s)"
if [ "$OS" == "Linux" ]; then
sha256sum ${PKG_PATH} > ${SUM_PATH}
elif [ "$OS" == "Darwin" ]; then
shasum -a 256 ${PKG_PATH} > ${SUM_PATH}
fi
echo "SUM_NAME=${SUM_NAME}" >> $GITHUB_ENV
echo "SUM_PATH=${SUM_PATH}" >> $GITHUB_ENV
- name: "Artifact upload: tarball"
uses: actions/upload-artifact@master
with:
name: ${{ env.PKG_NAME }}
path: ${{ env.PKG_PATH }}
- name: "Artifact upload: checksum"
uses: actions/upload-artifact@master
with:
name: ${{ env.SUM_NAME }}
path: ${{ env.SUM_PATH }}
- name: Check for release
id: is-release
shell: bash
run: |
unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi
echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_ENV
- name: Publish archives and packages
uses: softprops/action-gh-release@v1
if: env.IS_RELEASE
with:
files: |
${{ env.PKG_PATH }}
${{ env.SUM_PATH }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}