-
Notifications
You must be signed in to change notification settings - Fork 0
140 lines (121 loc) · 4.88 KB
/
release.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
130
131
132
133
134
135
136
137
138
139
140
on:
# Indicates I want to run this workflow on all branches, PR, and tags
push:
branches: [ "main" ]
tags: [ "*" ]
pull_request:
branches: [ "main" ]
env:
RUST_VERSION: 1.80.1
BIN_NAME: "todor"
jobs:
build:
name: Build - ${{ matrix.platform.name }}
# By default, runs on Ubuntu, otherwise, override with the desired os
runs-on: ${{ matrix.platform.os || 'ubuntu-22.04' }}
strategy:
matrix:
# Set platforms you want to build your binaries on
platform:
# Linux
- name: Linux x86_64
target: x86_64-unknown-linux-musl
build-args: "--release"
- name: Linux aarch64
target: aarch64-unknown-linux-musl
build-args: "--release"
# Mac OS
- name: MacOS x86_64
os: macos-latest
target: x86_64-apple-darwin
build-args: "--release"
- name: MacOS aarch64
os: macos-latest
target: aarch64-apple-darwin
build-args: "--release"
# Windows
- name: Windows x86_64
os: windows-latest
target: x86_64-pc-windows-msvc
build-args: "--profile release-with-symbols"
- name: Windows x86
os: windows-latest
target: i686-pc-windows-msvc
build-args: "--profile release-with-symbols"
steps:
- name: Install package for linux
if: contains(matrix.platform.target, 'linux')
run: sudo apt install musl-tools
- name: Checkout Git repo
uses: actions/checkout@v3
# Linux & Windows
- name: Install rust toolchain for Linux
uses: actions-rs/toolchain@v1
with:
# We setup Rust toolchain and the desired target
profile: minimal
toolchain: "${{ env.RUST_VERSION }}"
override: true
target: ${{ matrix.platform.target }}
components: rustfmt, clippy
- name: Show command used for Cargo
run: |
echo "cargo command is: ${{ env.CARGO }}"
echo "target flag is: ${{ env.BUILD_ARGS }}"
- name: Build ${{ matrix.platform.name }} binary
uses: actions-rs/cargo@v1
# We use cross-rs if not running on x86_64 architecture on Linux
with:
command: build
use-cross: ${{ !contains(matrix.platform.target, 'x86_64') || contains(matrix.platform.target, 'freebsd') }}
args: ${{ matrix.platform.build-args }} --target ${{ matrix.platform.target }}
- name: archive the bin
if: ${{ ! contains(matrix.platform.target, 'windows') }}
run: |
export _BIN=${{ env.BIN_NAME }}${{ contains(matrix.platform.target, 'windows') && '.exe' || '' }}
export _BINDIR=${{ env.BIN_NAME }}.bin
mkdir -p $_BINDIR
mv target/${{ matrix.platform.target }}/release${{ contains(matrix.platform.target, 'windows') && '-with-symbols' || '' }}/$_BIN ${{ env.BIN_NAME }}.bin
sh -c "cd $_BINDIR; ln -sf $_BIN today"
sh -c "cd $_BINDIR; ln -sf $_BIN tomorrow"
[[ ${{ matrix.platform.target }} == *"apple-darwin" ]] && cp scripts/t2reminders.scpt $_BINDIR/
zip -r --symlinks ${{ env.BIN_NAME }}-${{ matrix.platform.target }}.zip $_BINDIR/*
- name: archive the exe
if: contains(matrix.platform.target, 'windows')
run: |
copy target/${{ matrix.platform.target }}/release-with-symbols/${{ env.BIN_NAME }}.exe target/${{ matrix.platform.target }}/release-with-symbols/today.exe
copy target/${{ matrix.platform.target }}/release-with-symbols/${{ env.BIN_NAME }}.exe target/${{ matrix.platform.target }}/release-with-symbols/tomorrow.exe
Compress-Archive -Path target/${{ matrix.platform.target }}/release-with-symbols/*.exe -Destination ${{ env.BIN_NAME }}-${{ matrix.platform.target }}.zip
- name: Store artifact as zip
uses: actions/upload-artifact@v4
with:
# Finally, we store the binary as GitHub artifact for later usage
name: ${{ env.BIN_NAME }}-${{ matrix.platform.target }}
path: ${{ env.BIN_NAME }}-${{ matrix.platform.target }}.zip
retention-days: 1
compression-level: 9
release:
name: Release
needs: [ build ]
# We run the release job only if a tag starts with 'v' letter
if: startsWith( github.ref, 'refs/tags/v' )
runs-on: ubuntu-22.04
steps:
- name: Checkout Git repo
uses: actions/checkout@v3
with:
fetch-depth: 0
# Download all artifacts
- uses: actions/download-artifact@v4
with:
merge-multiple: true
- name: list artifacts
run: ls todor*.zip
- name: Release
uses: softprops/action-gh-release@v2
with:
files: |
todor*.zip
make_latest: true
generate_release_notes: true
token: ${{ secrets.GITHUB_TOKEN }}