The linux full tests no longer test GHC 8.0, and all full tests now always compile all modules and generate optimised binaries.
		
			
				
	
	
		
			269 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| # Thorough tests on linux.
 | |
| # Runs on notable pushes to ci-linux, on notable pull requests against
 | |
| # master, and weekly on master.
 | |
| # Builds all modules optimised, runs unit, benchmark, doc, functional,
 | |
| # haddock tests, with all supported GHC versions,
 | |
| # and uploads binaries artifact.
 | |
| 
 | |
| name: linux CI
 | |
| 
 | |
| on:
 | |
|   # Scheduled workflows run on the latest commit on the default or base branch. (master)
 | |
|   schedule:
 | |
|   - cron: "0 07 * * 0"  # sunday midnight pacific
 | |
| 
 | |
|   pull_request:
 | |
|     branches: [ master ]
 | |
|     paths:
 | |
|       - '.github/workflows/linux.yml'
 | |
|       - 'stack*.yaml'
 | |
|       - 'hledger-lib/**'
 | |
|       - 'hledger/**'
 | |
|       - 'hledger-ui/**'
 | |
|       - 'hledger-web/**'
 | |
|       - 'tests/**'
 | |
|       - '!**.md'
 | |
|       - '!**.1'
 | |
|       - '!**.5'
 | |
|       - '!**.info'
 | |
|       - '!**.txt'
 | |
| 
 | |
|   push:
 | |
|     branches: [ ci-linux ]
 | |
|     paths:
 | |
|       - '.github/workflows/linux.yml'
 | |
|       - 'stack*'
 | |
|       - 'hledger-lib/**'
 | |
|       - 'hledger/**'
 | |
|       - 'hledger-ui/**'
 | |
|       - 'hledger-web/**'
 | |
|       - 'tests/**'
 | |
|       - '!**.md'
 | |
|       - '!**.1'
 | |
|       - '!**.5'
 | |
|       - '!**.info'
 | |
|       - '!**.txt'
 | |
| 
 | |
| jobs:
 | |
|   build:
 | |
|     strategy:
 | |
|       fail-fast: false
 | |
|       matrix:
 | |
|         plan:
 | |
|         # GHC 8.0 is still supported but we don't have a build plan for hledger-web, let it go
 | |
|         # - { key: "80", args: "--stack-yaml=stack8.0.yaml" }
 | |
|         - { key: "82", args: "--stack-yaml=stack8.2.yaml" }
 | |
|         - { key: "84", args: "--stack-yaml=stack8.4.yaml" }
 | |
|         - { key: "86", args: "--stack-yaml=stack8.6.yaml" }
 | |
|         - { key: "88", args: "--stack-yaml=stack.yaml" }
 | |
|         - { key: "810", args: "--stack-yaml=stack8.10.yaml" }
 | |
|     runs-on: ubuntu-latest
 | |
| 
 | |
|     steps:
 | |
| 
 | |
|     - name: Check out
 | |
|       uses: actions/checkout@v2
 | |
| 
 | |
|     # things to be cached/restored:
 | |
| 
 | |
|     - name: Cache stack global package db
 | |
|       id:   stack-global
 | |
|       uses: actions/cache@v2
 | |
|       with:
 | |
|         path: ~/.stack
 | |
|         key: ${{ runner.os }}-stack-global-${{ matrix.plan.key }}-${{ hashFiles('**.yaml') }}
 | |
|         restore-keys: |
 | |
|           ${{ runner.os }}-stack-global-${{ matrix.plan.key }}
 | |
|           ${{ runner.os }}-stack-global          
 | |
| 
 | |
|     - name: Cache stack-installed programs in ~/.local/bin
 | |
|       id:   stack-programs
 | |
|       uses: actions/cache@v2
 | |
|       with:
 | |
|         path: ~/.local/bin
 | |
|         key: ${{ runner.os }}-stack-programs-${{ matrix.plan.key }}-${{ hashFiles('**.yaml') }}
 | |
|         restore-keys: |
 | |
|           ${{ runner.os }}-stack-programs-${{ matrix.plan.key }}
 | |
|           ${{ runner.os }}-stack-programs          
 | |
| 
 | |
|     - name: Cache .stack-work
 | |
|       uses: actions/cache@v2
 | |
|       with:
 | |
|         path: .stack-work
 | |
|         key: ${{ runner.os }}-stack-work-${{ matrix.plan.key }}-${{ hashFiles('**.yaml') }}
 | |
