forked from mozilla/neqo
-
Notifications
You must be signed in to change notification settings - Fork 1
198 lines (175 loc) · 9.54 KB
/
check.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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
name: CI
on: [push, pull_request]
env:
CARGO_TERM_COLOR: always
jobs:
check:
name: Build & test
strategy:
fail-fast: false
matrix:
# os: [ubuntu-latest, macos-latest, windows-latest]
os: [windows-latest]
rust-toolchain: [1.65.0] #, stable] #, beta]
runs-on: ${{ matrix.os }}
env:
RUSTFLAGS: -C link-arg=-fuse-ld=lld
defaults:
run:
shell: bash
steps:
# - name: Install Rust
# uses: dtolnay/rust-toolchain@master
# with:
# toolchain: ${{ matrix.rust-toolchain }}
# components: rustfmt, clippy
- name: Install dependencies (Linux)
if: runner.os == 'Linux'
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get install -y --no-install-recommends gyp mercurial ninja-build
curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
- name: Install dependencies (MacOS)
if: runner.os == 'MacOS'
run: |
brew install ninja mercurial cargo-binstall
# python3 -m pip install gyp-next
# Above does not work, since pypi only has gyp 0.15.0, which is too old
# for the homebrew python3. Install from source instead.
python3 -m pip install git+https://github.com/nodejs/gyp-next
python3 -m pip install packaging
echo "$(python3 -m site --user-base)/bin" >> "$GITHUB_PATH"
# - name: Install dependencies (Windows)
# if: runner.os == 'Windows'
# shell: pwsh
# run: Set-ExecutionPolicy Unrestricted -Scope Process; iex (iwr "https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.ps1").Content
- name: Set up Windows build environment
if: runner.os == 'Windows'
uses: ilammy/msvc-dev-cmd@v1
- name: Install moztools (Windows)
if: runner.os == 'Windows'
run: |
curl -L -o moztools.zip https://ftp.mozilla.org/pub/mozilla/libraries/win32/moztools-static.zip
unzip moztools.zip
mv moztools/bin/nsinstall.exe /usr/bin
rm -r moztools.zip moztools
# See https://github.com/ilammy/msvc-dev-cmd#name-conflicts-with-shell-bash
rm /usr/bin/link.exe
echo "BASH=$SHELL" >> "$GITHUB_ENV"
# - name: Install Rust tools
# run: cargo +${{ matrix.rust-toolchain }} binstall --no-confirm cargo-llvm-cov cargo-nextest
# - name: Checkout
# uses: actions/checkout@v4
# This step might be removed if the distro included a recent enough
# version of NSS. Ubuntu 20.04 only has 3.49, which is far too old.
# (neqo-crypto/build.rs would also need to query pkg-config to get the
# right build flags rather than building NSS.)
- name: Fetch NSS and NSPR
run: |
hg clone https://hg.mozilla.org/projects/nspr "$NSPR_DIR"
git clone --depth=1 https://github.com/nss-dev/nss "$NSS_DIR"
echo "NSS_DIR=$NSS_DIR" >> "$GITHUB_ENV"
echo "NSPR_DIR=$NSPR_DIR" >> "$GITHUB_ENV"
echo "NSS_JOBS=$NUMBER_OF_PROCESSORS" >> "$GITHUB_ENV"
echo go
sed -i.bak -e 's|mv -f $(DESTDIR)|echo DESTDIR $(DESTDIR) \&\& echo includedir $(includedir) \&\& find /d/a/neqo/neqo/dist -ls \&\& mv -f $(DESTDIR)|' "$NSPR_DIR"/pr/include/md/Makefile.in
sed -i.bak -e 's|$(NSINSTALL)|$(NSINSTALL) -v |g' "$NSPR_DIR"/pr/include/md/Makefile.in
sed -i.bak -e 's|mv -f|#mv -f|g' "$NSPR_DIR"/pr/include/md/Makefile.in
cat "$NSPR_DIR"/pr/include/md/Makefile.in
cd "$NSS_DIR" && ./build.sh -v || true
echo done
find /d/a/neqo/neqo/dist -ls
exit 1
env:
NSS_DIR: ${{ github.workspace }}/nss
NSPR_DIR: ${{ github.workspace }}/nspr
# Ideally, we could just use the build.sh script that comes with NSS.
# The ugiest bit is really the plumbing needed to build mozpkix.
- name: Rewire NSS build.sh (Windows)
if: 0 && runner.os == 'Windows'
run: |
echo "#!/usr/bin/env bash" > "$NSS_DIR"/build.sh
echo "make -C \"$NSS_DIR\" -j \"$NSS_JOBS\" nss_build_all USE_64=1 NSS_DISABLE_GTESTS=1" >> "$NSS_DIR"/build.sh
echo "BASH=$SHELL" >> "$GITHUB_ENV"
sed -i.bak 's/smime ssl/smime ssl mozpkix/' "$NSS_DIR"/lib/Makefile
cp "$NSS_DIR"/lib/libpkix/manifest.mn "$NSS_DIR"/lib/mozpkix/
cp "$NSS_DIR"/lib/smime/Makefile "$NSS_DIR"/lib/smime/config.mk "$NSS_DIR"/lib/mozpkix/
sed -i.bak 's/pkix pkix_pl_nss/lib/' "$NSS_DIR"/lib/mozpkix/manifest.mn
# echo "LIBRARY_NAME = mozpkix" >> "$NSS_DIR"/lib/mozpkix/manifest.mn
# echo "MODULE = mozpkix" >> "$NSS_DIR"/lib/mozpkix/manifest.mn
cp "$NSS_DIR"/lib/libpkix/include/Makefile "$NSS_DIR"/lib/mozpkix/lib/
echo 'CFLAGS += -I$(SOURCE_XP_DIR)/public/nss' >> "$NSS_DIR"/lib/mozpkix/lib/Makefile
echo 'EXTRA_LIBS += -L $(SOURCE_LIB_DIR) -lnspr4' >> "$NSS_DIR"/lib/mozpkix/lib/Makefile
cp "$NSS_DIR"/lib/libpkix/manifest.mn "$NSS_DIR"/lib/mozpkix/lib
sed -i.bak -e 's/include pkix pkix_pl_nss//' -e 's|../..|../../..|g' "$NSS_DIR"/lib/mozpkix/lib/manifest.mn
echo "CPPSRCS = \\" >> "$NSS_DIR"/lib/mozpkix/lib/manifest.mn
ls "$NSS_DIR"/lib/mozpkix/lib/*.cpp | sed -e 's|.*/||' -e 's|$| \\|' >> "$NSS_DIR"/lib/mozpkix/lib/manifest.mn
echo '$(NULL)' >> "$NSS_DIR"/lib/mozpkix/lib/manifest.mn
echo "LIBRARY_NAME = mozpkix" >> "$NSS_DIR"/lib/mozpkix/lib/manifest.mn
# echo "MODULE = nss" >> "$NSS_DIR"/lib/mozpkix/lib/manifest.mn
cp "$NSS_DIR"/lib/libpkix/include/Makefile "$NSS_DIR"/lib/mozpkix/include/
cp "$NSS_DIR"/lib/libpkix/manifest.mn "$NSS_DIR"/lib/mozpkix/include
sed -i.bak -e 's/include pkix pkix_pl_nss/pkix/' -e 's|../..|../../..|g' "$NSS_DIR"/lib/mozpkix/include/manifest.mn
# echo "MODULE = mozpkix" >> "$NSS_DIR"/lib/mozpkix/include/manifest.mn
cp "$NSS_DIR"/lib/libpkix/include/Makefile "$NSS_DIR"/lib/mozpkix/include/pkix/
cat "$NSS_DIR"/lib/libpkix/include/manifest.mn | grep -Ev 'pkix|NULL|CSRCS|PRIVATE' > "$NSS_DIR"/lib/mozpkix/include/pkix/manifest.mn
sed -i.bak -e 's|../../..|../../../..|g' "$NSS_DIR"/lib/mozpkix/include/pkix/manifest.mn
echo "EXPORTS = \\" >> "$NSS_DIR"/lib/mozpkix/include/pkix/manifest.mn
cp "$NSS_DIR"/cpputil/nss_scoped_ptrs.h "$NSS_DIR"/lib/mozpkix/include/pkix/
ls "$NSS_DIR"/lib/mozpkix/include/pkix/pkix*.h | sed -e 's|.*/||' -e 's|$| \\|' >> "$NSS_DIR"/lib/mozpkix/include/pkix/manifest.mn
echo '$(NULL)' >> "$NSS_DIR"/lib/mozpkix/include/pkix/manifest.mn
echo "PRIVATE_EXPORTS = \\" >> "$NSS_DIR"/lib/mozpkix/include/pkix/manifest.mn
ls "$NSS_DIR"/lib/mozpkix/include/pkix/[A-Z]*.h | sed -e 's|.*/||' -e 's|$| \\|' >> "$NSS_DIR"/lib/mozpkix/include/pkix/manifest.mn
echo 'nss_scoped_ptrs.h \' >> "$NSS_DIR"/lib/mozpkix/include/pkix/manifest.mn
echo '$(NULL)' >> "$NSS_DIR"/lib/mozpkix/include/pkix/manifest.mn
echo "MODULE = mozpkix" >> "$NSS_DIR"/lib/mozpkix/include/pkix/manifest.mn
cp "$NSS_DIR"/gtests/pkcs11testmodule/pkcs11testmodule.rc "$NSS_DIR"/lib/mozpkix/mozpkix.rc
sed -i.bak -e 's|"pkcs11testmodule"|"mozpkix"|' -e 's|NSS PKCS #11 Test Module|mozpkix|' "$NSS_DIR"/lib/mozpkix/mozpkix.rc
# - name: Install moztools (Windows)
# if: runner.os == 'Windows'
# run: |
# curl -L -o moztools.zip https://ftp.mozilla.org/pub/mozilla/libraries/win32/moztools-static.zip
# unzip moztools.zip
# mv moztools/bin/nsinstall.exe /usr/bin
# rm -r moztools.zip moztools
# # See https://github.com/ilammy/msvc-dev-cmd#name-conflicts-with-shell-bash
# rm /usr/bin/link.exe
# echo "BASH=$SHELL" >> "$GITHUB_ENV"
# sed -i.bak -e 's|mv -f $(DESTDIR)|echo DESTDIR $(DESTDIR) \&\& echo includedir $(includedir) \&\& find $(includedir) -ls \&\& mv -f $(DESTDIR)|' "$NSPR_DIR"/pr/include/md/Makefile.in
# sed -i.bak 's|$(includedir)$|$(includedir)/|' "$NSPR_DIR"/pr/include/md/Makefile.in
# cat "$NSPR_DIR"/pr/include/md/Makefile.in
# which nsinstall
- name: Build
run: |
cargo +${{ matrix.rust-toolchain }} build -v --all-targets || true
pwd
find dist
exit 1
echo "LD_LIBRARY_PATH=${{ github.workspace }}/dist/Debug/lib" >> "$GITHUB_ENV"
echo "DYLD_LIBRARY_PATH=${{ github.workspace }}/dist/Debug/lib" >> "$GITHUB_ENV"
env:
RUST_BACKTRACE: 1
- name: Run tests
run: cargo +${{ matrix.rust-toolchain }} nextest run -v --no-fail-fast
env:
RUST_BACKTRACE: 1
RUST_LOG: neqo=debug
- name: Check formatting
run: cargo +${{ matrix.rust-toolchain }} fmt --all -- --check
# if: success() || failure()
- name: Clippy
run: cargo +${{ matrix.rust-toolchain }} clippy -v --tests -- -D warnings
# if: success() || failure()
- name: Determine coverage
run: cargo +${{ matrix.rust-toolchain }} llvm-cov nextest --all-targets --no-fail-fast --lcov --output-path lcov.info
env:
RUST_BACKTRACE: 1
RUST_LOG: neqo=debug
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
with:
file: lcov.info
fail_ci_if_error: true
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}