119ea8026Sopenharmony_ciname: test 219ea8026Sopenharmony_cion: [push, pull_request] 319ea8026Sopenharmony_ci 419ea8026Sopenharmony_cienv: 519ea8026Sopenharmony_ci CFLAGS: -Werror 619ea8026Sopenharmony_ci MAKEFLAGS: -j 719ea8026Sopenharmony_ci 819ea8026Sopenharmony_cijobs: 919ea8026Sopenharmony_ci # run tests 1019ea8026Sopenharmony_ci test: 1119ea8026Sopenharmony_ci runs-on: ubuntu-18.04 1219ea8026Sopenharmony_ci strategy: 1319ea8026Sopenharmony_ci fail-fast: false 1419ea8026Sopenharmony_ci matrix: 1519ea8026Sopenharmony_ci arch: [x86_64, thumb, mips, powerpc] 1619ea8026Sopenharmony_ci 1719ea8026Sopenharmony_ci steps: 1819ea8026Sopenharmony_ci - uses: actions/checkout@v2 1919ea8026Sopenharmony_ci - name: install 2019ea8026Sopenharmony_ci run: | 2119ea8026Sopenharmony_ci # need toml, also pip3 isn't installed by default? 2219ea8026Sopenharmony_ci sudo apt-get update -qq 2319ea8026Sopenharmony_ci sudo apt-get install -qq python3 python3-pip lcov 2419ea8026Sopenharmony_ci sudo pip3 install toml 2519ea8026Sopenharmony_ci gcc --version 2619ea8026Sopenharmony_ci 2719ea8026Sopenharmony_ci # setup a ram-backed disk to speed up reentrant tests 2819ea8026Sopenharmony_ci mkdir disks 2919ea8026Sopenharmony_ci sudo mount -t tmpfs -o size=100m tmpfs disks 3019ea8026Sopenharmony_ci TESTFLAGS="$TESTFLAGS --disk=disks/disk" 3119ea8026Sopenharmony_ci 3219ea8026Sopenharmony_ci # collect coverage 3319ea8026Sopenharmony_ci mkdir -p coverage 3419ea8026Sopenharmony_ci TESTFLAGS="$TESTFLAGS --coverage=` 3519ea8026Sopenharmony_ci `coverage/${{github.job}}-${{matrix.arch}}.info" 3619ea8026Sopenharmony_ci 3719ea8026Sopenharmony_ci echo "TESTFLAGS=$TESTFLAGS" >> $GITHUB_ENV 3819ea8026Sopenharmony_ci 3919ea8026Sopenharmony_ci # cross-compile with ARM Thumb (32-bit, little-endian) 4019ea8026Sopenharmony_ci - name: install-thumb 4119ea8026Sopenharmony_ci if: ${{matrix.arch == 'thumb'}} 4219ea8026Sopenharmony_ci run: | 4319ea8026Sopenharmony_ci sudo apt-get install -qq \ 4419ea8026Sopenharmony_ci gcc-arm-linux-gnueabi \ 4519ea8026Sopenharmony_ci libc6-dev-armel-cross \ 4619ea8026Sopenharmony_ci qemu-user 4719ea8026Sopenharmony_ci echo "CC=arm-linux-gnueabi-gcc -mthumb --static" >> $GITHUB_ENV 4819ea8026Sopenharmony_ci echo "EXEC=qemu-arm" >> $GITHUB_ENV 4919ea8026Sopenharmony_ci arm-linux-gnueabi-gcc --version 5019ea8026Sopenharmony_ci qemu-arm -version 5119ea8026Sopenharmony_ci # cross-compile with MIPS (32-bit, big-endian) 5219ea8026Sopenharmony_ci - name: install-mips 5319ea8026Sopenharmony_ci if: ${{matrix.arch == 'mips'}} 5419ea8026Sopenharmony_ci run: | 5519ea8026Sopenharmony_ci sudo apt-get install -qq \ 5619ea8026Sopenharmony_ci gcc-mips-linux-gnu \ 5719ea8026Sopenharmony_ci libc6-dev-mips-cross \ 5819ea8026Sopenharmony_ci qemu-user 5919ea8026Sopenharmony_ci echo "CC=mips-linux-gnu-gcc --static" >> $GITHUB_ENV 6019ea8026Sopenharmony_ci echo "EXEC=qemu-mips" >> $GITHUB_ENV 6119ea8026Sopenharmony_ci mips-linux-gnu-gcc --version 6219ea8026Sopenharmony_ci qemu-mips -version 6319ea8026Sopenharmony_ci # cross-compile with PowerPC (32-bit, big-endian) 6419ea8026Sopenharmony_ci - name: install-powerpc 6519ea8026Sopenharmony_ci if: ${{matrix.arch == 'powerpc'}} 6619ea8026Sopenharmony_ci run: | 6719ea8026Sopenharmony_ci sudo apt-get install -qq \ 6819ea8026Sopenharmony_ci gcc-powerpc-linux-gnu \ 6919ea8026Sopenharmony_ci libc6-dev-powerpc-cross \ 7019ea8026Sopenharmony_ci qemu-user 7119ea8026Sopenharmony_ci echo "CC=powerpc-linux-gnu-gcc --static" >> $GITHUB_ENV 7219ea8026Sopenharmony_ci echo "EXEC=qemu-ppc" >> $GITHUB_ENV 7319ea8026Sopenharmony_ci powerpc-linux-gnu-gcc --version 7419ea8026Sopenharmony_ci qemu-ppc -version 7519ea8026Sopenharmony_ci 7619ea8026Sopenharmony_ci # make sure example can at least compile 7719ea8026Sopenharmony_ci - name: test-example 7819ea8026Sopenharmony_ci run: | 7919ea8026Sopenharmony_ci sed -n '/``` c/,/```/{/```/d; p}' README.md > test.c 8019ea8026Sopenharmony_ci make all CFLAGS+=" \ 8119ea8026Sopenharmony_ci -Duser_provided_block_device_read=NULL \ 8219ea8026Sopenharmony_ci -Duser_provided_block_device_prog=NULL \ 8319ea8026Sopenharmony_ci -Duser_provided_block_device_erase=NULL \ 8419ea8026Sopenharmony_ci -Duser_provided_block_device_sync=NULL \ 8519ea8026Sopenharmony_ci -include stdio.h" 8619ea8026Sopenharmony_ci rm test.c 8719ea8026Sopenharmony_ci 8819ea8026Sopenharmony_ci # test configurations 8919ea8026Sopenharmony_ci # normal+reentrant tests 9019ea8026Sopenharmony_ci - name: test-default 9119ea8026Sopenharmony_ci run: | 9219ea8026Sopenharmony_ci make clean 9319ea8026Sopenharmony_ci make test TESTFLAGS+="-nrk" 9419ea8026Sopenharmony_ci # NOR flash: read/prog = 1 block = 4KiB 9519ea8026Sopenharmony_ci - name: test-nor 9619ea8026Sopenharmony_ci run: | 9719ea8026Sopenharmony_ci make clean 9819ea8026Sopenharmony_ci make test TESTFLAGS+="-nrk \ 9919ea8026Sopenharmony_ci -DLFS_READ_SIZE=1 -DLFS_BLOCK_SIZE=4096" 10019ea8026Sopenharmony_ci # SD/eMMC: read/prog = 512 block = 512 10119ea8026Sopenharmony_ci - name: test-emmc 10219ea8026Sopenharmony_ci run: | 10319ea8026Sopenharmony_ci make clean 10419ea8026Sopenharmony_ci make test TESTFLAGS+="-nrk \ 10519ea8026Sopenharmony_ci -DLFS_READ_SIZE=512 -DLFS_BLOCK_SIZE=512" 10619ea8026Sopenharmony_ci # NAND flash: read/prog = 4KiB block = 32KiB 10719ea8026Sopenharmony_ci - name: test-nand 10819ea8026Sopenharmony_ci run: | 10919ea8026Sopenharmony_ci make clean 11019ea8026Sopenharmony_ci make test TESTFLAGS+="-nrk \ 11119ea8026Sopenharmony_ci -DLFS_READ_SIZE=4096 -DLFS_BLOCK_SIZE=\(32*1024\)" 11219ea8026Sopenharmony_ci # other extreme geometries that are useful for various corner cases 11319ea8026Sopenharmony_ci - name: test-no-intrinsics 11419ea8026Sopenharmony_ci run: | 11519ea8026Sopenharmony_ci make clean 11619ea8026Sopenharmony_ci make test TESTFLAGS+="-nrk \ 11719ea8026Sopenharmony_ci -DLFS_NO_INTRINSICS" 11819ea8026Sopenharmony_ci - name: test-byte-writes 11919ea8026Sopenharmony_ci # it just takes too long to test byte-level writes when in qemu, 12019ea8026Sopenharmony_ci # should be plenty covered by the other configurations 12119ea8026Sopenharmony_ci if: ${{matrix.arch == 'x86_64'}} 12219ea8026Sopenharmony_ci run: | 12319ea8026Sopenharmony_ci make clean 12419ea8026Sopenharmony_ci make test TESTFLAGS+="-nrk \ 12519ea8026Sopenharmony_ci -DLFS_READ_SIZE=1 -DLFS_CACHE_SIZE=1" 12619ea8026Sopenharmony_ci - name: test-block-cycles 12719ea8026Sopenharmony_ci run: | 12819ea8026Sopenharmony_ci make clean 12919ea8026Sopenharmony_ci make test TESTFLAGS+="-nrk \ 13019ea8026Sopenharmony_ci -DLFS_BLOCK_CYCLES=1" 13119ea8026Sopenharmony_ci - name: test-odd-block-count 13219ea8026Sopenharmony_ci run: | 13319ea8026Sopenharmony_ci make clean 13419ea8026Sopenharmony_ci make test TESTFLAGS+="-nrk \ 13519ea8026Sopenharmony_ci -DLFS_BLOCK_COUNT=1023 -DLFS_LOOKAHEAD_SIZE=256" 13619ea8026Sopenharmony_ci - name: test-odd-block-size 13719ea8026Sopenharmony_ci run: | 13819ea8026Sopenharmony_ci make clean 13919ea8026Sopenharmony_ci make test TESTFLAGS+="-nrk \ 14019ea8026Sopenharmony_ci -DLFS_READ_SIZE=11 -DLFS_BLOCK_SIZE=704" 14119ea8026Sopenharmony_ci 14219ea8026Sopenharmony_ci # upload coverage for later coverage 14319ea8026Sopenharmony_ci - name: upload-coverage 14419ea8026Sopenharmony_ci uses: actions/upload-artifact@v2 14519ea8026Sopenharmony_ci with: 14619ea8026Sopenharmony_ci name: coverage 14719ea8026Sopenharmony_ci path: coverage 14819ea8026Sopenharmony_ci retention-days: 1 14919ea8026Sopenharmony_ci 15019ea8026Sopenharmony_ci # update results 15119ea8026Sopenharmony_ci - name: results-code 15219ea8026Sopenharmony_ci run: | 15319ea8026Sopenharmony_ci mkdir -p results 15419ea8026Sopenharmony_ci make clean 15519ea8026Sopenharmony_ci make code \ 15619ea8026Sopenharmony_ci CFLAGS+=" \ 15719ea8026Sopenharmony_ci -DLFS_NO_ASSERT \ 15819ea8026Sopenharmony_ci -DLFS_NO_DEBUG \ 15919ea8026Sopenharmony_ci -DLFS_NO_WARN \ 16019ea8026Sopenharmony_ci -DLFS_NO_ERROR" \ 16119ea8026Sopenharmony_ci CODEFLAGS+="-o results/code-${{matrix.arch}}.csv" 16219ea8026Sopenharmony_ci - name: results-code-readonly 16319ea8026Sopenharmony_ci run: | 16419ea8026Sopenharmony_ci mkdir -p results 16519ea8026Sopenharmony_ci make clean 16619ea8026Sopenharmony_ci make code \ 16719ea8026Sopenharmony_ci CFLAGS+=" \ 16819ea8026Sopenharmony_ci -DLFS_NO_ASSERT \ 16919ea8026Sopenharmony_ci -DLFS_NO_DEBUG \ 17019ea8026Sopenharmony_ci -DLFS_NO_WARN \ 17119ea8026Sopenharmony_ci -DLFS_NO_ERROR \ 17219ea8026Sopenharmony_ci -DLFS_READONLY" \ 17319ea8026Sopenharmony_ci CODEFLAGS+="-o results/code-${{matrix.arch}}-readonly.csv" 17419ea8026Sopenharmony_ci - name: results-code-threadsafe 17519ea8026Sopenharmony_ci run: | 17619ea8026Sopenharmony_ci mkdir -p results 17719ea8026Sopenharmony_ci make clean 17819ea8026Sopenharmony_ci make code \ 17919ea8026Sopenharmony_ci CFLAGS+=" \ 18019ea8026Sopenharmony_ci -DLFS_NO_ASSERT \ 18119ea8026Sopenharmony_ci -DLFS_NO_DEBUG \ 18219ea8026Sopenharmony_ci -DLFS_NO_WARN \ 18319ea8026Sopenharmony_ci -DLFS_NO_ERROR \ 18419ea8026Sopenharmony_ci -DLFS_THREADSAFE" \ 18519ea8026Sopenharmony_ci CODEFLAGS+="-o results/code-${{matrix.arch}}-threadsafe.csv" 18619ea8026Sopenharmony_ci - name: results-code-migrate 18719ea8026Sopenharmony_ci run: | 18819ea8026Sopenharmony_ci mkdir -p results 18919ea8026Sopenharmony_ci make clean 19019ea8026Sopenharmony_ci make code \ 19119ea8026Sopenharmony_ci CFLAGS+=" \ 19219ea8026Sopenharmony_ci -DLFS_NO_ASSERT \ 19319ea8026Sopenharmony_ci -DLFS_NO_DEBUG \ 19419ea8026Sopenharmony_ci -DLFS_NO_WARN \ 19519ea8026Sopenharmony_ci -DLFS_NO_ERROR \ 19619ea8026Sopenharmony_ci -DLFS_MIGRATE" \ 19719ea8026Sopenharmony_ci CODEFLAGS+="-o results/code-${{matrix.arch}}-migrate.csv" 19819ea8026Sopenharmony_ci - name: results-code-error-asserts 19919ea8026Sopenharmony_ci run: | 20019ea8026Sopenharmony_ci mkdir -p results 20119ea8026Sopenharmony_ci make clean 20219ea8026Sopenharmony_ci make code \ 20319ea8026Sopenharmony_ci CFLAGS+=" \ 20419ea8026Sopenharmony_ci -DLFS_NO_DEBUG \ 20519ea8026Sopenharmony_ci -DLFS_NO_WARN \ 20619ea8026Sopenharmony_ci -DLFS_NO_ERROR \ 20719ea8026Sopenharmony_ci -D'LFS_ASSERT(test)=do {if(!(test)) {return -1;}} while(0)'" \ 20819ea8026Sopenharmony_ci CODEFLAGS+="-o results/code-${{matrix.arch}}-error-asserts.csv" 20919ea8026Sopenharmony_ci - name: upload-results 21019ea8026Sopenharmony_ci uses: actions/upload-artifact@v2 21119ea8026Sopenharmony_ci with: 21219ea8026Sopenharmony_ci name: results 21319ea8026Sopenharmony_ci path: results 21419ea8026Sopenharmony_ci # limit reporting to Thumb, otherwise there would be too many numbers 21519ea8026Sopenharmony_ci # flying around for the results to be easily readable 21619ea8026Sopenharmony_ci - name: collect-status 21719ea8026Sopenharmony_ci if: ${{matrix.arch == 'thumb'}} 21819ea8026Sopenharmony_ci run: | 21919ea8026Sopenharmony_ci mkdir -p status 22019ea8026Sopenharmony_ci for f in $(shopt -s nullglob ; echo results/code*.csv) 22119ea8026Sopenharmony_ci do 22219ea8026Sopenharmony_ci export STEP="results-code$( 22319ea8026Sopenharmony_ci echo $f | sed -n 's/.*code-.*-\(.*\).csv/-\1/p')" 22419ea8026Sopenharmony_ci export CONTEXT="results / code$( 22519ea8026Sopenharmony_ci echo $f | sed -n 's/.*code-.*-\(.*\).csv/ (\1)/p')" 22619ea8026Sopenharmony_ci export PREV="$(curl -sS \ 22719ea8026Sopenharmony_ci "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/status/master" \ 22819ea8026Sopenharmony_ci | jq -re 'select(.sha != env.GITHUB_SHA) | .statuses[] 22919ea8026Sopenharmony_ci | select(.context == env.CONTEXT).description 23019ea8026Sopenharmony_ci | capture("Code size is (?<result>[0-9]+)").result' \ 23119ea8026Sopenharmony_ci || echo 0)" 23219ea8026Sopenharmony_ci export DESCRIPTION="$(./scripts/code.py -u $f -s | awk ' 23319ea8026Sopenharmony_ci NR==2 {printf "Code size is %d B",$2} 23419ea8026Sopenharmony_ci NR==2 && ENVIRON["PREV"]+0 != 0 { 23519ea8026Sopenharmony_ci printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]}')" 23619ea8026Sopenharmony_ci jq -n '{ 23719ea8026Sopenharmony_ci state: "success", 23819ea8026Sopenharmony_ci context: env.CONTEXT, 23919ea8026Sopenharmony_ci description: env.DESCRIPTION, 24019ea8026Sopenharmony_ci target_job: "${{github.job}} (${{matrix.arch}})", 24119ea8026Sopenharmony_ci target_step: env.STEP}' \ 24219ea8026Sopenharmony_ci | tee status/code$( 24319ea8026Sopenharmony_ci echo $f | sed -n 's/.*code-.*-\(.*\).csv/-\1/p').json 24419ea8026Sopenharmony_ci done 24519ea8026Sopenharmony_ci - name: upload-status 24619ea8026Sopenharmony_ci if: ${{matrix.arch == 'thumb'}} 24719ea8026Sopenharmony_ci uses: actions/upload-artifact@v2 24819ea8026Sopenharmony_ci with: 24919ea8026Sopenharmony_ci name: status 25019ea8026Sopenharmony_ci path: status 25119ea8026Sopenharmony_ci retention-days: 1 25219ea8026Sopenharmony_ci 25319ea8026Sopenharmony_ci # run under Valgrind to check for memory errors 25419ea8026Sopenharmony_ci valgrind: 25519ea8026Sopenharmony_ci runs-on: ubuntu-18.04 25619ea8026Sopenharmony_ci steps: 25719ea8026Sopenharmony_ci - uses: actions/checkout@v2 25819ea8026Sopenharmony_ci - name: install 25919ea8026Sopenharmony_ci run: | 26019ea8026Sopenharmony_ci # need toml, also pip3 isn't installed by default? 26119ea8026Sopenharmony_ci sudo apt-get update -qq 26219ea8026Sopenharmony_ci sudo apt-get install -qq python3 python3-pip 26319ea8026Sopenharmony_ci sudo pip3 install toml 26419ea8026Sopenharmony_ci - name: install-valgrind 26519ea8026Sopenharmony_ci run: | 26619ea8026Sopenharmony_ci sudo apt-get update -qq 26719ea8026Sopenharmony_ci sudo apt-get install -qq valgrind 26819ea8026Sopenharmony_ci valgrind --version 26919ea8026Sopenharmony_ci # normal tests, we don't need to test all geometries 27019ea8026Sopenharmony_ci - name: test-valgrind 27119ea8026Sopenharmony_ci run: make test TESTFLAGS+="-k --valgrind" 27219ea8026Sopenharmony_ci 27319ea8026Sopenharmony_ci # self-host with littlefs-fuse for a fuzz-like test 27419ea8026Sopenharmony_ci fuse: 27519ea8026Sopenharmony_ci runs-on: ubuntu-18.04 27619ea8026Sopenharmony_ci if: ${{!endsWith(github.ref, '-prefix')}} 27719ea8026Sopenharmony_ci steps: 27819ea8026Sopenharmony_ci - uses: actions/checkout@v2 27919ea8026Sopenharmony_ci - name: install 28019ea8026Sopenharmony_ci run: | 28119ea8026Sopenharmony_ci # need toml, also pip3 isn't installed by default? 28219ea8026Sopenharmony_ci sudo apt-get update -qq 28319ea8026Sopenharmony_ci sudo apt-get install -qq python3 python3-pip libfuse-dev 28419ea8026Sopenharmony_ci sudo pip3 install toml 28519ea8026Sopenharmony_ci fusermount -V 28619ea8026Sopenharmony_ci gcc --version 28719ea8026Sopenharmony_ci - uses: actions/checkout@v2 28819ea8026Sopenharmony_ci with: 28919ea8026Sopenharmony_ci repository: littlefs-project/littlefs-fuse 29019ea8026Sopenharmony_ci ref: v2 29119ea8026Sopenharmony_ci path: littlefs-fuse 29219ea8026Sopenharmony_ci - name: setup 29319ea8026Sopenharmony_ci run: | 29419ea8026Sopenharmony_ci # copy our new version into littlefs-fuse 29519ea8026Sopenharmony_ci rm -rf littlefs-fuse/littlefs/* 29619ea8026Sopenharmony_ci cp -r $(git ls-tree --name-only HEAD) littlefs-fuse/littlefs 29719ea8026Sopenharmony_ci 29819ea8026Sopenharmony_ci # setup disk for littlefs-fuse 29919ea8026Sopenharmony_ci mkdir mount 30019ea8026Sopenharmony_ci sudo chmod a+rw /dev/loop0 30119ea8026Sopenharmony_ci dd if=/dev/zero bs=512 count=128K of=disk 30219ea8026Sopenharmony_ci losetup /dev/loop0 disk 30319ea8026Sopenharmony_ci - name: test 30419ea8026Sopenharmony_ci run: | 30519ea8026Sopenharmony_ci # self-host test 30619ea8026Sopenharmony_ci make -C littlefs-fuse 30719ea8026Sopenharmony_ci 30819ea8026Sopenharmony_ci littlefs-fuse/lfs --format /dev/loop0 30919ea8026Sopenharmony_ci littlefs-fuse/lfs /dev/loop0 mount 31019ea8026Sopenharmony_ci 31119ea8026Sopenharmony_ci ls mount 31219ea8026Sopenharmony_ci mkdir mount/littlefs 31319ea8026Sopenharmony_ci cp -r $(git ls-tree --name-only HEAD) mount/littlefs 31419ea8026Sopenharmony_ci cd mount/littlefs 31519ea8026Sopenharmony_ci stat . 31619ea8026Sopenharmony_ci ls -flh 31719ea8026Sopenharmony_ci make -B test 31819ea8026Sopenharmony_ci 31919ea8026Sopenharmony_ci # test migration using littlefs-fuse 32019ea8026Sopenharmony_ci migrate: 32119ea8026Sopenharmony_ci runs-on: ubuntu-18.04 32219ea8026Sopenharmony_ci if: ${{!endsWith(github.ref, '-prefix')}} 32319ea8026Sopenharmony_ci steps: 32419ea8026Sopenharmony_ci - uses: actions/checkout@v2 32519ea8026Sopenharmony_ci - name: install 32619ea8026Sopenharmony_ci run: | 32719ea8026Sopenharmony_ci # need toml, also pip3 isn't installed by default? 32819ea8026Sopenharmony_ci sudo apt-get update -qq 32919ea8026Sopenharmony_ci sudo apt-get install -qq python3 python3-pip libfuse-dev 33019ea8026Sopenharmony_ci sudo pip3 install toml 33119ea8026Sopenharmony_ci fusermount -V 33219ea8026Sopenharmony_ci gcc --version 33319ea8026Sopenharmony_ci - uses: actions/checkout@v2 33419ea8026Sopenharmony_ci with: 33519ea8026Sopenharmony_ci repository: littlefs-project/littlefs-fuse 33619ea8026Sopenharmony_ci ref: v2 33719ea8026Sopenharmony_ci path: v2 33819ea8026Sopenharmony_ci - uses: actions/checkout@v2 33919ea8026Sopenharmony_ci with: 34019ea8026Sopenharmony_ci repository: littlefs-project/littlefs-fuse 34119ea8026Sopenharmony_ci ref: v1 34219ea8026Sopenharmony_ci path: v1 34319ea8026Sopenharmony_ci - name: setup 34419ea8026Sopenharmony_ci run: | 34519ea8026Sopenharmony_ci # copy our new version into littlefs-fuse 34619ea8026Sopenharmony_ci rm -rf v2/littlefs/* 34719ea8026Sopenharmony_ci cp -r $(git ls-tree --name-only HEAD) v2/littlefs 34819ea8026Sopenharmony_ci 34919ea8026Sopenharmony_ci # setup disk for littlefs-fuse 35019ea8026Sopenharmony_ci mkdir mount 35119ea8026Sopenharmony_ci sudo chmod a+rw /dev/loop0 35219ea8026Sopenharmony_ci dd if=/dev/zero bs=512 count=128K of=disk 35319ea8026Sopenharmony_ci losetup /dev/loop0 disk 35419ea8026Sopenharmony_ci - name: test 35519ea8026Sopenharmony_ci run: | 35619ea8026Sopenharmony_ci # compile v1 and v2 35719ea8026Sopenharmony_ci make -C v1 35819ea8026Sopenharmony_ci make -C v2 35919ea8026Sopenharmony_ci 36019ea8026Sopenharmony_ci # run self-host test with v1 36119ea8026Sopenharmony_ci v1/lfs --format /dev/loop0 36219ea8026Sopenharmony_ci v1/lfs /dev/loop0 mount 36319ea8026Sopenharmony_ci 36419ea8026Sopenharmony_ci ls mount 36519ea8026Sopenharmony_ci mkdir mount/littlefs 36619ea8026Sopenharmony_ci cp -r $(git ls-tree --name-only HEAD) mount/littlefs 36719ea8026Sopenharmony_ci cd mount/littlefs 36819ea8026Sopenharmony_ci stat . 36919ea8026Sopenharmony_ci ls -flh 37019ea8026Sopenharmony_ci make -B test 37119ea8026Sopenharmony_ci 37219ea8026Sopenharmony_ci # attempt to migrate 37319ea8026Sopenharmony_ci cd ../.. 37419ea8026Sopenharmony_ci fusermount -u mount 37519ea8026Sopenharmony_ci 37619ea8026Sopenharmony_ci v2/lfs --migrate /dev/loop0 37719ea8026Sopenharmony_ci v2/lfs /dev/loop0 mount 37819ea8026Sopenharmony_ci 37919ea8026Sopenharmony_ci # run self-host test with v2 right where we left off 38019ea8026Sopenharmony_ci ls mount 38119ea8026Sopenharmony_ci cd mount/littlefs 38219ea8026Sopenharmony_ci stat . 38319ea8026Sopenharmony_ci ls -flh 38419ea8026Sopenharmony_ci make -B test 38519ea8026Sopenharmony_ci 38619ea8026Sopenharmony_ci # collect coverage info 38719ea8026Sopenharmony_ci coverage: 38819ea8026Sopenharmony_ci runs-on: ubuntu-18.04 38919ea8026Sopenharmony_ci needs: [test] 39019ea8026Sopenharmony_ci steps: 39119ea8026Sopenharmony_ci - uses: actions/checkout@v2 39219ea8026Sopenharmony_ci - name: install 39319ea8026Sopenharmony_ci run: | 39419ea8026Sopenharmony_ci sudo apt-get update -qq 39519ea8026Sopenharmony_ci sudo apt-get install -qq python3 python3-pip lcov 39619ea8026Sopenharmony_ci sudo pip3 install toml 39719ea8026Sopenharmony_ci # yes we continue-on-error nearly every step, continue-on-error 39819ea8026Sopenharmony_ci # at job level apparently still marks a job as failed, which isn't 39919ea8026Sopenharmony_ci # what we want 40019ea8026Sopenharmony_ci - uses: actions/download-artifact@v2 40119ea8026Sopenharmony_ci continue-on-error: true 40219ea8026Sopenharmony_ci with: 40319ea8026Sopenharmony_ci name: coverage 40419ea8026Sopenharmony_ci path: coverage 40519ea8026Sopenharmony_ci - name: results-coverage 40619ea8026Sopenharmony_ci continue-on-error: true 40719ea8026Sopenharmony_ci run: | 40819ea8026Sopenharmony_ci mkdir -p results 40919ea8026Sopenharmony_ci lcov $(for f in coverage/*.info ; do echo "-a $f" ; done) \ 41019ea8026Sopenharmony_ci -o results/coverage.info 41119ea8026Sopenharmony_ci ./scripts/coverage.py results/coverage.info -o results/coverage.csv 41219ea8026Sopenharmony_ci - name: upload-results 41319ea8026Sopenharmony_ci uses: actions/upload-artifact@v2 41419ea8026Sopenharmony_ci with: 41519ea8026Sopenharmony_ci name: results 41619ea8026Sopenharmony_ci path: results 41719ea8026Sopenharmony_ci - name: collect-status 41819ea8026Sopenharmony_ci run: | 41919ea8026Sopenharmony_ci mkdir -p status 42019ea8026Sopenharmony_ci [ -e results/coverage.csv ] || exit 0 42119ea8026Sopenharmony_ci export STEP="results-coverage" 42219ea8026Sopenharmony_ci export CONTEXT="results / coverage" 42319ea8026Sopenharmony_ci export PREV="$(curl -sS \ 42419ea8026Sopenharmony_ci "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/status/master" \ 42519ea8026Sopenharmony_ci | jq -re 'select(.sha != env.GITHUB_SHA) | .statuses[] 42619ea8026Sopenharmony_ci | select(.context == env.CONTEXT).description 42719ea8026Sopenharmony_ci | capture("Coverage is (?<result>[0-9\\.]+)").result' \ 42819ea8026Sopenharmony_ci || echo 0)" 42919ea8026Sopenharmony_ci export DESCRIPTION="$( 43019ea8026Sopenharmony_ci ./scripts/coverage.py -u results/coverage.csv -s | awk -F '[ /%]+' ' 43119ea8026Sopenharmony_ci NR==2 {printf "Coverage is %.1f%% of %d lines",$4,$3} 43219ea8026Sopenharmony_ci NR==2 && ENVIRON["PREV"]+0 != 0 { 43319ea8026Sopenharmony_ci printf " (%+.1f%%)",$4-ENVIRON["PREV"]}')" 43419ea8026Sopenharmony_ci jq -n '{ 43519ea8026Sopenharmony_ci state: "success", 43619ea8026Sopenharmony_ci context: env.CONTEXT, 43719ea8026Sopenharmony_ci description: env.DESCRIPTION, 43819ea8026Sopenharmony_ci target_job: "${{github.job}}", 43919ea8026Sopenharmony_ci target_step: env.STEP}' \ 44019ea8026Sopenharmony_ci | tee status/coverage.json 44119ea8026Sopenharmony_ci - name: upload-status 44219ea8026Sopenharmony_ci uses: actions/upload-artifact@v2 44319ea8026Sopenharmony_ci with: 44419ea8026Sopenharmony_ci name: status 44519ea8026Sopenharmony_ci path: status 44619ea8026Sopenharmony_ci retention-days: 1 447