name: 'Nix Flake Outputs Size Report' author: Jalil David Salamé Messina description: | Use `nix path-info` to query the size of flake outputs and produce a markdown report. You can post this report as a comment to the PR associated with the current branch and/or export the report as a JSON artifact. Requires `nix`, `jq`, `curl`, `sed`, `gunzip`, `tar` and `coreutils` to be in the runner's path. Usage: ```yaml - name: Generate size report uses: https://git.salame.cl/jalil/nix-flake-outputs-size@main with: # Default values comment-on-pr: 'true' generate-artifact: 'false' artifact-name: 'size-report.md' # If you want to enable comparisons set this to true do-comparison: 'false' job-name: '' # required if do-comparison is true # This is the branch that will be compared against base-branch: ${{ github.base_ref }} # or default branch if missing ``` inputs: comment-on-pr: description: | Comment the report on the PR associated with the current branch. This is a no-op in case no PR is associated with the current branch. default: 'true' # Generate workflow artifact generate-artifact: description: Export the generated markdown document as a workflow artifact. default: 'false' artifact-name: description: The name of the generated artifact. default: report.json # Comparison Report (comment only) do-comparison: description: | When commenting on the PR compare the results with those in the base branch. This is a no-op when `comment-on-pr: false`. It requires `job-name` to be set. default: 'false' job-name: description: | The name of the job running this action. If not set, no comparisons can be made. default: '' base-branch: description: | The name of the base branch, defaults to `github.base_ref` if present (when triggered by a `pull_request`). Otherwise defaults to the repo's default branch. Set in case you want to override this behaviour. It will try to download the generated artifact from this branch so make sure `generate-artifacte: true` when the workflow is running on that branch. default: ${{ github.base_ref }} outputs: runs: using: 'composite' steps: - name: Create report if: inputs.comment-on-pr == 'true' || inputs.generate-artifact == 'true' env: COMMENT: ${{ inputs.comment-on-pr }} ARTIFACT_NAME: ${{ inputs.artifact-name }} DO_COMPARISON: ${{ inputs.do-comparison }} BASE_BRANCH: ${{ inputs.base-branch }} JOB_NAME: ${{ inputs.job-name }} run: | . "$GITHUB_ACTION_PATH/utils.sh" # Input validation if [ "$DO_COMPARISON" = 'true' ] && [ -z "$JOB_NAME" ]; then error 'job-name should be set if you want to generate a comparison report' exit 1 fi # Create Size Report "$GITHUB_ACTION_PATH/create-report.sh" > report.json # Nothing else to do if [ "$COMMENT" != 'true' ]; then exit 0; fi # Try to do a comparison report if [ "$DO_COMPARISON" = 'true' ]; then if "$GITHUB_ACTION_PATH/retrieve-old-report.sh" && [ -f old-report.json ]; then log "Reporting on sizes and comparing to sizes in $HEAD_BRANCH" "$GITHUB_ACTION_PATH/comment_on_pr.sh" report.json old-report.json exit 0 else error 'Failed to do comparison, fallback to posting the report without them' fi fi # Just report values log 'Reporting on sizes' "$GITHUB_ACTION_PATH/comment_on_pr.sh" report.json - name: Upload Artifact uses: https://code.forgejo.org/forgejo/upload-artifact@v4 if: inputs.generate-artifact == 'true' with: path: report.json name: ${{ inputs.artifact-name }}