-
Notifications
You must be signed in to change notification settings - Fork 0
151 lines (141 loc) · 4.84 KB
/
rust.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
name: Rust
on:
push:
branches: [ "master" ]
tags: [ "**" ]
pull_request:
branches: [ "master" ]
env:
CARGO_TERM_COLOR: always
BUILD_ARGS: "--bin chip-8-emu-bin --release"
SDL_VIDEODRIVER: "dummy"
SDL_AUDIODRIVER: "disk"
jobs:
build:
name: Build - ${{ matrix.platform.name }}
# By default, runs on Ubuntu, otherwise, override with the desired os
runs-on: ${{ matrix.platform.os || 'ubuntu-latest' }}
strategy:
matrix:
platform:
# Linux
- name: Linux x86_64
target: x86_64-unknown-linux-gnu
- name: Linux aarch64
target: aarch64-unknown-linux-gnu
use-cross: true
# Mac OS
- name: MacOS x86_64
os: macos-latest
target: x86_64-apple-darwin
- name: MacOS aarch64
os: macos-latest
target: aarch64-apple-darwin
# Windows
- name: Windows x86_64
# Use another GitHub action OS
os: windows-latest
target: x86_64-pc-windows-msvc
steps:
- uses: actions/checkout@v4
- name: Set up cargo cache
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ matrix.platform.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ matrix.platform.target }}-cargo-
- name: Install Linux Deps
run: |
sudo apt-get install -yqq alsa libasound2-dev libfontconfig1-dev
if: ${{ endsWith(matrix.platform.target, 'linux-gnu') && !matrix.platform.use-cross }}
- name: Install ${{ matrix.platform.target }} Toolchain
run: rustup target add ${{ matrix.platform.target }}
- name: Build ${{ matrix.platform.name }} binary
uses: actions-rs/cargo@v1
with:
command: build
use-cross: ${{ matrix.platform.use-cross }}
args: ${{ env.BUILD_ARGS }} --target ${{ matrix.platform.target }}
- name: Rename binary
run: |
mv target/${{ matrix.platform.target }}/release/chip-8-emu-bin${{ contains(matrix.platform.target, 'windows') && '.exe' || '' }} \
chip-8-emu-bin.${{ matrix.platform.target }}${{ contains(matrix.platform.target, 'windows') && '.exe' || '' }}
shell: bash
- name: Upload ${{ matrix.platform.name }} binary
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform.target }}
path: chip-8-emu-bin.${{ matrix.platform.target }}${{ contains(matrix.platform.target, 'windows') && '.exe' || '' }}
build-web:
name: Build - Web
# By default, runs on Ubuntu, otherwise, override with the desired os
runs-on: 'ubuntu-latest'
env:
CARGO_INSTALLS: |
wasm-pack
steps:
- uses: actions/checkout@v4
- name: Set up cargo cache
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: web-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: web-cargo-
- name: Set up cargo install cache
uses: actions/cache@v4
with:
path: installs
key: |
web-installs
${{ env.CARGO_INSTALLS }}
restore-keys: web-installs
- name: Install cargo dependencies
run: |
while IFS= read -r package; do
if [ "$package" != "" ]; then
cargo install "$package" --target-dir "installs/$package" || true
fi;
done <<< "$CARGO_INSTALLS"
- name: Install wasm32-unknown-unknown Toolchain
run: rustup target add wasm32-unknown-unknown
- name: Build wasm bundle
run: wasm-pack build --target bundler
- name: Pack wasm bundle
run: |
cd pkg
npm pack
cd -
- name: Rename binary
run: |
mv pkg/chip-8-emu-*.tgz \
chip-8-emu.wasm32-unknown-unknown.tgz
- name: Upload web bundle
uses: actions/upload-artifact@v4
with:
name: wasm32-unknown-unknown
path: chip-8-emu.wasm32-unknown-unknown.tgz
release:
name: Release
runs-on: 'ubuntu-latest'
if: ${{ startsWith(github.ref, 'refs/tags/') }}
needs: [ 'build', 'build-web' ]
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: Create release
uses: softprops/action-gh-release@v2
with:
files: artifacts/**