Skip to content

Commit ea3dda8

Browse files
authored
Merge pull request #304 from riscv-software-src/regress
Create smoke,regress,nightly tests; Add nightly GitHub workflow
2 parents 67576a2 + 02076bb commit ea3dda8

File tree

5 files changed

+179
-93
lines changed

5 files changed

+179
-93
lines changed

.github/workflows/nightly.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
name: Regression test
2+
3+
on:
4+
schedule:
5+
- cron: '30 2 * * *'
6+
workflow_dispatch:
7+
8+
jobs:
9+
# check_date from: https://stackoverflow.com/questions/63014786/how-to-schedule-a-github-actions-nightly-build-but-run-it-only-when-there-where
10+
check_date:
11+
runs-on: ubuntu-latest
12+
name: Check latest commit
13+
outputs:
14+
should_run: ${{ steps.should_run.outputs.should_run }}
15+
steps:
16+
- uses: actions/checkout@v2
17+
- name: print latest_commit
18+
run: echo ${{ github.sha }}
19+
20+
- id: should_run
21+
continue-on-error: true
22+
name: check latest commit is less than a day
23+
if: ${{ github.event_name == 'schedule' }}
24+
run: test -z $(git rev-list --after="24 hours" ${{ github.sha }}) && echo "::set-output name=should_run::false"
25+
nightly:
26+
needs: check_date
27+
if: ${{ needs.check_date.outputs.should_run != 'false' }}
28+
runs-on: ubuntu-latest
29+
steps:
30+
- name: Clone Github Repo Action
31+
uses: actions/checkout@v4
32+
- name: Setup apptainer
33+
uses: eWaterCycle/[email protected]
34+
- name: Get container from cache
35+
id: cache-sif
36+
uses: actions/cache@v3
37+
with:
38+
path: .singularity/image.sif
39+
key: ${{ hashFiles('container.def', 'bin/.container-tag') }}
40+
- name: Get gems and node files from cache
41+
id: cache-bundle-npm
42+
uses: actions/cache@v3
43+
with:
44+
path: |
45+
.home/.gems
46+
node_modules
47+
key: ${{ hashFiles('Gemfile.lock') }}-${{ hashFiles('package-lock.json') }}
48+
- if: ${{ steps.cache-sif.outputs.cache-hit != 'true' }}
49+
name: Build container
50+
run: ./bin/build_container
51+
- name: Setup project
52+
run: ./bin/setup
53+
- name: Run regression
54+
run: ./do test:nightly

.github/workflows/regress.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ jobs:
3232
- name: Setup project
3333
run: ./bin/setup
3434
- name: Run regression
35-
run: ./do regress
35+
run: ./do test:regress

README.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ Quick start:
105105
106106
## examples
107107
108-
# validate against the schema
109-
./do validate
108+
# run smoke tests
109+
./do test:smoke
110110
111111
# generate all versions of ISA manual, as an Antora static website
112112
./do gen:html_manual MANUAL_NAME=isa VERSIONS=all

Rakefile

Lines changed: 113 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,22 @@ namespace :serve do
5555
end
5656
end
5757

58-
desc "Run the IDL compiler test suite"
59-
task :idl_test do
60-
t = Minitest::TestTask.new(:lib_test)
61-
t.test_globs = ["#{$root}/lib/idl/tests/test_*.rb"]
62-
t.process_env
63-
ruby t.make_test_cmd
64-
end
58+
namespace :test do
59+
# "Run the IDL compiler test suite"
60+
task :idl_compiler do
61+
t = Minitest::TestTask.new(:lib_test)
62+
t.test_globs = ["#{$root}/lib/idl/tests/test_*.rb"]
63+
t.process_env
64+
ruby t.make_test_cmd
65+
end
6566

66-
desc "Run the Ruby library test suite"
67-
task :lib_test do
68-
t = Minitest::TestTask.new(:lib_test)
69-
t.test_globs = ["#{$root}/lib/test/test_*.rb"]
70-
t.process_env
71-
ruby t.make_test_cmd
67+
# "Run the Ruby library test suite"
68+
task :lib do
69+
t = Minitest::TestTask.new(:lib_test)
70+
t.test_globs = ["#{$root}/lib/test/test_*.rb"]
71+
t.process_env
72+
ruby t.make_test_cmd
73+
end
7274
end
7375

7476
desc "Clean up all generated files"
@@ -77,7 +79,7 @@ task :clean do
7779
FileUtils.rm_rf $root / ".stamps"
7880
end
7981