|         restore-keys: |
 | |
|           ${{ runner.os }}-stack-work-${{ matrix.plan.key }}
 | |
|           ${{ runner.os }}-stack-work          
 | |
| 
 | |
|     - name: Cache hledger-lib/.stack-work
 | |
|       uses: actions/cache@v2
 | |
|       with:
 | |
|         path: hledger-lib/.stack-work
 | |
|         key: ${{ runner.os }}-hledger-lib-stack-work-${{ matrix.plan.key }}-${{ hashFiles('hledger-lib/package.yaml') }}
 | |
|         restore-keys: |
 | |
|           ${{ runner.os }}-hledger-lib-stack-work-${{ matrix.plan.key }}
 | |
|           ${{ runner.os }}-hledger-lib-stack-work          
 | |
| 
 | |
|     - name: Cache hledger/.stack-work
 | |
|       uses: actions/cache@v2
 | |
|       with:
 | |
|         path: hledger/.stack-work
 | |
|         key: ${{ runner.os }}-hledger-stack-work-${{ matrix.plan.key }}-${{ hashFiles('hledger/package.yaml') }}
 | |
|         restore-keys: |
 | |
|           ${{ runner.os }}-hledger-stack-work-${{ matrix.plan.key }}
 | |
|           ${{ runner.os }}-hledger-stack-work          
 | |
| 
 | |
|     - name: Cache hledger-ui/.stack-work
 | |
|       uses: actions/cache@v2
 | |
|       with:
 | |
|         path: hledger-ui/.stack-work
 | |
|         key: ${{ runner.os }}-hledger-ui-stack-work-${{ matrix.plan.key }}-${{ hashFiles('hledger-ui/package.yaml') }}
 | |
|         restore-keys: |
 | |
|           ${{ runner.os }}-hledger-ui-stack-work-${{ matrix.plan.key }}
 | |
|           ${{ runner.os }}-hledger-ui-stack-work          
 | |
| 
 | |
|     - name: Cache hledger-web/.stack-work
 | |
|       uses: actions/cache@v2
 | |
|       with:
 | |
|         path: hledger-web/.stack-work
 | |
|         key: ${{ runner.os }}-hledger-web-stack-work-${{ matrix.plan.key }}-${{ hashFiles('hledger-web/package.yaml') }}
 | |
|         restore-keys: |
 | |
|           ${{ runner.os }}-hledger-web-stack-work-${{ matrix.plan.key }}
 | |
|           ${{ runner.os }}-hledger-web-stack-work          
 | |
| 
 | |
|     # For now due to
 | |
|     # https://github.com/actions/virtual-environments/issues/709
 | |
|     # there's only 4.8G free at this point, and we must free up space.
 | |
|     - name: Free disk space
 | |
|       run: |
 | |
|         df -h /
 | |
|         # 8G:
 | |
|         sudo swapoff -a
 | |
|         sudo rm -f /swapfile
 | |
|         # 3G:
 | |
|         sudo apt clean
 | |
|         # 3G, takes 30s:
 | |
|         # docker image ls -aq
 | |
|         # docker rmi $(docker image ls -aq)
 | |
|         # 1G:
 | |
|         find ~/work/_temp -name "cache.tgz" -exec rm -f {} \;
 | |
|         # 4G, takes 14s:
 | |
|         # sudo rm -rf "/usr/local/share/boost"
 | |
|         # 2G:
 | |
|         sudo rm -rf "$AGENT_TOOLSDIRECTORY"
 | |
|         df -h /        
 | |
| 
 | |
|     # actions:
 | |
| 
 | |
|     - name: Install stack
 | |
|       # curl -L https://get.haskellstack.org/stable/linux-x86_64.tar.gz | tar xz --wildcards --strip-components=1 -C $INSTALLDIR '*/stack'
 | |
|       # mkdir -p ~/.local/bin
 | |
|       # export PATH=~/.local/bin:$PATH
 | |
|       # if [[ ! -x ~/.local/bin/stack ]]; then curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'; chmod a+x ~/.local/bin/stack; fi
 | |
|       run: |
 | |
|         stack --version        
 | |
| 
 | |
|     - name: Install GHC
 | |
|       run: |
 | |
|         df -h
 | |
|         stack $ARGS setup --install-ghc
 | |
|         df -h        
 | |
| 
 | |
|       env:
 | |
