name: CI on: push: branches: - master pull_request: types: - opened - synchronize jobs: ci: strategy: fail-fast: false matrix: ghc: [ghc965, ghc982, ghc9101] name: Build and test on ${{ matrix.ghc }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@V27 with: extra_nix_config: | accept-flake-config = true - uses: cachix/cachix-action@v15 with: name: tweag-ormolu authToken: '${{ secrets.CACHIX_TWEAG_ORMOLU_AUTH_TOKEN }}' - name: Build and run tests run: | nix build -L --keep-going .#${{ matrix.ghc }}.ci lint: needs: ci name: Formatting and linting runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@V27 with: extra_nix_config: | accept-flake-config = true - name: Format via Ormolu run: | nix run .#format git diff --exit-code --color=always - name: pre-commit-check run: | nix build -L .#pre-commit-check live-wasm: needs: lint name: Build Ormolu WASM runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@V27 with: extra_nix_config: | accept-flake-config = true - uses: actions/cache@v4 with: path: | ~/.ghc-wasm/.cabal/store ormolu-live/dist-newstyle key: wasm-${{ github.run_id }} restore-keys: | wasm-${{ github.run_id }} wasm- - name: Build Ormolu WASM run: | cd ormolu-live nix develop .#ghcWasm -c sh -c \ 'wasm32-wasi-cabal update && ./build-wasm.sh -Oz' - uses: actions/upload-artifact@v4 with: name: wasm path: ormolu-live/src/ormolu.wasm live-frontend: needs: lint name: Build Ormolu Live frontend runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@V27 with: extra_nix_config: | accept-flake-config = true - uses: cachix/cachix-action@v15 with: name: tweag-ormolu authToken: '${{ secrets.CACHIX_TWEAG_ORMOLU_AUTH_TOKEN }}' - name: Build frontend run: | nix build -L .#ormoluLive cp -r --no-preserve=mode,ownership result/ site - uses: actions/upload-artifact@v4 with: name: frontend path: site/ live-deploy: needs: [live-wasm, live-frontend] name: Deploy Ormolu Live runs-on: ubuntu-latest env: NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} steps: - uses: actions/download-artifact@v4 - name: Combine run: | cp wasm/ormolu.wasm frontend/ormolu.*.wasm - name: Deploy to Netlify, preview if: env.NETLIFY_AUTH_TOKEN != '' uses: nwtgck/actions-netlify@v3 with: publish-dir: ./frontend github-token: ${{ secrets.GITHUB_TOKEN }} alias: ${{ github.event.pull_request.head.sha || github.sha }} enable-pull-request-comment: true enable-commit-comment: false enable-commit-status: true - name: Deploy to Netlify, production if: env.NETLIFY_AUTH_TOKEN != '' && github.ref == 'refs/heads/master' run: | netlify deploy --prod -d ./frontend # prevent stack.yaml from becoming outdated stack: name: Build and test via Stack runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: haskell-actions/setup@v2 with: enable-stack: true stack-no-global: true - uses: actions/cache@v4 with: path: ~/.stack key: stack-${{ hashFiles('stack.yaml', 'ormolu.cabal') }} - name: Build run: stack build - name: Test run: stack test