name: build on: push: branches: [main] pull_request: branches: [main] jobs: build: runs-on: ubuntu-latest permissions: contents: write env: NIX_PATH: nixpkgs=channel:nixpkgs-unstable steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4.0.0 with: node-version: 18.x - name: Enable corepack run: corepack enable - name: Yarn cache uses: actions/cache@v3 with: path: .yarn/cache key: yarn-${{ hashFiles('yarn.lock') }} restore-keys: yarn- - name: Yarn install run: yarn install --immutable - name: TypeScript run: yarn check - name: Build run: yarn build - name: Update dist if: github.repository_owner == 'stephank' && github.ref == 'refs/heads/main' run: | if [[ "$(git status --porcelain)" != "" ]]; then git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git config user.name "github-actions[bot]" git commit -m 'Update dist' dist/yarn-plugin-nixify.js git push fi - name: Install plugin run: yarn plugin import ./dist/yarn-plugin-nixify.js - name: Test without Nix run: yarn - name: Install Nix uses: cachix/install-nix-action@v23 with: nix_path: nixpkgs=channel:nixos-unstable - name: Setup Cachix if: github.event_name == 'push' && github.repository_owner == 'stephank' uses: cachix/cachix-action@v12 with: name: stephank signingKey: "${{ secrets.CACHIX_SIGNING_KEY }}" - name: Add bin run: | cat > hello.js << EOF #!/usr/bin/env node require('webpack') console.log('Hello nixify!') EOF chmod a+x hello.js jq '.bin = { hello: "./hello.js" }' package.json > new mv new package.json - name: Test with Nix run: yarn --no-immutable - name: Test nix-build run: | # This delete tests refetching a package with Nix. nix-store --delete /nix/store/*--yarnpkg-core-npm-* nix-build - name: Test bin run: ./result/bin/hello # TODO: Check there really is a separate derivation, # and that Yarn actually reuses the build. - name: Test isolated builds run: | # Matches example in ISOLATED_BUILDS.md echo 'isolatedNixBuilds: ["sqlite3"]' >> .yarnrc.yml cat > default.nix << EOF { pkgs ? import { } }: pkgs.callPackage ./yarn-project.nix { } { src = ./.; overrideSqlite3Attrs = old: { npm_config_sqlite = "/"; # Don't accidentally use the wrong sqlite. buildInputs = old.buildInputs ++ (with pkgs; [ python3 sqlite ]); }; } EOF yarn add sqlite3 nix-build