-
Notifications
You must be signed in to change notification settings - Fork 0
172 lines (164 loc) · 5.49 KB
/
cd.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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
name: CD
on:
push:
branches:
- main
jobs:
cross-build:
strategy:
matrix:
include:
- target: aarch64-apple-darwin
os: macos-latest
- target: aarch64-unknown-linux-musl
os: ubuntu-latest
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
target: ${{ matrix.target }}
toolchain: stable
override: true
- name: Cache Cross
id: cache-cross
uses: actions/cache@v2
with:
path: ~/.cargo/bin/cross
key: ${{ runner.os }}-cross
- name: Check if Cross is installed
if: steps.cache-cross.outputs.cache-hit == 'true'
id: cross-check
run: |
if command -v cross &> /dev/null
then
echo "::set-output name=installed::true"
else
echo "::set-output name=installed::false"
fi
- name: Install Cross
if: steps.cross-check.outputs.installed != 'true'
uses: actions-rs/cargo@v1
with:
command: install
args: cross
- name: Cache Cargo registry
uses: actions/cache@v2
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-${{ matrix.target }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache Cargo index
uses: actions/cache@v2
with:
path: ~/.cargo/git
key: ${{ runner.os }}-${{ matrix.target }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
- name: Cache Cargo build
uses: actions/cache@v2
with:
path: target
key: ${{ runner.os }}-${{ matrix.target }}-cargo-build-${{ hashFiles('**/Cargo.lock', '**/Cargo.toml') }}
- name: Cross Build
run: |
cross build --target ${{ matrix.target }} --release
- name: Archive
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/semrel
native-build:
strategy:
matrix:
include:
- target: x86_64-apple-darwin
os: macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
target: ${{ matrix.target }}
toolchain: stable
override: true
- name: Cache Cargo registry
uses: actions/cache@v2
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-${{ matrix.target }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache Cargo index
uses: actions/cache@v2
with:
path: ~/.cargo/git
key: ${{ runner.os }}-${{ matrix.target }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
- name: Cache Cargo build
uses: actions/cache@v2
with:
path: target
key: ${{ runner.os }}-${{ matrix.target }}-cargo-build-${{ hashFiles('**/Cargo.lock', '**/Cargo.toml') }}
- name: Build
run: |
cargo build --release --target=${{ matrix.target }}
- name: Archive
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/semrel
bump-version:
permissions:
contents: write
name: Bump Version
uses: ./.github/workflows/bump.yml
secrets:
token: ${{ secrets.RELEASE_TOKEN }}
release:
needs: [cross-build, native-build, bump-version]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Download Artifacts
uses: actions/download-artifact@v2
- name: Install tar
run: sudo apt-get install tar
- name: Set permissions on artifacts
run: |
chmod +x aarch64-apple-darwin/semrel
chmod +x x86_64-apple-darwin/semrel
chmod +x aarch64-unknown-linux-musl/semrel
chmod +x x86_64-unknown-linux-musl/semrel
- name: Package Artifacts
run: |
tar czvf arm64-apple-darwin.tgz -C aarch64-apple-darwin .
tar czvf x86_64-apple-darwin.tgz -C x86_64-apple-darwin .
tar czvf aarch64-unknown-linux-musl.tgz -C aarch64-unknown-linux-musl .
tar czvf x86_64-unknown-linux-musl.tgz -C x86_64-unknown-linux-musl .
- name: Get new version with semrel
id: version
run: |
version=$(./x86_64-unknown-linux-musl/semrel show next)
echo "::set-output name=version::$version"
- name: Generate Release notes with semrel
run: |
./x86_64-unknown-linux-musl/semrel show notes > release-notes-${{ steps.version.outputs.version }}.md
- name: Create Release
id: create_release
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
with:
files: |
arm64-apple-darwin.tgz
x86_64-apple-darwin.tgz
aarch64-unknown-linux-musl.tgz
x86_64-unknown-linux-musl.tgz
name: semrel-${{ steps.version.outputs.version }}
body_path: release-notes-${{ steps.version.outputs.version }}.md
generate_release_notes: false
make_latest: true
draft: false
prerelease: false
tag_name: ${{ steps.version.outputs.version }}
token: ${{ secrets.RELEASE_TOKEN }}