-
Notifications
You must be signed in to change notification settings - Fork 0
129 lines (98 loc) · 3.13 KB
/
cicd.yaml
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: CI/CD
on: push
permissions:
contents: write
jobs:
test:
name: Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Test
run: cargo test --verbose
build-linux:
name: Build Linux binary
needs: [test]
runs-on: ubuntu-latest
strategy:
matrix:
target:
- x86_64-unknown-linux-gnu
- aarch64-unknown-linux-gnu
- i686-unknown-linux-gnu
steps:
- uses: actions/checkout@v3
- name: Install gcc-aarch64-linux-gnu
if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }}
run: sudo apt-get update && sudo apt-get install gcc-aarch64-linux-gnu
- name: Install 32-bit gcc
if: ${{ matrix.target == 'i686-unknown-linux-gnu' }}
run: sudo apt-get update && sudo apt-get install gcc-multilib
- name: Add target with rustup
run: rustup target add ${{ matrix.target }}
- name: Build release
run: cargo build --release --target=${{ matrix.target }}
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/yangfmt
build-macos:
name: Build MacOS binary
needs: [test]
runs-on: macos-latest
strategy:
matrix:
target:
- x86_64-apple-darwin
- aarch64-apple-darwin
steps:
- uses: actions/checkout@v3
- name: Add target with rustup
run: rustup target add ${{ matrix.target }}
- name: Build release
run: cargo build --release --target=${{ matrix.target }}
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/yangfmt
build-windows:
name: Build Windows binary
needs: [test]
runs-on: windows-latest
strategy:
matrix:
target:
- x86_64-pc-windows-msvc
- i686-pc-windows-msvc
steps:
- uses: actions/checkout@v3
- name: Add target with rustup
run: rustup target add ${{ matrix.target }}
- name: Build release
run: cargo build --release --target=${{ matrix.target }}
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/yangfmt.exe
create-release:
name: Create release
needs: [build-linux, build-macos, build-windows]
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
runs-on: ubuntu-latest
steps:
- name: Create release temporary directory
run: mkdir artifacts && mkdir releases
- uses: actions/download-artifact@v3
with:
path: artifacts
- name: Mark build artifacts as executable
run: find artifacts -type f -exec chmod 755 {} \;
- name: Zip up the build artifacts
run: find artifacts -type f -exec bash -c 'zip -r releases/$(basename $(dirname {})).zip -j {}' \;
- name: Create release
uses: softprops/action-gh-release@v1
with:
files: releases/*.zip