From 53404b3f4b6d2ec1a39c0f7f73ad39ac9971d33a Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Fri, 5 May 2023 00:23:41 +0200 Subject: [PATCH] ci: run smoke tests in parallel This speeds up the smoke tests by over 5x on my laptop, but keeps two features that I find very important: 1. A stable output, which is used by tools like sizediff. 2. An easy to change text file with all the smoke tests. This means that parsing is a little bit harder, but with the help of packages like shlex and flag this is actually not very difficult. --- Makefile | 248 +-------------------------------------------------- go.mod | 1 + go.sum | 2 + smoketest.go | 168 ++++++++++++++++++++++++++++++++++ smoketest.sh | 128 ++++++++++++++++++++++++++ 5 files changed, 301 insertions(+), 246 deletions(-) create mode 100644 smoketest.go create mode 100755 smoketest.sh diff --git a/Makefile b/Makefile index 317f7b1..112edbb 100644 --- a/Makefile +++ b/Makefile @@ -7,254 +7,10 @@ FMT_PATHS = ./ fmt-check: @unformatted=$$(gofmt -l $(FMT_PATHS)); [ -z "$$unformatted" ] && exit 0; echo "Unformatted:"; for fn in $$unformatted; do echo " $$fn"; done; exit 1 +XTENSA ?= 1 smoke-test: @mkdir -p build - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/adt7410/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/adxl345/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pybadge ./examples/amg88xx - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/apa102/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=nano-33-ble ./examples/apds9960/proximity/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/apa102/itsybitsy-m0/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/at24cx/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bh1750/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/blinkm/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bmi160/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bmp180/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bmp280/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=trinket-m0 ./examples/bmp388/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=bluepill ./examples/ds1307/sram/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=bluepill ./examples/ds1307/time/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/ds3231/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/easystepper/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/espat/espconsole/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/espat/esphub/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/espat/espstation/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/flash/console/spi - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/flash/console/qspi - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/gc9a01/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/gps/i2c/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/gps/uart/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/hcsr04/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hd44780/customchar/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hd44780/text/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/hd44780i2c/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=nano-33-ble ./examples/hts221/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hub75/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/basic - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=xiao ./examples/ili9341/basic - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/pyportal_boing - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/scroll - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=xiao ./examples/ili9341/scroll - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/slideshow - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/lis3dh/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=nano-33-ble ./examples/lps22hb/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/lsm303agr/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/lsm6ds3/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mag3110/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp23017/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp23017-multiple/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp3008/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp2515/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/microbitmatrix/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit-v2 ./examples/microbitmatrix/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mma8653/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mpu6050/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=p1am-100 ./examples/p1am/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pico ./examples/pca9685/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/pcd8544/setbuffer/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/pcd8544/setpixel/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino ./examples/servo - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pybadge ./examples/shifter/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/sht3x/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/shtc3/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/ssd1306/i2c_128x32/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/ssd1306/spi_128x64/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/ssd1331/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/st7735/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/st7789/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/thermistor/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=circuitplay-bluefruit ./examples/tone - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/tm1637/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/touch/resistive/fourwire/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/touch/resistive/pyportal_touchpaint/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/vl53l1x/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/vl6180x/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/waveshare-epd/epd2in13/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/waveshare-epd/epd2in13x/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=microbit ./examples/waveshare-epd/epd4in2/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/wifinina/ntpclient/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/wifinina/udpstation/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/wifinina/tcpclient/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/wifinina/webclient/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/ws2812 - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.bin -target=m5stamp-c3 ./examples/ws2812 - @md5sum ./build/test.bin - tinygo build -size short -o ./build/test.hex -target=feather-nrf52840 ./examples/is31fl3731/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino ./examples/ws2812 - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=digispark ./examples/ws2812 - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=trinket-m0 ./examples/bme280/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/microphone/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/buzzer/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=trinket-m0 ./examples/veml6070/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l293x/simple/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l293x/speed/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l9110x/simple/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l9110x/speed/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=nucleo-f103rb ./examples/shiftregister/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=hifive1b ./examples/ssd1351/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/lis2mdl/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/max72xx/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/dht/main.go - @md5sum ./build/test.hex - # tinygo build -size short -o ./build/test.hex -target=arduino ./examples/keypad4x4/main.go - # @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/alarm/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/clkout/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/time/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/timer/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=pico ./examples/qmi8658c/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/ina260/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=nucleo-l432kc ./examples/aht20/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=feather-m4 ./examples/sdcard/console/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=feather-m4 ./examples/sdcard/tinyfs/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=wioterminal ./examples/rtl8720dn/webclient/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=wioterminal ./examples/rtl8720dn/webserver/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=wioterminal ./examples/rtl8720dn/mqttsub/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=feather-m4 ./examples/i2csoft/adt7410/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.elf -target=wioterminal ./examples/axp192/m5stack-core2-blinky/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/xpt2046/main.go - @md5sum ./build/test.uf2 -ifneq ($(XTENSA), 0) - tinygo build -size short -o ./build/test.elf -target=m5stack-core2 ./examples/ft6336/basic/ - @md5sum ./build/test.elf - tinygo build -size short -o ./build/test.elf -target=m5stack-core2 ./examples/ft6336/touchpaint/ - @md5sum ./build/test.elf -endif - tinygo build -size short -o ./build/test.hex -target=nucleo-wl55jc ./examples/sx126x/lora_rxtx/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/ssd1289/main.go - @md5sum ./build/test.uf2 - tinygo build -size short -o ./build/test.hex -target=pico ./examples/irremote/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=badger2040 ./examples/uc8151/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/scd4x/main.go - @md5sum ./build/test.uf2 - tinygo build -size short -o ./build/test.uf2 -target=circuitplay-express ./examples/makeybutton/main.go - @md5sum ./build/test.uf2 - tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/ds18b20/main.go - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.hex -target=nucleo-wl55jc ./examples/lora/lorawan/atcmd/ - @md5sum ./build/test.hex - tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/as560x/main.go - @md5sum ./build/test.uf2 + @go run ./smoketest.go -xtensa=$(XTENSA) smoketest.sh # rwildcard is a recursive version of $(wildcard) diff --git a/go.mod b/go.mod index 737bc4d..778adc6 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.15 require ( github.com/eclipse/paho.mqtt.golang v1.2.0 github.com/frankban/quicktest v1.10.2 + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 golang.org/x/net v0.0.0-20210614182718-04defd469f4e tinygo.org/x/tinyfont v0.3.0 tinygo.org/x/tinyfs v0.2.0 diff --git a/go.sum b/go.sum index 5a9b06e..12a238e 100644 --- a/go.sum +++ b/go.sum @@ -5,6 +5,8 @@ github.com/frankban/quicktest v1.10.2 h1:19ARM85nVi4xH7xPXuc5eM/udya5ieh7b/Sv+d8 github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/hajimehoshi/go-jisx0208 v1.0.0/go.mod h1:yYxEStHL7lt9uL+AbdWgW9gBumwieDoZCiB1f/0X0as= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= diff --git a/smoketest.go b/smoketest.go new file mode 100644 index 0000000..f1476d5 --- /dev/null +++ b/smoketest.go @@ -0,0 +1,168 @@ +//go:build none + +// Run all commands in smoketest.sh in parallel, for improved performance. +// This requires changing the -o flag to avoid a race condition between writing +// the output and reading it back to get the md5sum of the output. + +package main + +import ( + "bytes" + "crypto/md5" + "flag" + "fmt" + "os" + "os/exec" + "path" + "path/filepath" + "runtime" + + "github.com/google/shlex" +) + +var flagXtensa = flag.Bool("xtensa", true, "Enable Xtensa tests") + +func usage() { + fmt.Fprintln(os.Stderr, "usage: go run ./smoketest.go smoketest.txt") + flag.PrintDefaults() +} + +func main() { + flag.Parse() + if flag.NArg() != 1 { + usage() + os.Exit(1) + } + err := runSmokeTest(flag.Arg(0)) + if err != nil { + fmt.Fprintln(os.Stderr, err) + usage() + os.Exit(1) + } +} + +func runSmokeTest(filename string) error { + // Read all the lines in the file. + data, err := os.ReadFile(filename) + if err != nil { + return err + } + lines := bytes.Split(data, []byte("\n")) + + // Start a number of goroutine workers. + jobChan := make(chan *Job, len(lines)) + for i := 0; i < runtime.NumCPU(); i++ { + go worker(jobChan) + } + + // Create a temporary directory for the outputs of these tests. + tmpdir, err := os.MkdirTemp("", "drivers-smoketest-*") + if err != nil { + return err + } + + // Send work to the workers. + var jobs []*Job + for _, lineBytes := range lines { + // Parse the line into command line parameters. + line := string(lineBytes) + fields, err := shlex.Split(line) + if err != nil { + return err + } + if len(fields) == 0 { + continue // empty line + } + + // Replace the "output" flag, but store the original value. + var outpath, origOutpath string + for i := range fields { + if fields[i] == "-o" { + origOutpath = fields[i+1] + ext := path.Ext(origOutpath) + outpath = filepath.Join(tmpdir, fmt.Sprintf("output-%d%s", len(jobs), ext)) + fields[i+1] = outpath + break + } + } + if outpath == "" { + return fmt.Errorf("could not find -o flag in command: %v", fields) + } + + // Parse the command line parameters to get the -target flag. + if fields[1] != "build" { + return fmt.Errorf("unexpected subcommand: %#v", fields[1]) + } + flagSet := flag.NewFlagSet(fields[0], flag.ContinueOnError) + _ = flagSet.String("size", "", "") + _ = flagSet.String("o", "", "") + targetFlag := flagSet.String("target", "", "") + err = flagSet.Parse(fields[2:]) + if err != nil { + return fmt.Errorf("failed to parse command from %s: %w", filename, err) + } + + // Skip Xtensa tests if set in the flag. + if !*flagXtensa && *targetFlag == "m5stack-core2" { + continue + } + + // Create TinyGo command (to build the driver example). + output := &bytes.Buffer{} + output.Write(lineBytes) + output.Write([]byte("\n")) + cmd := exec.Command(fields[0], fields[1:]...) + cmd.Stdout = output + cmd.Stderr = output + + // Submit this command for execution. + job := &Job{ + output: output, + tinygoCmd: cmd, + outpath: outpath, + origOutpath: origOutpath, + resultChan: make(chan error), + } + jobChan <- job + jobs = append(jobs, job) + } + close(jobChan) // stops the workers (probably not necessary) + + // Read the output from all these jobs, in order. + for _, job := range jobs { + result := <-job.resultChan + os.Stdout.Write(job.output.Bytes()) + if result != nil { + return err + } + } + + return nil +} + +func worker(jobChan chan *Job) { + for job := range jobChan { + // Run the tinygo command. + err := job.tinygoCmd.Run() + if err != nil { + job.resultChan <- err + } + + // Create a md5sum, with output similar to the "md5sum" command line + // utility. + data, err := os.ReadFile(job.outpath) + if err != nil { + job.resultChan <- err + } + fmt.Fprintf(job.output, "%x %s\n", md5.Sum(data), job.origOutpath) + job.resultChan <- nil + } +} + +type Job struct { + output *bytes.Buffer + tinygoCmd *exec.Cmd + outpath string + origOutpath string + resultChan chan error +} diff --git a/smoketest.sh b/smoketest.sh new file mode 100755 index 0000000..18689ff --- /dev/null +++ b/smoketest.sh @@ -0,0 +1,128 @@ +#!/bin/sh +# These commands are run when running `make smoke-test`. +# They are all run in parallel with the -o flag changed to something unique (to +# avoid a race condition between writing the output and reading the result to +# get an md5sum). + +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/adt7410/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/adxl345/main.go +tinygo build -size short -o ./build/test.hex -target=pybadge ./examples/amg88xx +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/apa102/main.go +tinygo build -size short -o ./build/test.hex -target=nano-33-ble ./examples/apds9960/proximity/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/apa102/itsybitsy-m0/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/at24cx/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bh1750/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/blinkm/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bmi160/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bmp180/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bmp280/main.go +tinygo build -size short -o ./build/test.hex -target=trinket-m0 ./examples/bmp388/main.go +tinygo build -size short -o ./build/test.hex -target=bluepill ./examples/ds1307/sram/main.go +tinygo build -size short -o ./build/test.hex -target=bluepill ./examples/ds1307/time/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/ds3231/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/easystepper/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/espat/espconsole/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/espat/esphub/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/espat/espstation/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/flash/console/spi +tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/flash/console/qspi +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/gc9a01/main.go +tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/gps/i2c/main.go +tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/gps/uart/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/hcsr04/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hd44780/customchar/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hd44780/text/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/hd44780i2c/main.go +tinygo build -size short -o ./build/test.hex -target=nano-33-ble ./examples/hts221/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hub75/main.go +tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/basic +tinygo build -size short -o ./build/test.hex -target=xiao ./examples/ili9341/basic +tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/pyportal_boing +tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/scroll +tinygo build -size short -o ./build/test.hex -target=xiao ./examples/ili9341/scroll +tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/slideshow +tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/lis3dh/main.go +tinygo build -size short -o ./build/test.hex -target=nano-33-ble ./examples/lps22hb/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/lsm303agr/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/lsm6ds3/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mag3110/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp23017/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp23017-multiple/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp3008/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp2515/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/microbitmatrix/main.go +tinygo build -size short -o ./build/test.hex -target=microbit-v2 ./examples/microbitmatrix/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mma8653/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mpu6050/main.go +tinygo build -size short -o ./build/test.hex -target=p1am-100 ./examples/p1am/main.go +tinygo build -size short -o ./build/test.hex -target=pico ./examples/pca9685/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/pcd8544/setbuffer/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/pcd8544/setpixel/main.go +tinygo build -size short -o ./build/test.hex -target=arduino ./examples/servo +tinygo build -size short -o ./build/test.hex -target=pybadge ./examples/shifter/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/sht3x/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/shtc3/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/ssd1306/i2c_128x32/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/ssd1306/spi_128x64/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/ssd1331/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/st7735/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/st7789/main.go +tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/thermistor/main.go +tinygo build -size short -o ./build/test.hex -target=circuitplay-bluefruit ./examples/tone +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/tm1637/main.go +tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/touch/resistive/fourwire/main.go +tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/touch/resistive/pyportal_touchpaint/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/vl53l1x/main.go +tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/vl6180x/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/waveshare-epd/epd2in13/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/waveshare-epd/epd2in13x/main.go +tinygo build -size short -o ./build/test.hex -target=microbit ./examples/waveshare-epd/epd4in2/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/wifinina/ntpclient/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/wifinina/udpstation/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/wifinina/tcpclient/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/wifinina/webclient/main.go +tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/ws2812 +tinygo build -size short -o ./build/test.bin -target=m5stamp-c3 ./examples/ws2812 +tinygo build -size short -o ./build/test.hex -target=feather-nrf52840 ./examples/is31fl3731/main.go +tinygo build -size short -o ./build/test.hex -target=arduino ./examples/ws2812 +tinygo build -size short -o ./build/test.hex -target=digispark ./examples/ws2812 +tinygo build -size short -o ./build/test.hex -target=trinket-m0 ./examples/bme280/main.go +tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/microphone/main.go +tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/buzzer/main.go +tinygo build -size short -o ./build/test.hex -target=trinket-m0 ./examples/veml6070/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l293x/simple/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l293x/speed/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l9110x/simple/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l9110x/speed/main.go +tinygo build -size short -o ./build/test.hex -target=nucleo-f103rb ./examples/shiftregister/main.go +tinygo build -size short -o ./build/test.hex -target=hifive1b ./examples/ssd1351/main.go +tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/lis2mdl/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/max72xx/main.go +tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/dht/main.go +# tinygo build -size short -o ./build/test.hex -target=arduino ./examples/keypad4x4/main.go +tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/alarm/ +tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/clkout/ +tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/time/ +tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/timer/ +tinygo build -size short -o ./build/test.hex -target=pico ./examples/qmi8658c/main.go +tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/ina260/main.go +tinygo build -size short -o ./build/test.hex -target=nucleo-l432kc ./examples/aht20/main.go +tinygo build -size short -o ./build/test.hex -target=feather-m4 ./examples/sdcard/console/ +tinygo build -size short -o ./build/test.hex -target=feather-m4 ./examples/sdcard/tinyfs/ +tinygo build -size short -o ./build/test.hex -target=wioterminal ./examples/rtl8720dn/webclient/ +tinygo build -size short -o ./build/test.hex -target=wioterminal ./examples/rtl8720dn/webserver/ +tinygo build -size short -o ./build/test.hex -target=wioterminal ./examples/rtl8720dn/mqttsub/ +tinygo build -size short -o ./build/test.hex -target=feather-m4 ./examples/i2csoft/adt7410/ +tinygo build -size short -o ./build/test.elf -target=wioterminal ./examples/axp192/m5stack-core2-blinky/ +tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/xpt2046/main.go +tinygo build -size short -o ./build/test.elf -target=m5stack-core2 ./examples/ft6336/basic/ +tinygo build -size short -o ./build/test.elf -target=m5stack-core2 ./examples/ft6336/touchpaint/ +tinygo build -size short -o ./build/test.hex -target=nucleo-wl55jc ./examples/sx126x/lora_rxtx/ +tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/ssd1289/main.go +tinygo build -size short -o ./build/test.hex -target=pico ./examples/irremote/main.go +tinygo build -size short -o ./build/test.hex -target=badger2040 ./examples/uc8151/main.go +tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/scd4x/main.go +tinygo build -size short -o ./build/test.uf2 -target=circuitplay-express ./examples/makeybutton/main.go +tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/ds18b20/main.go +tinygo build -size short -o ./build/test.hex -target=nucleo-wl55jc ./examples/lora/lorawan/atcmd/ +tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/as560x/main.go