-
Notifications
You must be signed in to change notification settings - Fork 1
111 lines (104 loc) · 4.09 KB
/
ci.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
name: CI
# Controls when the action will run. Triggers the workflow on push or pull
# request events but only for the main branch.
on:
push:
# Run on the main branch.
branches:
- main
- ci
tags:
- "v*"
pull_request:
# Only run on pull requests against main.
branches: [main]
jobs:
# We run this job first, to create any GitHub release that we might need.
# Creating a release can only be done once, so we need to split it out from
# other jobs.
create_release:
name: Create release (if needed)
runs-on: ubuntu-latest
outputs:
release_version: ${{ steps.extract_release_version.outputs.release_version }}
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- name: Extract release version
id: extract_release_version
run: |
release_version="$(echo '${{ github.ref }}' | sed 's,^.*/\([^/]*\)$,\1,; s,^v,,' )"
echo Release version: $release_version
echo "::set-output name=release_version::$release_version"
- name: Extract release body from CHANGELOG.md
id: extract_release_body
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
# Use `clparse` to parse `CHANGELOG.md` and extract release notes.
run: |
curl -sLO https://github.com/marcaddeo/clparse/releases/download/0.8.0/clparse-0.8.0-x86_64-unknown-linux-musl.tar.gz
tar xzf clparse*.tar.gz
sudo cp clparse /usr/local/bin
rm -rf clparse*
clparse -f json CHANGELOG.md | \
jq ".releases[] | select(.version == \"${{ steps.extract_release_version.outputs.release_version }}\") | { title: \"\", description: \"\", releases: [.] }" | \
clparse - | \
tail -n +3 > RELEASE_BODY.md
- name: "Make release"
id: create_release
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: "${{ steps.extract_release_version.outputs.release_version }}"
body_path: RELEASE_BODY.md
# We use a matrix to run our build on every supported platform.
release:
name: "Build"
needs:
- create_release
strategy:
matrix:
# target: Official name of system to compile for.
# os: GitHub CI OS image to use on runner.
include:
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
runs-on: ${{ matrix.os }}
steps:
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
# We track latest stable Rust instead of hardcoding it because it
# virtually never breaks old code.
toolchain: stable
components: rustfmt, clippy
target: ${{ matrix.target }}
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- name: Check source formatting and warnings
run: |
cargo fmt -- --check
cargo clippy -- -D warnings
- name: Test
run: |
cargo test
- name: Build release
id: build_release
run: |
./build-release falconeri ${{ needs.create_release.outputs.release_version }}_${{ matrix.target }}
release_file=falconeri_${{ needs.create_release.outputs.release_version }}_${{ matrix.target }}.zip
echo "::set-output name=release_file::$release_file"
- name: Upload Release Asset
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create_release.outputs.upload_url }}
asset_path: ./${{ steps.build_release.outputs.release_file }}
asset_name: ${{ steps.build_release.outputs.release_file }}
asset_content_type: application/zip