Jalil David Salamé Messina
89fd1ffa71
Only the downloading logic was added, the comparison logic was added in the previous commit.
93 lines
3.3 KiB
YAML
93 lines
3.3 KiB
YAML
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 markdown artifact.
|
|
|
|
Requires `nix`, `jq`, `curl`, `sed` and `coreutils` to be in 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'
|
|
base-branch: ${{ github.base_ref }} # set to e.g. main if not triggered by a pull_request
|
|
job-name: '' # set to the name of this job if you want to enable comparisons
|
|
```
|
|
inputs:
|
|
comment-on-pr:
|
|
description: Comment the report on the PR associated with the current branch.
|
|
default: 'true'
|
|
generate-artifact:
|
|
description: Export the generated markdown document as an artifact.
|
|
default: 'false'
|
|
artifact-name:
|
|
description: The name of the generated artifact.
|
|
default: report.json
|
|
base-branch:
|
|
description: |
|
|
The name of the base branch, defaults to github.base_ref which is only
|
|
available in pull_request triggered workflows, for other workflows
|
|
specify it manually.
|
|
|
|
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 }}
|
|
job-name:
|
|
description: |
|
|
The name of the job running this action. If not set, no comparisons can
|
|
be made.
|
|
default: ''
|
|
outputs:
|
|
runs:
|
|
using: 'composite'
|
|
steps:
|
|
- name: Create report
|
|
run: |
|
|
"$GITHUB_ACTION_PATH/create-report.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 }}
|
|
- name: Comment Report
|
|
if: inputs.comment-on-pr == 'true'
|
|
env:
|
|
ARTIFACT_NAME: ${{ inputs.artifact-name }}
|
|
HEAD_BRANCH: ${{ inputs.base-branch }}
|
|
JOB_NAME: ${{ inputs.job-name }}
|
|
run: |
|
|
# USAGE: base_report_url
|
|
base_report_url() {
|
|
curl -X 'GET' \
|
|
"$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/actions/tasks" \
|
|
-H "Authorization: token $GITHUB_TOKEN" \
|
|
-H 'accept: application/json' |
|
|
jq --raw-output '[.workflow_runs[] | select(.name == '"$JOB_NAME"' and .head_branch == '"$HEAD_BRANCH"')] | first | .url'
|
|
}
|
|
# USAGE: has_report <RUN_URL>
|
|
has_report() {
|
|
http_code=$(curl -X 'GET' -o /dev/null --silent -Iw '%{http_code}' "$1/artifacts/$ARTIFACT_NAME")
|
|
test "$http_code" = '200'
|
|
}
|
|
|
|
# If we have a previous report compare against it
|
|
if [ "$JOB_NAME" ] && [ "$HEAD_BRANCH" ]; then
|
|
url=$(base_report_url)
|
|
if has_report "$url"; then
|
|
curl -X 'GET' -o old-report.json "$url/artifacts/$ARTIFACT_NAME"
|
|
"$GITHUB_ACTION_PATH/comment_on_pr.sh" report.json old-report.json
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
"$GITHUB_ACTION_PATH/comment_on_pr.sh" report.json
|