Test #36
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test | |
| on: | |
| pull_request: | |
| schedule: | |
| - cron: "30 2 * * *" | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| changes: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| docs: ${{ steps.changes.outputs.docs }} | |
| format: ${{ steps.changes.outputs.format }} | |
| hm: ${{ steps.changes.outputs.hm }} | |
| tests: ${{ steps.changes.outputs.tests }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dorny/paths-filter@v3 | |
| id: changes | |
| with: | |
| filters: | | |
| tests: | |
| - 'flake.lock' | |
| - 'flake.nix' | |
| - 'modules/**' | |
| - 'nix-darwin/**' | |
| - 'nixos/**' | |
| - 'tests/**' | |
| docs: | |
| - '**.md' | |
| - 'docs/**' | |
| - 'flake.lock' | |
| - 'flake.nix' | |
| - 'modules/**' | |
| format: | |
| - '**/*.nix' | |
| hm: | |
| - 'flake.lock' | |
| - 'flake.nix' | |
| - 'home-manager/**' | |
| tests: | |
| needs: changes | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest] | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Get Nixpkgs revision from flake.lock | |
| id: get-nixpkgs | |
| run: | | |
| echo "rev=$(jq -r '.nodes.nixpkgs.locked.rev' flake.lock)" >> "$GITHUB_OUTPUT" | |
| - uses: cachix/install-nix-action@v31 | |
| if: github.event_name == 'schedule' || needs.changes.outputs.docs == 'true' || needs.changes.outputs.tests == 'true' || needs.changes.outputs.hm == 'true' || needs.changes.outputs.format == 'true' | |
| with: | |
| nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/${{ steps.get-nixpkgs.outputs.rev }}.tar.gz | |
| extra_nix_config: | | |
| experimental-features = nix-command flakes | |
| - name: Build docs | |
| if: github.event_name == 'schedule' || needs.changes.outputs.docs == 'true' | |
| run: nix build --show-trace .#docs-jsonModuleMaintainers | |
| - name: Format Check | |
| if: github.event_name == 'schedule' || needs.changes.outputs.format == 'true' | |
| run: nix fmt -- --ci | |
| - name: Test init --switch with locked inputs | |
| # FIXME: nix broken on darwin on unstable | |
| if: matrix.os != 'macos-latest' && (github.event_name == 'schedule' || needs.changes.outputs.hm == 'true') | |
| run: | | |
| # Copy lock file to home directory for consistent testing | |
| mkdir -p ~/.config/home-manager | |
| cp flake.lock ~/.config/home-manager/ | |
| nix run .#home-manager -- init --switch --override-input home-manager . | |
| - name: Uninstall | |
| # FIXME: nix broken on darwin on unstable | |
| if: matrix.os != 'macos-latest' && (github.event_name == 'schedule' || needs.changes.outputs.hm == 'true') | |
| run: yes | nix run . -- uninstall | |
| - name: Run tests | |
| if: github.event_name == 'schedule' || needs.changes.outputs.tests == 'true' | |
| run: nix build -j auto --show-trace --option allow-import-from-derivation false --reference-lock-file flake.lock "./tests#test-all-no-big" | |
| env: | |
| GC_INITIAL_HEAP_SIZE: 4294967296 | |
| - name: Run tests (with IFD) | |
| if: github.event_name == 'schedule' || needs.changes.outputs.tests == 'true' | |
| run: nix build -j auto --show-trace --reference-lock-file flake.lock "./tests#test-all-no-big" | |
| env: | |
| GC_INITIAL_HEAP_SIZE: 4294967296 | |
| - name: Generate Job Summary | |
| if: github.event_name == 'pull_request' | |
| shell: bash | |
| run: | | |
| echo "### Test Job Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "A summary of tasks triggered by file changes in this PR:" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| if [[ "${{ needs.changes.outputs.docs }}" == "true" ]]; then | |
| echo "- ✅ **Docs Build:** Triggered" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "- ☑️ **Docs Build:** Skipped (no relevant files changed)" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| if [[ "${{ needs.changes.outputs.format }}" == "true" ]]; then | |
| echo "- ✅ **Format Check:** Triggered" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "- ☑️ **Format Check:** Skipped (no relevant files changed)" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| if [[ "${{ needs.changes.outputs.hm }}" == "true" ]]; then | |
| echo "- ✅ **Home Manager Tests:** Triggered" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "- ☑️ **Home Manager Tests:** Skipped (no relevant files changed)" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| if [[ "${{ needs.changes.outputs.tests }}" == "true" ]]; then | |
| echo "- ✅ **General Tests:** Triggered" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "- ☑️ **General Tests:** Skipped (no relevant files changed)" >> $GITHUB_STEP_SUMMARY | |
| fi |