-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add initial parts of automated compatibility tests
This is the first half of the needed changes to set up automated compatibility tests against GNU findutils and bfs, handling the uploads of the build logs and JSON results. The workflow itself is heavily based on the one from uutils/coreutils: https://github.com/uutils/coreutils/blob/main/.github/workflows/GnuTests.yml but with various cleanups & tweaks to better suit findutils. This does *not* include the actual regression comparisons, because those will only pass once archives of these files are up on the main branch. Ref #128 Signed-off-by: Ryan Gonzalez <ryan.gonzalez@collabora.com>
- Loading branch information
Showing
2 changed files
with
143 additions
and
2 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
on: [push, pull_request] | ||
|
||
name: GNU findutils compatibility tests | ||
|
||
jobs: | ||
gnu-tests: | ||
name: Run GNU findutils tests | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout findutils | ||
uses: actions/checkout@v2 | ||
with: | ||
path: findutils | ||
- name: Checkout GNU findutils | ||
uses: actions/checkout@v2 | ||
with: | ||
repository: gnu-mirror-unofficial/findutils | ||
path: findutils.gnu | ||
ref: 5768a03ddfb5e18b1682e339d6cdd24ff721c510 | ||
submodules: true | ||
- uses: actions-rs/toolchain@v1 | ||
with: | ||
profile: minimal | ||
toolchain: stable | ||
override: true | ||
- name: Install dependencies | ||
shell: bash | ||
run: | | ||
# Enable sources & install dependencies | ||
sudo find /etc/apt/sources.list* -type f -exec sed -i 'p; s/^deb /deb-src /' '{}' + | ||
sudo apt-get update | ||
sudo apt-get build-dep findutils | ||
- name: Run GNU tests | ||
shell: bash | ||
run: | | ||
cd findutils | ||
bash util/build-gnu.sh ||: | ||
- name: Extract testing info | ||
shell: bash | ||
run: | | ||
LOG_FILE=findutils.gnu/tests/test-suite.log | ||
if test -f "$LOG_FILE"; then | ||
TOTAL=$(sed -n "s/.*# TOTAL: \(.*\)/\1/p" "$LOG_FILE"|tr -d '\r'|head -n1) | ||
PASS=$(sed -n "s/.*# PASS: \(.*\)/\1/p" "$LOG_FILE"|tr -d '\r'|head -n1) | ||
SKIP=$(sed -n "s/.*# SKIP: \(.*\)/\1/p" "$LOG_FILE"|tr -d '\r'|head -n1) | ||
FAIL=$(sed -n "s/.*# FAIL: \(.*\)/\1/p" "$LOG_FILE"|tr -d '\r'|head -n1) | ||
XPASS=$(sed -n "s/.*# XPASS: \(.*\)/\1/p" "$LOG_FILE"|tr -d '\r'|head -n1) | ||
ERROR=$(sed -n "s/.*# ERROR: \(.*\)/\1/p" "$LOG_FILE"|tr -d '\r'|head -n1) | ||
if [[ "$TOTAL" -eq 0 || "$TOTAL" -eq 1 ]]; then | ||
echo "Error in the execution, failing early" | ||
exit 1 | ||
fi | ||
output="GNU tests summary = TOTAL: $TOTAL / PASS: $PASS / FAIL: $FAIL / ERROR: $ERROR" | ||
echo "${output}" | ||
if [[ "$FAIL" -gt 0 || "$ERROR" -gt 0 ]]; then echo "::warning ::${output}" ; fi | ||
jq -n \ | ||
--arg date "$(date --rfc-email)" \ | ||
--arg sha "$GITHUB_SHA" \ | ||
--arg total "$TOTAL" \ | ||
--arg pass "$PASS" \ | ||
--arg skip "$SKIP" \ | ||
--arg fail "$FAIL" \ | ||
--arg xpass "$XPASS" \ | ||
--arg error "$ERROR" \ | ||
'{($date): { sha: $sha, total: $total, pass: $pass, skip: $skip, fail: $fail, xpass: $xpass, error: $error, }}' > gnu-result.json | ||
else | ||
echo "::error ::Failed to get summary of test results" | ||
fi | ||
- uses: actions/upload-artifact@v2 | ||
with: | ||
name: gnu-test-report | ||
path: findutils.gnu/tests/**/*.log | ||
- uses: actions/upload-artifact@v2 | ||
with: | ||
name: gnu-result | ||
path: gnu-result.json | ||
|
||
bfs-tests: | ||
name: Run BFS tests | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout findutils | ||
uses: actions/checkout@v2 | ||
with: | ||
path: findutils | ||
- name: Checkout BFS | ||
uses: actions/checkout@v2 | ||
with: | ||
repository: tavianator/bfs | ||
path: bfs | ||
ref: '2.3.1' | ||
- uses: actions-rs/toolchain@v1 | ||
with: | ||
profile: minimal | ||
toolchain: stable | ||
override: true | ||
- name: Install dependencies | ||
shell: bash | ||
run: | | ||
# Enable sources & install dependencies | ||
sudo find /etc/apt/sources.list* -type f -exec sed -i 'p; s/^deb /deb-src /' '{}' + | ||
sudo apt-get update | ||
sudo apt-get build-dep bfs | ||
- name: Run BFS tests | ||
shell: bash | ||
run: | | ||
cd findutils | ||
bash util/build-bfs.sh ||: | ||
- name: Extract testing info | ||
shell: bash | ||
run: | | ||
LOG_FILE=bfs/tests.log | ||
if test -f "$LOG_FILE"; then | ||
PASS=$(sed -n "s/^tests passed: \(.*\)/\1/p" "$LOG_FILE"|head -n1) | ||
FAIL=$(sed -n "s/^tests failed: \(.*\)/\1/p" "$LOG_FILE"|head -n1) | ||
TOTAL=$(($PASS + $FAIL)) | ||
if [[ "$TOTAL" -eq 0 || "$TOTAL" -eq 1 ]]; then | ||
echo "Error in the execution, failing early" | ||
exit 1 | ||
fi | ||
output="BFS tests summary = TOTAL: $TOTAL / PASS: $PASS / FAIL: $FAIL" | ||
echo "${output}" | ||
if [[ "$FAIL" -gt 0 || "$ERROR" -gt 0 ]]; then echo "::warning ::${output}" ; fi | ||
jq -n \ | ||
--arg date "$(date --rfc-email)" \ | ||
--arg sha "$GITHUB_SHA" \ | ||
--arg total "$TOTAL" \ | ||
--arg pass "$PASS" \ | ||
--arg fail "$FAIL" \ | ||
'{($date): { sha: $sha, total: $total, pass: $pass, fail: $fail, }}' > bfs-result.json | ||
else | ||
echo "::error ::Failed to get summary of test results" | ||
fi | ||
- uses: actions/upload-artifact@v2 | ||
with: | ||
name: bfs-test-report | ||
path: bfs/tests.log | ||
- uses: actions/upload-artifact@v2 | ||
with: | ||
name: bfs-result | ||
path: bfs-result.json |
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