-
Notifications
You must be signed in to change notification settings - Fork 1
129 lines (122 loc) · 3.95 KB
/
release.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
name: Release
on:
push:
tags:
- 'v*'
env:
CARGO_TERM_COLOR: always
defaults:
run:
# necessary for windows
shell: bash
jobs:
build:
strategy:
fail-fast: false
matrix:
# a list of all the targets
include:
- TARGET: x86_64-unknown-linux-gnu
OS: ubuntu-20.04
LIB_NAME: libaiken_jna_wrapper.so
TARGET_NAME: linux-x86-64_libaiken_jna_wrapper.so
# - TARGET: aarch64-unknown-linux-gnu
# OS: ubuntu-20.04
# LIB_NAME: libaiken_jna_wrapper.so
# TARGET_NAME: linux-aarch64_libaiken_jna_wrapper.so
- TARGET: x86_64-apple-darwin
OS: macos-latest
LIB_NAME: libaiken_jna_wrapper.dylib
TARGET_NAME: darwin-x86-64_libaiken_jna_wrapper.dylib
- TARGET: aarch64-apple-darwin
OS: macos-latest
LIB_NAME: libaiken_jna_wrapper.dylib
TARGET_NAME: darwin-aarch64_libaiken_jna_wrapper.dylib
- TARGET: x86_64-pc-windows-msvc
OS: windows-latest
LIB_NAME: aiken_jna_wrapper.dll
TARGET_NAME: windows-x86-64_aiken_jna_wrapper.dll
- TARGET: aarch64-pc-windows-msvc
OS: windows-latest
LIB_NAME: aiken_jna_wrapper.dll
TARGET_NAME: windows-aarch64_aiken_jna_wrapper.dll
# needs: test
runs-on: ${{ matrix.OS }}
env:
NAME: libaiken_jna_wrapper
TARGET: ${{ matrix.TARGET }}
OS: ${{ matrix.OS }}
LIB_NAME: ${{ matrix.LIB_NAME }}
TARGET_NAME: ${{ matrix.TARGET_NAME }}
steps:
- uses: actions/checkout@v2
- name: Cargo cache
uses: actions/cache@v2
with:
path: |
~/.cargo/registry
./target
key: build-cargo-registry-${{matrix.TARGET}}
- name: List
run: find ./
- name: Install and configure dependencies
run: |
# dependencies are only needed on ubuntu as that's the only place where
# we make cross-compilation
if [[ $OS =~ ^ubuntu.*$ ]]; then
sudo apt-get update
sudo apt-get install -qq crossbuild-essential-arm64 crossbuild-essential-armhf libssl-dev
fi
# some additional configuration for cross-compilation on linux
cat >>~/.cargo/config <<EOF
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
[target.aarch64-unknown-linux-musl]
linker = "aarch64-linux-gnu-gcc"
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
[target.armv7-unknown-linux-musleabihf]
linker = "arm-linux-gnueabihf-gcc"
[target.arm-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
[target.arm-unknown-linux-musleabihf]
linker = "arm-linux-gnueabihf-gcc"
EOF
- name: Install rust target
run: rustup target add $TARGET
- name: Run build
run: cargo build --release --verbose --target $TARGET
- name: List target
run: find ./target
- name: Copy artifact
run: |
mkdir -p ./artifacts
if [[ $GITHUB_REF_TYPE =~ ^tag$ ]]; then
TAG=$GITHUB_REF_NAME
else
TAG=$GITHUB_SHA
fi
mv ./target/$TARGET/release/$LIB_NAME ./artifacts/$TARGET_NAME
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: result
path: |
./artifacts
# deploys to github releases on tag
deploy:
if: startsWith(github.ref, 'refs/tags/')
needs: build
runs-on: ubuntu-latest
steps:
- name: Download artifacts
uses: actions/download-artifact@v2
with:
name: result
path: artifacts
- name: List
run: find ./artifacts
- name: Release
uses: softprops/action-gh-release@v1
with:
files: ./artifacts/*.*