Skip to content

Commit f647154

Browse files
committed
Merge branch 'run-scalar-functional-tests'
Run the comprehensive Scalar Functional Tests as part of CI and PR builds. Signed-off-by: Johannes Schindelin <[email protected]>
2 parents 253c3aa + 72c5749 commit f647154

File tree

2 files changed

+225
-4
lines changed

2 files changed

+225
-4
lines changed
Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
name: Scalar Functional Tests
2+
3+
env:
4+
SCALAR_REPOSITORY: microsoft/scalar
5+
SCALAR_REF: main
6+
DEBUG_WITH_TMATE: false
7+
SCALAR_TEST_SKIP_VSTS_INFO: true
8+
9+
on:
10+
push:
11+
branches: [ vfs-*, tentative/vfs-* ]
12+
pull_request:
13+
branches: [ vfs-*, features/* ]
14+
15+
jobs:
16+
scalar:
17+
name: "Scalar Functional Tests"
18+
19+
strategy:
20+
fail-fast: false
21+
matrix:
22+
# Order by runtime (in descending order)
23+
os: [windows-2022, macos-13, ubuntu-22.04]
24+
# Scalar.NET used to be tested using `features: [false, experimental]`
25+
# But currently, Scalar/C ignores `feature.scalar` altogether, so let's
26+
# save some electrons and run only one of them...
27+
features: [ignored]
28+
exclude:
29+
# The built-in FSMonitor is not (yet) supported on Linux
30+
- os: ubuntu-22.04
31+
features: experimental
32+
runs-on: ${{ matrix.os }}
33+
34+
env:
35+
BUILD_FRAGMENT: bin/Release/netcoreapp3.1
36+
GIT_FORCE_UNTRACKED_CACHE: 1
37+
38+
steps:
39+
- name: Check out Git's source code
40+
uses: actions/checkout@v4
41+
42+
- name: Setup build tools on Windows
43+
if: runner.os == 'Windows'
44+
uses: git-for-windows/setup-git-for-windows-sdk@v1
45+
46+
- name: Provide a minimal `install` on Windows
47+
if: runner.os == 'Windows'
48+
shell: bash
49+
run: |
50+
test -x /usr/bin/install ||
51+
tr % '\t' >/usr/bin/install <<-\EOF
52+
#!/bin/sh
53+
54+
cmd=cp
55+
while test $# != 0
56+
do
57+
%case "$1" in
58+
%-d) cmd="mkdir -p";;
59+
%-m) shift;; # ignore mode
60+
%*) break;;
61+
%esac
62+
%shift
63+
done
64+
65+
exec $cmd "$@"
66+
EOF
67+
68+
- name: Install build dependencies for Git (Linux)
69+
if: runner.os == 'Linux'
70+
run: |
71+
sudo apt-get update
72+
sudo apt-get -q -y install libssl-dev libcurl4-openssl-dev gettext
73+
74+
- name: Build and install Git
75+
shell: bash
76+
env:
77+
NO_TCLTK: Yup
78+
run: |
79+
# We do require a VFS version
80+
def_ver="$(sed -n 's/DEF_VER=\(.*vfs.*\)/\1/p' GIT-VERSION-GEN)"
81+
test -n "$def_ver"
82+
83+
# Ensure that `git version` reflects DEF_VER
84+
case "$(git describe --match "v[0-9]*vfs*" HEAD)" in
85+
${def_ver%%.vfs.*}.vfs.*) ;; # okay, we can use this
86+
*) git -c user.name=ci -c user.email=ci@github tag -m for-testing ${def_ver}.NNN.g$(git rev-parse --short HEAD);;
87+
esac
88+
89+
SUDO=
90+
extra=
91+
case "${{ runner.os }}" in
92+
Windows)
93+
extra=DESTDIR=/c/Progra~1/Git
94+
cygpath -aw "/c/Program Files/Git/cmd" >>$GITHUB_PATH
95+
;;
96+
Linux)
97+
SUDO=sudo
98+
extra=prefix=/usr
99+
;;
100+
macOS)
101+
SUDO=sudo
102+
extra=prefix=/usr/local
103+
;;
104+
esac
105+
106+
$SUDO make -j5 $extra install
107+
108+
- name: Ensure that we use the built Git and Scalar
109+
shell: bash
110+
run: |
111+
type -p git
112+
git version
113+
case "$(git version)" in *.vfs.*) echo Good;; *) exit 1;; esac
114+
type -p scalar
115+
scalar version
116+
case "$(scalar version 2>&1)" in *.vfs.*) echo Good;; *) exit 1;; esac
117+
118+
- name: Check out Scalar's source code
119+
uses: actions/checkout@v4
120+
with:
121+
fetch-depth: 0 # Indicate full history so Nerdbank.GitVersioning works.
122+
path: scalar
123+
repository: ${{ env.SCALAR_REPOSITORY }}
124+
ref: ${{ env.SCALAR_REF }}
125+
126+
- name: Setup .NET Core
127+
uses: actions/setup-dotnet@v4
128+
with:
129+
dotnet-version: '3.1.426'
130+
131+
- name: Install dependencies
132+
run: dotnet restore
133+
working-directory: scalar
134+
env:
135+
DOTNET_NOLOGO: 1
136+
137+
- name: Build
138+
working-directory: scalar
139+
run: dotnet build --configuration Release --no-restore -p:UseAppHost=true # Force generation of executable on macOS.
140+
141+
- name: Setup platform (Linux)
142+
if: runner.os == 'Linux'
143+
run: |
144+
echo "BUILD_PLATFORM=${{ runner.os }}" >>$GITHUB_ENV
145+
echo "TRACE2_BASENAME=Trace2.${{ github.run_id }}__${{ github.run_number }}__${{ matrix.os }}__${{ matrix.features }}" >>$GITHUB_ENV
146+
147+
- name: Setup platform (Mac)
148+
if: runner.os == 'macOS'
149+
run: |
150+
echo 'BUILD_PLATFORM=Mac' >>$GITHUB_ENV
151+
echo "TRACE2_BASENAME=Trace2.${{ github.run_id }}__${{ github.run_number }}__${{ matrix.os }}__${{ matrix.features }}" >>$GITHUB_ENV
152+
153+
- name: Setup platform (Windows)
154+
if: runner.os == 'Windows'
155+
run: |
156+
echo "BUILD_PLATFORM=${{ runner.os }}" >>$env:GITHUB_ENV
157+
echo 'BUILD_FILE_EXT=.exe' >>$env:GITHUB_ENV
158+
echo "TRACE2_BASENAME=Trace2.${{ github.run_id }}__${{ github.run_number }}__${{ matrix.os }}__${{ matrix.features }}" >>$env:GITHUB_ENV
159+
160+
- name: Configure feature.scalar
161+
run: git config --global feature.scalar ${{ matrix.features }}
162+
163+
- id: functional_test
164+
name: Functional test
165+
timeout-minutes: 60
166+
working-directory: scalar
167+
shell: bash
168+
run: |
169+
export GIT_TRACE2_EVENT="$PWD/$TRACE2_BASENAME/Event"
170+
export GIT_TRACE2_PERF="$PWD/$TRACE2_BASENAME/Perf"
171+
export GIT_TRACE2_EVENT_BRIEF=true
172+
export GIT_TRACE2_PERF_BRIEF=true
173+
mkdir -p "$TRACE2_BASENAME"
174+
mkdir -p "$TRACE2_BASENAME/Event"
175+
mkdir -p "$TRACE2_BASENAME/Perf"
176+
git version --build-options
177+
cd ../out
178+
Scalar.FunctionalTests/$BUILD_FRAGMENT/Scalar.FunctionalTests$BUILD_FILE_EXT --test-scalar-on-path --test-git-on-path --timeout=300000 --full-suite
179+
180+
- name: Force-stop FSMonitor daemons and Git processes (Windows)
181+
if: runner.os == 'Windows' && (success() || failure())
182+
shell: bash
183+
run: |
184+
set -x
185+
wmic process get CommandLine,ExecutablePath,HandleCount,Name,ParentProcessID,ProcessID
186+
wmic process where "CommandLine Like '%fsmonitor--daemon %run'" delete
187+
wmic process where "ExecutablePath Like '%git.exe'" delete
188+
189+
- id: trace2_zip_unix
190+
if: runner.os != 'Windows' && ( success() || failure() ) && ( steps.functional_test.conclusion == 'success' || steps.functional_test.conclusion == 'failure' )
191+
name: Zip Trace2 Logs (Unix)
192+
shell: bash
193+
working-directory: scalar
194+
run: zip -q -r $TRACE2_BASENAME.zip $TRACE2_BASENAME/
195+
196+
- id: trace2_zip_windows
197+
if: runner.os == 'Windows' && ( success() || failure() ) && ( steps.functional_test.conclusion == 'success' || steps.functional_test.conclusion == 'failure' )
198+
name: Zip Trace2 Logs (Windows)
199+
working-directory: scalar
200+
run: Compress-Archive -DestinationPath ${{ env.TRACE2_BASENAME }}.zip -Path ${{ env.TRACE2_BASENAME }}
201+
202+
- name: Archive Trace2 Logs
203+
if: ( success() || failure() ) && ( steps.trace2_zip_unix.conclusion == 'success' || steps.trace2_zip_windows.conclusion == 'success' )
204+
uses: actions/upload-artifact@v4
205+
with:
206+
name: ${{ env.TRACE2_BASENAME }}.zip
207+
path: scalar/${{ env.TRACE2_BASENAME }}.zip
208+
retention-days: 3
209+
210+
# The GitHub Action `action-tmate` allows developers to connect to the running agent
211+
# using SSH (it will be a `tmux` session; on Windows agents it will be inside the MSYS2
212+
# environment in `C:\msys64`, therefore it can be slightly tricky to interact with
213+
# Git for Windows, which runs a slightly incompatible MSYS2 runtime).
214+
- name: action-tmate
215+
if: env.DEBUG_WITH_TMATE == 'true' && failure()
216+
uses: mxschmitt/action-tmate@v3
217+
with:
218+
limit-access-to-actor: true

diagnose.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -351,10 +351,13 @@ int create_diagnostics_archive(struct repository *r,
351351
goto diagnose_cleanup;
352352
}
353353

354-
fprintf(stderr, "\n"
355-
"Diagnostics complete.\n"
356-
"All of the gathered info is captured in '%s'\n",
357-
zip_path->buf);
354+
strbuf_reset(&buf);
355+
strbuf_addf(&buf, "\n"
356+
"Diagnostics complete.\n"
357+
"All of the gathered info is captured in '%s'\n",
358+
zip_path->buf);
359+
write_or_die(stdout_fd, buf.buf, buf.len);
360+
write_or_die(2, buf.buf, buf.len);
358361

359362
diagnose_cleanup:
360363
if (archiver_fd >= 0) {

0 commit comments

Comments
 (0)