80-
namespace :validate do
82+
namespace :test do
8183
task :insts do
8284
puts "Checking instruction encodings..."
8385
inst_paths = Dir.glob("#{$root}/arch/inst/**/*.yaml").map { |f| Pathname.new(f) }
@@ -95,9 +97,10 @@ namespace :validate do
9597
progressbar.increment
9698
validator.validate(f)
9799
end
100+
Rake::Task["test:insts"].invoke
98101
puts "All files validate against their schema"
99102
end
100-
task idl: ["gen:arch", "#{$root}/.stamps/arch-gen-_32.stamp", "#{$root}/.stamps/arch-gen-_64.stamp"] do
103+
task idl_model: ["gen:arch", "#{$root}/.stamps/arch-gen-_32.stamp", "#{$root}/.stamps/arch-gen-_64.stamp"] do
101104
print "Parsing IDL code for RV32..."
102105
arch_def_32 = arch_def_for("_32")
103106
puts "done"
@@ -114,9 +117,6 @@ namespace :validate do
114117
end
115118
end
116119

117-
desc "Validate the arch docs"
118-
task validate: ["validate:schema", "validate:idl", "validate:insts"]
119-
120120
def insert_warning(str, from)
121121
# insert a warning on the second line
122122
lines = str.lines
@@ -274,70 +274,101 @@ namespace :gen do
274274
end
275275
end
276276

277-
desc <<~DESC
278-
Run the regression tests
279-
280-
These tests must pass before a commit will be allowed in the main branch on GitHub
281-
DESC
282-
task :regress do
283-
Rake::Task["idl_test"].invoke
284-
Rake::Task["lib_test"].invoke
285-
Rake::Task["validate"].invoke
286-
ENV["MANUAL_NAME"] = "isa"
287-
ENV["VERSIONS"] = "all"
288-
Rake::Task["gen:html_manual"].invoke
289-
Rake::Task["gen:html"].invoke("generic_rv64")
290-
ENV["EXT"] = "B"
291-
ENV["VERSION"] = "latest"
292-
Rake::Task["gen:ext_pdf"].invoke
293-
Rake::Task["#{$root}/gen/certificate_doc/pdf/MockCertificateModel.pdf"].invoke
294-
Rake::Task["#{$root}/gen/certificate_doc/pdf/MC100.pdf"].invoke
295-
Rake::Task["#{$root}/gen/profile_doc/pdf/MockProfileRelease.pdf"].invoke
296-
Rake::Task["#{$root}/gen/profile_doc/pdf/RVA20.pdf"].invoke
297-
Rake::Task["#{$root}/gen/profile_doc/pdf/RVA22.pdf"].invoke
298-
Rake::Task["#{$root}/gen/profile_doc/pdf/RVI20.pdf"].invoke
299-
300-
puts
301-
puts "Regression test PASSED"
277+
namespace :test do
278+
desc <<~DESC
279+
Run smoke tests
280+
281+
These are basic but fast-running tests to check the database and tools
282+
DESC
283+
task :smoke do
284+
Rake::Task["test:idl_compiler"].invoke
285+
Rake::Task["test:lib"].invoke
286+
Rake::Task["test:schema"].invoke
287+
Rake::Task["test:idl_model"].invoke
288+
end
289+
290+
desc <<~DESC
291+
Run the regression tests
292+
293+
These tests must pass before a commit will be allowed in the main branch on GitHub
294+
DESC
295+
task :regress do
296+
Rake::Task["test:smoke"].invoke
297+
298+
ENV["MANUAL_NAME"] = "isa"
299+
ENV["VERSIONS"] = "all"
300+
Rake::Task["gen:html_manual"].invoke
301+
302+
ENV["EXT"] = "B"
303+
ENV["VERSION"] = "latest"
304+
Rake::Task["gen:ext_pdf"].invoke
305+
306+
Rake::Task["gen:html"].invoke("generic_rv64")
307+
308+
Rake::Task["#{$root}/gen/certificate_doc/pdf/MockCertificateModel.pdf"].invoke
309+
Rake::Task["#{$root}/gen/profile_doc/pdf/MockProfileRelease.pdf"].invoke
310+
311+
puts
312+
puts "Regression test PASSED"
313+
end
314+
315+
desc <<~DESC
316+
Run the nightly regression tests
317+
318+
Generally, this tries to build all artifacts
319+
DESC
320+
task :nightly do
321+
Rake::Task["regress"].invoke
322+
323+
Rake::Task["#{$root}/gen/certificate_doc/pdf/MC100.pdf"].invoke
324+
Rake::Task["#{$root}/gen/profile_doc/pdf/RVA20.pdf"].invoke
325+
Rake::Task["#{$root}/gen/profile_doc/pdf/RVA22.pdf"].invoke
326+
Rake::Task["#{$root}/gen/profile_doc/pdf/RVI20.pdf"].invoke
327+
328+
puts
329+
puts "Nightly regression test PASSED"
330+
end
302331
end
303332

