-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add workflow for mingw-w64-gcc package testing
- Loading branch information
Showing
5 changed files
with
301 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
#!/bin/bash | ||
|
||
set -e # exit on error | ||
set -x # echo on | ||
set -o pipefail # fail of any command in pipeline is an error | ||
|
||
DIR="`dirname ${BASH_SOURCE[0]}`/../.." | ||
DIR=`realpath $DIR` | ||
|
||
pushd / | ||
echo "::group::Patch Dejagnu" | ||
patch -p1 -b -i "$DIR/patches/dejagnu/0001-local-exec.patch" | ||
echo "::endgroup::" | ||
popd |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
name: Build and test mingw-w64-gcc | ||
|
||
on: | ||
pull_request: | ||
workflow_dispatch: | ||
inputs: | ||
packages_repository: | ||
description: "MSYS2 packages repository to build from" | ||
type: string | ||
default: "Windows-on-ARM-Experiments/MINGW-packages" | ||
packages_branch: | ||
description: "MSYS2 packages branch to build from" | ||
type: string | ||
default: "woarm64" | ||
arch: | ||
description: 'Architecture that should be built and tested' | ||
required: false | ||
default: 'aarch64' | ||
tag: | ||
description: 'Tag to use for the artifact' | ||
required: true | ||
gcc_module: | ||
description: 'GCC module to test' | ||
required: false | ||
default: 'gcc-c' | ||
gcc_test_filter: | ||
description: 'GCC test filter' | ||
required: false | ||
default: 'compile.exp=103818.c' | ||
workflow_call: | ||
inputs: | ||
packages_repository: | ||
type: string | ||
packages_branch: | ||
type: string | ||
arch: | ||
type: string | ||
tag: | ||
type: string | ||
gcc_module: | ||
type: string | ||
gcc_test_filter: | ||
type: string | ||
|
||
jobs: | ||
build-and-test-mingw-w64-gcc: | ||
name: Build and test mingw-w64-gcc | ||
uses: ./.github/workflows/build-package.yml | ||
with: | ||
package_name: mingw-w64-gcc | ||
packages_repository: ${{ inputs.packages_repository || 'Windows-on-ARM-Experiments/MINGW-packages' }} | ||
packages_branch: ${{ inputs.packages_branch || 'woarm64' }} | ||
runner_arch: ${{ inputs.arch || 'aarch64' }} | ||
cross: false | ||
check: true | ||
check_module: ${{ inputs.gcc_module || '' }} | ||
check_filter: ${{ inputs.gcc_test_filter || '' }} | ||
|
||
create-summary: | ||
needs: build-and-test-mingw-w64-gcc | ||
name: Create summary | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout mingw-woarm64-build repository | ||
uses: actions/checkout@v4 | ||
with: | ||
repository: Windows-on-ARM-Experiments/mingw-woarm64-build | ||
|
||
- name: Download test results artifacts | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: mingw-w64-gcc-test-results | ||
path: ${{ github.workspace }}/test-results | ||
|
||
- name: Create summary | ||
run: | | ||
.github/scripts/toolchain/create-gcc-summary.sh ${{ github.workspace }}/test-results >> $GITHUB_STEP_SUMMARY |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
--- a/usr/share/dejagnu/remote.exp | ||
+++ b/usr/share/dejagnu/remote.exp | ||
@@ -164,14 +164,7 @@ | ||
# ignore SIGHUP. | ||
global errorInfo | ||
if { $inp eq "" && $outp eq "" } { | ||
- set id -1 | ||
- set result [catch "eval spawn -ignore SIGHUP \{${commandline}\}" pid] | ||
- if { $result == 0 } { | ||
- set result2 0 | ||
- } else { | ||
- set pid 0 | ||
- set result2 5 | ||
- } | ||
+ set status [catch "exec timeout -k 5 10 $commandline" output] | ||
} else { | ||
# Use a command pipeline with open. | ||
if { $inp ne "" } { | ||
@@ -205,78 +198,80 @@ | ||
} | ||
set pid [pid $id] | ||
set result [catch "spawn -ignore SIGHUP -leaveopen $id" result2] | ||
- } | ||
- # Prepend "-" to each pid, to generate the "process group IDs" needed by | ||
- # kill. | ||
- set pgid "-[join $pid { -}]" | ||
- verbose "pid is $pid $pgid" | ||
- if { $result != 0 || $result2 != 0 } { | ||
- # This shouldn't happen. | ||
- if {[info exists errorInfo]} { | ||
- set foo $errorInfo | ||
- } else { | ||
- set foo "" | ||
+ | ||
+ # Prepend "-" to each pid, to generate the "process group IDs" needed by | ||
+ # kill. | ||
+ set pgid "-[join $pid { -}]" | ||
+ verbose "pid is $pid $pgid" | ||
+ if { $result != 0 || $result2 != 0 } { | ||
+ # This shouldn't happen. | ||
+ if {[info exists errorInfo]} { | ||
+ set foo $errorInfo | ||
+ } else { | ||
+ set foo "" | ||
+ } | ||
+ verbose "spawn -open $id failed, $result $result2, $foo" | ||
+ catch "close $id" | ||
+ return [list -1 "spawn failed"] | ||
} | ||
- verbose "spawn -open $id failed, $result $result2, $foo" | ||
- catch "close $id" | ||
- return [list -1 "spawn failed"] | ||
- } | ||
|
||
- set got_eof 0 | ||
- set output "" | ||
+ set got_eof 0 | ||
+ set output "" | ||
|
||
- # Wait for either $timeout seconds to elapse, or for the program to | ||
- # exit. | ||
- expect { | ||
- -i $spawn_id -timeout $timeout -re ".+" { | ||
- append output $expect_out(buffer) | ||
- exp_continue -continue_timer | ||
- } | ||
- timeout { | ||
- warning "program timed out" | ||
- } | ||
- eof { | ||
- set got_eof 1 | ||
+ # Wait for either $timeout seconds to elapse, or for the program to | ||
+ # exit. | ||
+ expect { | ||
+ -i $spawn_id -timeout $timeout -re ".+" { | ||
+ append output $expect_out(buffer) | ||
+ exp_continue -continue_timer | ||
+ } | ||
+ timeout { | ||
+ warning "program timed out" | ||
+ } | ||
+ eof { | ||
+ set got_eof 1 | ||
+ } | ||
} | ||
- } | ||
|
||
- # If we didn't get EOF, we have to kill the poor defenseless program. | ||
- if { $got_eof } { | ||
- set pid -1 | ||
- } | ||
- set r2 [close_wait_program $spawn_id $pid wres] | ||
- if { $id > 0 } { | ||
- if { $pid > 0 } { | ||
- # If timed-out, don't wait for all the processes associated | ||
- # with the pipeline to terminate as a stuck one would cause | ||
- # us to hang. | ||
- catch {fconfigure $id -blocking false} | ||
+ # If we didn't get EOF, we have to kill the poor defenseless program. | ||
+ if { $got_eof } { | ||
+ set pid -1 | ||
} | ||
- set r2 [catch "close $id" res] | ||
- } else { | ||
- verbose "waitres is $wres" 2 | ||
- if { $r2 == 0 } { | ||
- set r2 [lindex $wres 3] | ||
- if { [llength $wres] > 4 } { | ||
- if { [lindex $wres 4] eq "CHILDKILLED" } { | ||
- set r2 1 | ||
- } | ||
+ set r2 [close_wait_program $spawn_id $pid wres] | ||
+ if { $id > 0 } { | ||
+ if { $pid > 0 } { | ||
+ # If timed-out, don't wait for all the processes associated | ||
+ # with the pipeline to terminate as a stuck one would cause | ||
+ # us to hang. | ||
+ catch {fconfigure $id -blocking false} | ||
} | ||
- if { $r2 != 0 } { | ||
- set res $wres | ||
+ set r2 [catch "close $id" res] | ||
+ } else { | ||
+ verbose "waitres is $wres" 2 | ||
+ if { $r2 == 0 } { | ||
+ set r2 [lindex $wres 3] | ||
+ if { [llength $wres] > 4 } { | ||
+ if { [lindex $wres 4] eq "CHILDKILLED" } { | ||
+ set r2 1 | ||
+ } | ||
+ } | ||
+ if { $r2 != 0 } { | ||
+ set res $wres | ||
+ } else { | ||
+ set res "" | ||
+ } | ||
} else { | ||
- set res "" | ||
+ set res "wait failed" | ||
} | ||
+ } | ||
+ if { $r2 != 0 || $res ne "" || ! $got_eof } { | ||
+ verbose "close result is $res" | ||
+ set status 1 | ||
} else { | ||
- set res "wait failed" | ||
+ set status 0 | ||
} | ||
} | ||
- if { $r2 != 0 || $res ne "" || ! $got_eof } { | ||
- verbose "close result is $res" | ||
- set status 1 | ||
- } else { | ||
- set status 0 | ||
- } | ||
+ | ||
verbose "output is $output status $status" | ||
if { $outp eq "" || $outp eq "|& cat" } { | ||
return [list $status $output] |