Compare commits

..
1 Commits
Author SHA1 Message Date
Brian DeHamer 504abd5cd2 use ms attest
Signed-off-by: Brian DeHamer <[email protected]>
2024-11-19 09:46:33 -08:00
6 changed files with 201 additions and 608 deletions
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
date > artifact date > artifact
- name: Attest build provenance - name: Attest build provenance
uses: actions/attest-build-provenance@v2 uses: actions/attest-build-provenance@v1
env: env:
INPUT_PRIVATE-SIGNING: ${{ inputs.sigstore == 'github' && 'true' || 'false' }} INPUT_PRIVATE-SIGNING: ${{ inputs.sigstore == 'github' && 'true' || 'false' }}
with: with:
+21 -17
View File
@@ -45,7 +45,7 @@ attest:
1. Add the following to your workflow after your artifact has been built: 1. Add the following to your workflow after your artifact has been built:
```yaml ```yaml
- uses: actions/attest-build-provenance@v2 - uses: actions/attest-build-provenance@v1
with: with:
subject-path: '<PATH TO ARTIFACT>' subject-path: '<PATH TO ARTIFACT>'
``` ```
@@ -58,11 +58,11 @@ attest:
See [action.yml](action.yml) See [action.yml](action.yml)
```yaml ```yaml
- uses: actions/attest-build-provenance@v2 - uses: actions/attest-build-provenance@v1
with: with:
# Path to the artifact serving as the subject of the attestation. Must # Path to the artifact serving as the subject of the attestation. Must
# specify exactly one of "subject-path" or "subject-digest". May contain a # specify exactly one of "subject-path" or "subject-digest". May contain a
# glob pattern or list of paths (total subject count cannot exceed 1024). # glob pattern or list of paths (total subject count cannot exceed 2500).
subject-path: subject-path:
# SHA256 digest of the subject for the attestation. Must be in the form # SHA256 digest of the subject for the attestation. Must be in the form
@@ -93,22 +93,26 @@ See [action.yml](action.yml)
<!-- markdownlint-disable MD013 --> <!-- markdownlint-disable MD013 -->
| Name | Description | Example | | Name | Description | Example |
| ------------- | -------------------------------------------------------------- | ----------------------- | | ------------- | -------------------------------------------------------------- | ------------------------ |
| `bundle-path` | Absolute path to the file containing the generated attestation | `/tmp/attestation.json` | | `bundle-path` | Absolute path to the file containing the generated attestation | `/tmp/attestation.jsonl` |
<!-- markdownlint-enable MD013 --> <!-- markdownlint-enable MD013 -->
Attestations are saved in the JSON-serialized [Sigstore bundle][6] format. Attestations are saved in the JSON-serialized [Sigstore bundle][6] format.
If multiple subjects are being attested at the same time, a single attestation If multiple subjects are being attested at the same time, each attestation will
will be created with references to each of the supplied subjects. be written to the output file on a separate line (using the [JSON Lines][7]
format).
## Attestation Limits ## Attestation Limits
### Subject Limits ### Subject Limits
No more than 1024 subjects can be attested at the same time. No more than 2500 subjects can be attested at the same time. Subjects will be
processed in batches 50. After the initial group of 50, each subsequent batch
will incur an exponentially increasing amount of delay (capped at 1 minute of
delay per batch) to avoid overwhelming the attestation API.
## Examples ## Examples
@@ -126,7 +130,6 @@ on:
jobs: jobs:
build: build:
runs-on: ubuntu-latest
permissions: permissions:
id-token: write id-token: write
contents: read contents: read
@@ -138,18 +141,18 @@ jobs:
- name: Build artifact - name: Build artifact
run: make my-app run: make my-app
- name: Attest - name: Attest
uses: actions/attest-build-provenance@v2 uses: actions/attest-build-provenance@v1
with: with:
subject-path: '${{ github.workspace }}/my-app' subject-path: '${{ github.workspace }}/my-app'
``` ```
### Identify Multiple Subjects ### Identify Multiple Subjects
If you are generating multiple artifacts, you can attest all of them at the same If you are generating multiple artifacts, you can generate a provenance
time by using a wildcard in the `subject-path` input. attestation for each by using a wildcard in the `subject-path` input.
```yaml ```yaml
- uses: actions/attest-build-provenance@v2 - uses: actions/attest-build-provenance@v1
with: with:
subject-path: 'dist/**/my-bin-*' subject-path: 'dist/**/my-bin-*'
``` ```
@@ -161,13 +164,13 @@ Alternatively, you can explicitly list multiple subjects with either a comma or
newline delimited list: newline delimited list:
```yaml ```yaml
- uses: actions/attest-build-provenance@v2 - uses: actions/attest-build-provenance@v1
with: with:
subject-path: 'dist/foo, dist/bar' subject-path: 'dist/foo, dist/bar'
``` ```
```yaml ```yaml
- uses: actions/attest-build-provenance@v2 - uses: actions/attest-build-provenance@v1
with: with:
subject-path: | subject-path: |
dist/foo dist/foo
@@ -227,7 +230,7 @@ jobs:
push: true push: true
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
- name: Attest - name: Attest
uses: actions/attest-build-provenance@v2 uses: actions/attest-build-provenance@v1
id: attest id: attest
with: with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
@@ -242,6 +245,7 @@ jobs:
[5]: https://cli.github.com/manual/gh_attestation_verify [5]: https://cli.github.com/manual/gh_attestation_verify
[6]: [6]:
https://github.com/sigstore/protobuf-specs/blob/main/protos/sigstore_bundle.proto https://github.com/sigstore/protobuf-specs/blob/main/protos/sigstore_bundle.proto
[7]: https://jsonlines.org/
[8]: https://github.com/actions/toolkit/tree/main/packages/glob#patterns [8]: https://github.com/actions/toolkit/tree/main/packages/glob#patterns
[9]: [9]:
https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds
+3 -3
View File
@@ -10,7 +10,7 @@ inputs:
description: > description: >
Path to the artifact serving as the subject of the attestation. Must Path to the artifact serving as the subject of the attestation. Must
specify exactly one of "subject-path" or "subject-digest". May contain a specify exactly one of "subject-path" or "subject-digest". May contain a
glob pattern or list of paths (total subject count cannot exceed 1024). glob pattern or list of paths (total subject count cannot exceed 2500).
required: false required: false
subject-digest: subject-digest:
description: > description: >
@@ -44,7 +44,7 @@ inputs:
outputs: outputs:
bundle-path: bundle-path:
description: 'The path to the file containing the attestation bundle.' description: 'The path to the file containing the attestation bundle(s).'
value: ${{ steps.attest.outputs.bundle-path }} value: ${{ steps.attest.outputs.bundle-path }}
runs: runs:
@@ -52,7 +52,7 @@ runs:
steps: steps:
- uses: actions/attest-build-provenance/predicate@36fa7d009e22618ca7cd599486979b8150596c74 # [email protected] - uses: actions/attest-build-provenance/predicate@36fa7d009e22618ca7cd599486979b8150596c74 # [email protected]
id: generate-build-provenance-predicate id: generate-build-provenance-predicate
- uses: actions/attest@v2.0.1 - uses: actions/attest@main
id: attest id: attest
with: with:
subject-path: ${{ inputs.subject-path }} subject-path: ${{ inputs.subject-path }}
Generated Vendored
+7 -17
View File
@@ -67626,23 +67626,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
}) : function(o, v) { }) : function(o, v) {
o["default"] = v; o["default"] = v;
}); });
var __importStar = (this && this.__importStar) || (function () { var __importStar = (this && this.__importStar) || function (mod) {
var ownKeys = function(o) { if (mod && mod.__esModule) return mod;
ownKeys = Object.getOwnPropertyNames || function (o) { var result = {};
var ar = []; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; __setModuleDefault(result, mod);
return ar; return result;
}; };
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.run = run; exports.run = run;
const attest_1 = __nccwpck_require__(11485); const attest_1 = __nccwpck_require__(11485);
+160 -561
View File
File diff suppressed because it is too large Load Diff
+9 -9
View File
@@ -75,22 +75,22 @@
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "^29.5.14", "@types/jest": "^29.5.14",
"@types/node": "^22.10.1", "@types/node": "^22.8.7",
"@typescript-eslint/eslint-plugin": "^7.17.0", "@typescript-eslint/eslint-plugin": "^7.17.0",
"@typescript-eslint/parser": "^7.18.0", "@typescript-eslint/parser": "^7.18.0",
"@vercel/ncc": "^0.38.3", "@vercel/ncc": "^0.38.2",
"eslint": "^8.57.1", "eslint": "^8.57.1",
"eslint-plugin-github": "^5.1.3", "eslint-plugin-github": "^5.0.2",
"eslint-plugin-jest": "^28.9.0", "eslint-plugin-jest": "^28.8.3",
"eslint-plugin-jsonc": "^2.18.2", "eslint-plugin-jsonc": "^2.16.0",
"eslint-plugin-prettier": "^5.2.1", "eslint-plugin-prettier": "^5.2.1",
"jest": "^29.7.0", "jest": "^29.7.0",
"jose": "^5.9.6", "jose": "^5.9.6",
"markdownlint-cli": "^0.43.0", "markdownlint-cli": "^0.42.0",
"nock": "^13.5.6", "nock": "^13.5.5",
"prettier": "^3.4.1", "prettier": "^3.3.3",
"prettier-eslint": "^16.3.0", "prettier-eslint": "^16.3.0",
"ts-jest": "^29.2.5", "ts-jest": "^29.2.5",
"typescript": "^5.7.2" "typescript": "^5.6.3"
} }
} }