304-
desc <<~DESC
305-
Generate all certificates and profile PDFs.
306-
DESC
307-
task :cert_profile_pdfs do
308-
puts "==================================="
309-
puts "cert_profile_pdfs: Generating MC100"
310-
puts " 1st target"
311-
puts "==================================="
312-
Rake::Task["#{$root}/gen/certificate_doc/pdf/MC100.pdf"].invoke
313-
314-
puts "=================================================="
315-
puts "cert_profile_pdfs: Generating MockCertificateModel"
316-
puts " 2nd target"
317-
puts "=================================================="
318-
Rake::Task["#{$root}/gen/certificate_doc/pdf/MockCertificateModel.pdf"].invoke
319-
320-
puts "==================================="
321-
puts "cert_profile_pdfs: Generating RVA20"
322-
puts " 3rd target"
323-
puts "==================================="
324-
Rake::Task["#{$root}/gen/profile_doc/pdf/RVA20.pdf"].invoke
325-
326-
puts "==================================="
327-
puts "cert_profile_pdfs: Generating RVA22"
328-
puts " 4th target"
329-
puts "==================================="
330-
Rake::Task["#{$root}/gen/profile_doc/pdf/RVA22.pdf"].invoke
331-
332-
puts "==================================="
333-
puts "cert_profile_pdfs: Generating RVI20"
334-
puts " 5th target"
335-
puts "==================================="
336-
Rake::Task["#{$root}/gen/profile_doc/pdf/RVI20.pdf"].invoke
337-
338-
puts "==================================="
339-
puts "cert_profile_pdfs: Generating MockProfileRelease"
340-
puts " 6th target"
341-
puts "==================================="
342-
Rake::Task["#{$root}/gen/profile_doc/pdf/MockProfileRelease.pdf"].invoke
333+
namespace :gen do
334+
desc <<~DESC
335+
Generate all certificates and profile PDFs.
336+
DESC
337+
task :cert_profile_pdfs do
338+
puts "==================================="
339+
puts "cert_profile_pdfs: Generating MC100"
340+
puts " 1st target"
341+
puts "==================================="
342+
Rake::Task["#{$root}/gen/certificate_doc/pdf/MC100.pdf"].invoke
343+
344+
puts "=================================================="
345+
puts "cert_profile_pdfs: Generating MockCertificateModel"
346+
puts " 2nd target"
347+
puts "=================================================="
348+
Rake::Task["#{$root}/gen/certificate_doc/pdf/MockCertificateModel.pdf"].invoke
349+
350+
puts "==================================="
351+
puts "cert_profile_pdfs: Generating RVA20"
352+
puts " 3rd target"
353+
puts "==================================="
354+
Rake::Task["#{$root}/gen/profile_doc/pdf/RVA20.pdf"].invoke
355+
356+
puts "==================================="
357+
puts "cert_profile_pdfs: Generating RVA22"
358+
puts " 4th target"
359+
puts "==================================="
360+
Rake::Task["#{$root}/gen/profile_doc/pdf/RVA22.pdf"].invoke
361+
362+
puts "==================================="
363+
puts "cert_profile_pdfs: Generating RVI20"
364+
puts " 5th target"
365+
puts "==================================="
366+
Rake::Task["#{$root}/gen/profile_doc/pdf/RVI20.pdf"].invoke
367+
368+
puts "==================================="
369+
puts "cert_profile_pdfs: Generating MockProfileRelease"
370+
puts " 6th target"
371+
puts "==================================="
372+
Rake::Task["#{$root}/gen/profile_doc/pdf/MockProfileRelease.pdf"].invoke
373+
end
343374
end

backends/arch_gen/tasks.rake

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,14 @@ namespace :gen do
168168
end
169169
end
170170

171-
namespace :validate do
172-
desc "Validate that a configuration folder valid for the list of extensions it claims to implement"
173-
task :cfg, [:config_name] do |_t, args|
174-
raise "No config '#{args[:config_name]}' found in cfgs/" unless ($root / "cfgs" / args[:config_name]).directory?
171+
# TODO: Add this back once we settle on the config file format
172+
# namespace :validate do
173+
# desc "Validate that a configuration folder valid for the list of extensions it claims to implement"
174+
# task :cfg, [:config_name] do |_t, args|
175+
# raise "No config '#{args[:config_name]}' found in cfgs/" unless ($root / "cfgs" / args[:config_name]).directory?
175176

176-
ArchGen.new(args[:config_name]).validate_params
177+
# ArchGen.new(args[:config_name]).validate_params
177178

178-
puts "Success! The '#{args[:config_name]}' configuration passes validation checks"
179-
end
180-
end
179+
# puts "Success! The '#{args[:config_name]}' configuration passes validation checks"
180+
# end
181+
# end

0 commit comments

Comments
 (0)