|         ARGS: ${{ matrix.plan.args }}
 | |
| 
 | |
|     - name: Install haskell deps
 | |
|       run: |
 | |
|         stack $ARGS build --test --bench --only-dependencies
 | |
|         #  --no-terminal        
 | |
|       env:
 | |
|         ARGS: ${{ matrix.plan.args }}
 | |
| 
 | |
|     - name: Build all hledger modules optimised and warning free, run unit/doc/bench tests
 | |
|       run: |
 | |
|         stack $ARGS install --test --bench --force-dirty --ghc-options=-fforce-recomp --ghc-options=-Werror --no-terminal
 | |
|         # --pedantic --no-run-benchmarks        
 | |
|       env:
 | |
|         ARGS: ${{ matrix.plan.args }}
 | |
| 
 | |
|     - name: Install shelltestrunner
 | |
|       run: |
 | |
|         export PATH=~/.local/bin:$PATH
 | |
|         if [[ ! -x ~/.local/bin/shelltest ]]; then stack $ARGS install shelltestrunner-1.9; fi
 | |
|         shelltest --version        
 | |
|       env:
 | |
|         ARGS: ${{ matrix.plan.args }}
 | |
| 
 | |
|     - name: Test functional tests (excluding addons)
 | |
|       run: |
 | |
|         export PATH=~/.local/bin:$PATH
 | |
|         COLUMNS=80 stack $ARGS exec -- shelltest --execdir -j16 tests -x /bin -x /addons        
 | |
|       env:
 | |
|         ARGS: ${{ matrix.plan.args }}
 | |
| 
 | |
|     - name: Test haddock generation
 | |
|       run: |
 | |
|         time stack $ARGS build --haddock --no-haddock-deps --no-haddock-hyperlink-source --haddock-arguments="--no-print-missing-docs"        
 | |
|       # --no-haddock-hyperlink-source is 25% faster
 | |
|       # --no-print-missing-docs is 600% quieter
 | |
|       env:
 | |
|         ARGS: ${{ matrix.plan.args }}
 | |
| 
 | |
|     # artifacts:
 | |
| 
 | |
|     - name: Gather executables
 | |
|       run: |
 | |
|         mkdir tmp
 | |
|         cd tmp
 | |
|         mkdir hledger
 | |
|         cd hledger
 | |
|         cp ~/.local/bin/hledger .
 | |
|         cp ~/.local/bin/hledger-ui .
 | |
|         cp ~/.local/bin/hledger-web .        
 | |
| 
 | |
|     - name: Upload executables artifact
 | |
|       uses: actions/upload-artifact@v2
 | |
|       with:
 | |
|         name: hledger-ubuntu
 | |
|         path: tmp/hledger
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|     # - name: show stuff
 | |
|     #   run: |
 | |
|     #     if [[ -e ~/.local/bin ]]; then ls -lFRa ~/.local/bin; fi
 | |
| 
 | |
| 
 | |
| 
 | |
| # docs:
 | |
| 
 | |
| # based on https://gist.github.com/mstksg/11f753d891cee5980326a8ea8c865233
 | |
| # http://www.btellez.com/posts/triggering-github-actions-with-webhooks.html
 | |
| # https://help.github.com/en/actions
 | |
| # https://help.github.com/en/actions/reference/events-that-trigger-workflows
 | |
| # https://help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule
 | |
| # https://help.github.com/en/actions/configuring-and-managing-workflows/caching-and-storing-workflow-data
 | |
| # https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows
 | |
| # https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners#supported-runners-and-hardware-resources
 | |
| # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet
 | |
| # https://github.community/t5/GitHub-Actions/bd-p/actions
 | |
| 
 | |
| # https://github.com/actions/cache
 | |
| # https://github.com/marketplace/actions/cache
 | |
| 
 | |
| # https://github.com/actions/upload-artifact
 | |
| # https://github.com/c-hive/gha-remove-artifacts
 | |
| 
 | |
| # https://github.com/actions/setup-haskell
 | |
| 
 | |
| # https://github.com/marketplace/actions/checkout
 | |
| # https://github.com/sdras/awesome-actions
 | |
| 
 | |
| # https://sevenzip.osdn.jp/chm/cmdline/commands/index.htm
 | |
| 
 | |
| # https://github.com/mxschmitt/action-tmate
 | |
| #     - name: Setup tmate session
 | |
| #      uses: mxschmitt/action-tmate@v1
 |