Module: tools
Branch: master
Commit: ecf535afb7c5d7001a16eabd60f0047f4c5ede7e
URL: https://gitlab.winehq.org/winehq/tools/-/commit/ecf535afb7c5d7001a16eabd60f…
Author: Francois Gouget <fgouget(a)codeweavers.com>
Date: Mon Jun 26 19:34:13 2023 +0200
testbot/LogUtils: Don't deduplicate the WineTest task.log files.
The task.log file for a win32 test run is not redundant with one for a
wow64 run. Ideally one would deduplicate the task.log within each
category but it's simpler to just not deduplicate them at all.
---
testbot/lib/WineTestBot/LogUtils.pm | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/testbot/lib/WineTestBot/LogUtils.pm b/testbot/lib/WineTestBot/LogUtils.pm
index 56025688..8ea2dd50 100644
--- a/testbot/lib/WineTestBot/LogUtils.pm
+++ b/testbot/lib/WineTestBot/LogUtils.pm
@@ -1815,8 +1815,13 @@ sub UpdateLatestReport($$)
}
}
- my $ErrMessage = _DeduplicateLatestReport($RefReportName);
- push @ErrMessages, $ErrMessage if (defined $ErrMessage);
+ # The task.log file for a win32 test run is not redundant with one for a
+ # wow64 run. So skip deduplication entirely for task.log files.
+ if ($RefReportName !~ /-task\.log$/)
+ {
+ my $ErrMessage = _DeduplicateLatestReport($RefReportName);
+ push @ErrMessages, $ErrMessage if (defined $ErrMessage);
+ }
return \@ErrMessages;
}
Module: tools
Branch: master
Commit: 83b26f48a7c3218609db1137e3ba4c32a889b8d0
URL: https://gitlab.winehq.org/winehq/tools/-/commit/83b26f48a7c3218609db1137e3b…
Author: Francois Gouget <fgouget(a)codeweavers.com>
Date: Mon Jun 26 19:39:54 2023 +0200
testbot/LogUtils: Fix the deduplication reference report regular expression.
Perl does not allow \Q and \E inside RE variables and one of the \E was
missing anyway. Also the report names contain a dot.
Luckily the VM names cannot contain RE wildcards, and the report names
only contain a single dot which should not cause mismatches.
---
testbot/lib/WineTestBot/LogUtils.pm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/testbot/lib/WineTestBot/LogUtils.pm b/testbot/lib/WineTestBot/LogUtils.pm
index ab32fc75..56025688 100644
--- a/testbot/lib/WineTestBot/LogUtils.pm
+++ b/testbot/lib/WineTestBot/LogUtils.pm
@@ -1762,7 +1762,7 @@ sub _DeduplicateLatestReport($)
my $ErrMessage;
my $ReportRE = $RefReportName;
- $ReportRE =~ s/^([a-zA-Z0-9_]+)-job[0-9.]+-([a-zA-Z0-9_]+)$/\\Q$1\\E-job[0-9.]+-\\Q$2/;
+ $ReportRE =~ s/^([a-zA-Z0-9_]+)-job[0-9.]+-([a-zA-Z0-9_.]+)$/$1-job[0-9.]+-$2/;
foreach my $LogPath (sort { $LatestAges{$a} <=> $LatestAges{$b} } @LatestPaths)
{
my $LogName = basename($LogPath);
Module: tools
Branch: master
Commit: 13631f0cc172671b60755cb2a6c25226fac69824
URL: https://gitlab.winehq.org/winehq/tools/-/commit/13631f0cc172671b60755cb2a6c…
Author: Francois Gouget <fgouget(a)codeweavers.com>
Date: Thu Jun 22 02:05:50 2023 +0200
testbot: Include the step and task number in the reference file logs.
While the test report name is unique per job when running the full
suite (i.e. 1 win32.log, 1 wow32.log, etc), our reference files now
include the task.log files and those are not, neither for full test
suite jobs, nor for Wine update ones.
So to avoid having collisions in the task.log reference file names, use
the full jobid.stepno.taskno in their names.
---
testbot/bin/Janitor.pl | 2 +-
testbot/bin/UpdateTaskLogs | 6 +++---
testbot/lib/WineTestBot/LogUtils.pm | 4 ++--
testbot/lib/WineTestBot/Tasks.pm | 4 ++--
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/testbot/bin/Janitor.pl b/testbot/bin/Janitor.pl
index 169bc3cb..4e4b26f8 100755
--- a/testbot/bin/Janitor.pl
+++ b/testbot/bin/Janitor.pl
@@ -347,7 +347,7 @@ if (opendir(my $dh, "$DataDir/latest"))
my $TTL = $JobPurgeDays ? $JobPurgeDays - $Age : undef;
# Keep the regexp in sync with WineTestBot::Task::GetRefReportName()
- if ($Entry !~ /^[a-zA-Z0-9_]+-job[0-9]+-[a-zA-Z0-9_]+\.(?:log|report)(?:\.errors)?$/)
+ if ($Entry !~ /^[a-zA-Z0-9_]+-job[0-9.]+-[a-zA-Z0-9_]+\.(?:log|report)(?:\.errors)?$/)
{
my $Deletion = defined $TTL ? " (deletion in $TTL days)" : "";
Error "Found a suspicious file$Deletion: latest/$Entry\n";
diff --git a/testbot/bin/UpdateTaskLogs b/testbot/bin/UpdateTaskLogs
index b2357250..985e1dc0 100755
--- a/testbot/bin/UpdateTaskLogs
+++ b/testbot/bin/UpdateTaskLogs
@@ -218,7 +218,7 @@ sub DoUpdateLatestReport($$$)
my ($Task, $ReportName, $SrcReportPath) = @_;
# Keep the name as is when saving an existing reference report
- my $SrcIsRef = ($SrcReportPath =~ /-job\d+-/);
+ my $SrcIsRef = ($SrcReportPath =~ /-job[0-9.]+-/);
my $RefReportName = $SrcIsRef ? basename($SrcReportPath) :
$Task->GetRefReportName($ReportName);
return 0 if ($LatestFiles{$RefReportName});
@@ -504,11 +504,11 @@ sub ProcessLatestReports()
}
# Then perform cleanups and rebuild missing files
- foreach my $LatestReportPath (glob("$LatestGlob $LatestGlob.errors"))
+ foreach my $LatestReportPath (glob("$LatestGlob.report $LatestGlob.report.errors $LatestGlob.log $LatestGlob.log.errors"))
{
my $RefReportName = basename($LatestReportPath);
# Keep the regexp in sync with WineTestBot::Task::GetRefReportName()
- next if ($RefReportName !~ /^([a-zA-Z0-9_]+-job[0-9]+-[a-zA-Z0-9_]+\.report)(?:\.errors)?$/);
+ next if ($RefReportName !~ /^([a-zA-Z0-9_]+-job[0-9.]+-[a-zA-Z0-9_]+\.report)(?:\.errors)?$/);
$RefReportName = $1; # untaint
$LatestReportPath = "$DataDir/latest/$RefReportName";
$Rc += Delete("$LatestReportPath.err");
diff --git a/testbot/lib/WineTestBot/LogUtils.pm b/testbot/lib/WineTestBot/LogUtils.pm
index f660274e..ab32fc75 100644
--- a/testbot/lib/WineTestBot/LogUtils.pm
+++ b/testbot/lib/WineTestBot/LogUtils.pm
@@ -1745,7 +1745,7 @@ sub _DeduplicateLatestReport($)
my ($RefReportName) = @_;
my $LatestGlob = $RefReportName;
- $LatestGlob =~ s/-job\d+-/-job*-/;
+ $LatestGlob =~ s/-job[0-9.]+-/-job*-/;
my @LatestPaths = glob("$DataDir/latest/$LatestGlob");
return undef if (@LatestPaths <= 1);
@@ -1762,7 +1762,7 @@ sub _DeduplicateLatestReport($)
my $ErrMessage;
my $ReportRE = $RefReportName;
- $ReportRE =~ s/^([a-zA-Z0-9_]+)-job\d+-([a-zA-Z0-9_]+)$/\\Q$1\\E-job[0-9]+-\\Q$2/;
+ $ReportRE =~ s/^([a-zA-Z0-9_]+)-job[0-9.]+-([a-zA-Z0-9_]+)$/\\Q$1\\E-job[0-9.]+-\\Q$2/;
foreach my $LogPath (sort { $LatestAges{$a} <=> $LatestAges{$b} } @LatestPaths)
{
my $LogName = basename($LogPath);
diff --git a/testbot/lib/WineTestBot/Tasks.pm b/testbot/lib/WineTestBot/Tasks.pm
index b6332d2d..41ac0c58 100644
--- a/testbot/lib/WineTestBot/Tasks.pm
+++ b/testbot/lib/WineTestBot/Tasks.pm
@@ -139,7 +139,7 @@ sub GetReportNames($)
sub GetRefReportName($$)
{
my ($self, $ReportName) = @_;
- return sprintf("%s-job%06d-%s", $self->VM->Name, $self->JobId, $ReportName);
+ return sprintf("%s-job%06d.%d.%d-%s", $self->VM->Name, $self->JobId, $self->StepNo, $self->No, $ReportName);
}
sub GetRefReportPaths($$;$$)
@@ -156,7 +156,7 @@ sub GetRefReportPaths($$;$$)
my %RefReportPaths;
foreach my $RefReportPath (glob($RefGlob))
{
- next if ($RefReportPath !~ m~^\Q$Dir\E/(\Q$VMName\E-job[0-9]+-\Q$ReportName\E)$ExtraRE$~);
+ next if ($RefReportPath !~ m~^\Q$Dir\E/(\Q$VMName\E-job[0-9.]+-\Q$ReportName\E)$ExtraRE$~);
my $RefReportName = $1; # untaint
next if ($RefReportPaths{$RefReportName});
$RefReportPaths{$RefReportName} = "$Dir/$RefReportName";
Module: vkd3d
Branch: master
Commit: 3113f167babdf657618915234a60421fb728c699
URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/3113f167babdf657618915234a604…
Author: Giovanni Mascellani <gmascellani(a)codeweavers.com>
Date: Tue Sep 5 16:24:37 2023 +0200
ci: Do not drop artifacts after 1 day.
There is no point in using such a short timeout. We trust the GitLab
instance to already have a sensible default.
---
gitlab/build.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/gitlab/build.yml b/gitlab/build.yml
index 3b67f93e..0eac7722 100644
--- a/gitlab/build.yml
+++ b/gitlab/build.yml
@@ -21,7 +21,6 @@
- if [ -f pipeline_failed ] ; then exit 1 ; fi
artifacts:
when: always
- expire_in: 1 day
paths:
- artifacts
Module: vkd3d
Branch: master
Commit: d72c91ef9732c446f18766cc7bc8ef4c49de8aff
URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/d72c91ef9732c446f18766cc7bc8e…
Author: Giovanni Mascellani <gmascellani(a)codeweavers.com>
Date: Thu Aug 31 22:55:46 2023 +0200
ci: Run the tests on macOS.
---
gitlab/README | 11 +++++++++-
gitlab/build-mac | 19 +++++++++++++++++
gitlab/build.yml | 50 +++++++++++++++++++++++++++++++++++++++-----
gitlab/patch_moltenvk_icd.sh | 12 +++++++++++
4 files changed, 86 insertions(+), 6 deletions(-)
diff --git a/gitlab/README b/gitlab/README
index ef4d0bed..ffcb09f6 100644
--- a/gitlab/README
+++ b/gitlab/README
@@ -14,7 +14,8 @@ The file build.yml contains the actual testing targets. Currently
vkd3d is tested on Linux, on x86-64 and i386, each architecture with
two different Vulkan drivers (both from Mesa): llvmpipe (a software
implementation) and RADV (a hardware implementation backed by an AMD
-GPU). The testing logs are available as CI artifacts.
+GPU); and on macOS, on Intel, using MoltenVK as Vulkan driver. The
+testing logs are available as CI artifacts.
Some custom runner configuration is required in order to run the tests
on an AMD GPU. Specifically, a runner tagged with `amd-gpu' must be
@@ -40,3 +41,11 @@ available with the following features:
is created dynamically, therefore has no predictable GID: the use
of a fixed GID enables the guest system to be set up so that the
user running the tests can access the render nodes.
+
+A runner on an Intel macOS system tagged with `mac' must also be
+available to run the macOS tests. Unfortunately a system like Docker
+is not available in this case to provide an isolated standard
+environment for running the tests. All the software required to
+compile and run the tests will therefore have to be installed directly
+on the host system. Complete instructions to setup the macOS are
+currently not available.
diff --git a/gitlab/build-mac b/gitlab/build-mac
new file mode 100755
index 00000000..e423330e
--- /dev/null
+++ b/gitlab/build-mac
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+echo "Building $(git log -1)"
+echo "---"
+
+COMMIT=$(git rev-parse --short HEAD)
+
+set -Eeuxo pipefail
+
+./autogen.sh
+rm -fr build
+mkdir build
+cd build
+../configure && make -j$(sysctl -n hw.ncpu) && make -j$(sysctl -n hw.ncpu) crosstest && make -j$(sysctl -n hw.ncpu) check || touch ../pipeline_failed
+
+mkdir -p ../artifacts/$COMMIT
+rsync -Rr tests/*.exe test-suite.log tests/*.log tests/*/*.log ../artifacts/$COMMIT
+
+git reset --hard
diff --git a/gitlab/build.yml b/gitlab/build.yml
index 780d645b..3b67f93e 100644
--- a/gitlab/build.yml
+++ b/gitlab/build.yml
@@ -1,4 +1,4 @@
-.build:
+.build-linux:
stage: build
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
@@ -26,20 +26,20 @@
- artifacts
build-radv-64:
- extends: .build
+ extends: .build-linux
tags:
- amd-gpu
variables:
VK_LOADER_DRIVERS_SELECT: 'radeon_*'
build-llvmpipe-64:
- extends: .build
+ extends: .build-linux
allow_failure: true
variables:
VK_LOADER_DRIVERS_SELECT: 'lvp_*'
build-radv-32:
- extends: .build
+ extends: .build-linux
tags:
- amd-gpu
variables:
@@ -47,8 +47,48 @@ build-radv-32:
CC: 'gcc -m32'
build-llvmpipe-32:
- extends: .build
+ extends: .build-linux
allow_failure: true
variables:
VK_LOADER_DRIVERS_SELECT: 'lvp_*'
CC: 'gcc -m32'
+
+build-mac:
+ stage: build
+ rules:
+ - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+ allow_failure: true
+ interruptible: true
+ needs: []
+ dependencies: []
+ tags:
+ - mac
+ script:
+ - git config --global --add safe.directory $CI_PROJECT_DIR
+ - git clean -fdx
+ - git reset --hard
+ - rm -fr .git/rebase-merge
+ # We use a custom ICD which is not marked as a portability driver,
+ # so that test programs are not confused.
+ - ./gitlab/patch_moltenvk_icd.sh
+ - export VK_DRIVER_FILES="$PWD/gitlab/MoltenVK_icd.json"
+ - mkdir artifacts
+ - system_profiler SPSoftwareDataType SPHardwareDataType > artifacts/systeminfo.txt
+ - vulkaninfo > artifacts/vulkaninfo.txt
+ - export PATH="/usr/local/opt/bison/bin:/usr/local/opt/flex/bin:$PATH"
+ - git clone --depth 1 --branch wine-3.21 https://gitlab.winehq.org/wine/wine.git
+ - cd wine
+ - mkdir build
+ - cd build
+ - ../configure --enable-win64 --without-x --without-freetype
+ - make tools/widl/widl
+ - cd ../..
+ - export PATH="$PWD/wine/build/tools/widl:$PATH"
+ - git rebase $CI_MERGE_REQUEST_DIFF_BASE_SHA --exec ./gitlab/build-mac
+ - if [ -f pipeline_failed ] ; then exit 1 ; fi
+ variables:
+ VKD3D_DISABLE_EXTENSIONS: "VK_EXT_descriptor_indexing"
+ artifacts:
+ when: always
+ paths:
+ - artifacts
diff --git a/gitlab/patch_moltenvk_icd.sh b/gitlab/patch_moltenvk_icd.sh
new file mode 100755
index 00000000..ad90a4ea
--- /dev/null
+++ b/gitlab/patch_moltenvk_icd.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+BASE_PATH="/usr/local/opt/molten-vk/share/vulkan/icd.d"
+
+cp "$BASE_PATH/MoltenVK_icd.json" gitlab/MoltenVK_icd.json
+
+# The driver path is relative
+sed -i -e 's|"library_path" *: "|"library_path" : "'"$BASE_PATH/"'|g' gitlab/MoltenVK_icd.json
+
+# We pretend this is not a portability driver, otherwise vkd3d won't
+# find it
+sed -i -e 's|"is_portability_driver" *: *true|"is_portability_driver" : false|g' gitlab/MoltenVK_icd.json