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
name: ci
on:
jobs:
build:
name: ${{ matrix.kind }} ${{ matrix.os }} ${{ matrix.rust }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- macOS-latest
- ubuntu-latest
- windows-latest
rust:
- stable
# - beta
# - nightly
env:
CARGO_INCREMENTAL: 0
RUST_BACKTRACE: full
CARGO_TERM_COLOR: always
steps:
- name: Clone repository
uses: actions/checkout@v2
- name: Install rust (${{ matrix.rust }}) toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.rust }}
profile: minimal
override: true
components: rustfmt, clippy
- name: Log versions
run: |
rustc --version
cargo --version
- name: Configure cargo data directory
# After this point, all cargo registry and crate data is stored in
# $GITHUB_WORKSPACE/.cargo_home. This allows us to cache only the files
# that are needed during the build process. Additionally, this works
# around a bug in the 'cache' action that causes directories outside of
# the workspace dir to be saved/restored incorrectly.
run: |
echo "CARGO_HOME=$(pwd)/.cargo_home" >> $GITHUB_ENV
- name: Cache
uses: actions/cache@v2
with:
# Note: crates from the denoland/deno git repo always get rebuilt,
# and their outputs ('deno', 'libdeno.rlib' etc.) are quite big,
# so we cache only those subdirectories of target/{debug|release} that
# contain the build output for crates that come from the registry.
path: |-
.cargo_home
target/*/.*
target/*/build
target/*/deps
key:
${{ matrix.config.os }}-${{ matrix.config.rust }}-${{ hashFiles('Cargo.lock') }}
restore-keys: |
${{ matrix.config.os }}-${{ matrix.config.rust }}
- name: Run cargo fmt
run: cargo fmt --all -- --check
- name: Run cargo check
run: cargo check --locked
- name: Run cargo clippy
# run: cargo clippy -- -D warnings
run: cargo clippy --locked
- name: Build release
run: cargo build --release --locked
- name: Run cargo test
run: cargo test --locked
- name: Pre-release (linux)
if: startsWith(matrix.os, 'ubuntu') && matrix.rust == 'stable'
run: |
cd target/release
strip postcss
zip -r postcss-x86_64-unknown-linux-gnu.zip postcss
- name: Pre-release (mac)
if: startsWith(matrix.os, 'macOS') && matrix.rust == 'stable'
run: |
cd target/release
strip postcss
zip -r postcss-x86_64-apple-darwin.zip postcss
- name: Pre-release (windows)
if: startsWith(matrix.os, 'windows') && matrix.rust == 'stable'
run: |
Compress-Archive -CompressionLevel Optimal -Force -Path target/release/postcss.exe -DestinationPath target/release/postcss-x86_64-pc-windows-msvc.zip
- name: Release
uses: softprops/action-gh-release@v1
if: |
startsWith(github.repository, 'justjavac') &&
startsWith(github.ref, 'refs/tags/') &&
matrix.rust == 'stable'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: |
target/release/postcss-x86_64-pc-windows-msvc.zip
target/release/postcss-x86_64-unknown-linux-gnu.zip
target/release/postcss-x86_64-apple-darwin.zip
draft: true
# - name: Release postcss
# uses: justjavac/action-postcss-release@v1
# if: |
# startsWith(github.repository, 'justjavac') &&
# startsWith(github.ref, 'refs/tags/')
# env:
# GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
# with:
# files: |
# target/release/postcss-x86_64-pc-windows-msvc.zip
# target/release/postcss-x86_64-unknown-linux-gnu.zip
# target/release/postcss-x86_64-apple-darwin.zip
- name: Publish
if: |
startsWith(matrix.os, 'ubuntu') &&
matrix.rust == 'stable' &&
startsWith(github.repository, 'justjavac') &&
startsWith(github.ref, 'refs/tags/')
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: |
cargo publish