mirror of
https://github.com/actions/attest-build-provenance.git
synced 2025-12-16 20:30:59 +00:00
Create test-attest
This commit is contained in:
parent
b7ab74091b
commit
d3afdbb508
194
test-attest
Normal file
194
test-attest
Normal file
@ -0,0 +1,194 @@
|
||||
test-attest-provenance:
|
||||
name: Test attest-provenance action
|
||||
17 changes: 17 additions & alot of additions
|
||||
__tests__/index.test.ts
|
||||
Viewed
|
||||
Original file line number Diff line number Diff line change
|
||||
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Unit tests for the action's entrypoint, src/index.ts
|
||||
*/
|
||||
import * as main from '../src/main'
|
||||
|
||||
// Mock the action's entrypoint
|
||||
const runMock = jest.spyOn(main, 'run').mockImplementation()
|
||||
|
||||
describe('index', () => {
|
||||
it('calls run when imported', async () => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
||||
require('../src/index')
|
||||
|
||||
expect(runMock).toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
103 changes: 103 additions & 0 deletions103
|
||||
__tests__/main.test.ts
|
||||
Viewed
|
||||
Original file line number Diff line number Diff line change
|
||||
@@ -0,0 +1,103 @@
|
||||
import * as core from '@actions/core'
|
||||
import * as main from '../src/main'
|
||||
|
||||
// Mock the GitHub Actions core library
|
||||
jest.mock('@actions/core')
|
||||
const setOutputMock = jest.spyOn(core, 'setOutput')
|
||||
const setFailedMock = jest.spyOn(core, 'setFailed')
|
||||
|
||||
// Ensure that setFailed doesn't set an exit code during tests
|
||||
setFailedMock.mockImplementation(() => {})
|
||||
|
||||
describe('main action', () => {
|
||||
let outputs = {} as Record<string, string>
|
||||
|
||||
beforeEach(() => {
|
||||
jest.resetAllMocks()
|
||||
setOutputMock.mockImplementation((key, value) => {
|
||||
outputs[key] = value
|
||||
})
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
outputs = {}
|
||||
})
|
||||
|
||||
it('successfully run main', async () => {
|
||||
const originalEnv = process.env
|
||||
process.env = {
|
||||
...originalEnv,
|
||||
GITHUB_REPOSITORY: 'owner/repo',
|
||||
GITHUB_REF: 'refs/heads/main',
|
||||
GITHUB_SHA: 'babca52ab0c93ae16539e5923cb0d7403b9a093b',
|
||||
GITHUB_WORKFLOW_REF: 'owner/repo/.github/workflows/main.yml@main',
|
||||
GITHUB_SERVER_URL: 'https://github.com',
|
||||
GITHUB_EVENT_NAME: 'push',
|
||||
GITHUB_REPOSITORY_ID: 'repo-id',
|
||||
GITHUB_REPOSITORY_OWNER_ID: 'owner-id',
|
||||
GITHUB_RUN_ID: 'run-id',
|
||||
GITHUB_RUN_ATTEMPT: 'run-attempt',
|
||||
RUNNER_ENVIRONMENT: 'github-hosted'
|
||||
}
|
||||
|
||||
// Run the main function
|
||||
await main.run()
|
||||
|
||||
// Verify that outputs were set correctly
|
||||
expect(setOutputMock).toHaveBeenCalledTimes(2)
|
||||
|
||||
// Define the expected object
|
||||
const expectedObject = {
|
||||
buildDefinition: {
|
||||
buildType:
|
||||
'https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1',
|
||||
externalParameters: {
|
||||
workflow: {
|
||||
path: '.github/workflows/main.yml',
|
||||
ref: 'main',
|
||||
repository: 'https://github.com/owner/repo'
|
||||
}
|
||||
},
|
||||
internalParameters: {
|
||||
github: {
|
||||
event_name: 'push',
|
||||
repository_id: 'repo-id',
|
||||
repository_owner_id: 'owner-id'
|
||||
}
|
||||
},
|
||||
resolvedDependencies: [
|
||||
{
|
||||
digest: {
|
||||
gitCommit: 'babca52ab0c93ae16539e5923cb0d7403b9a093b'
|
||||
},
|
||||
uri: 'git+https://github.com/owner/repo@refs/heads/main'
|
||||
}
|
||||
]
|
||||
},
|
||||
runDetails: {
|
||||
builder: {
|
||||
id: 'https://github.com/actions/runner/github-hosted'
|
||||
},
|
||||
metadata: {
|
||||
invocationId:
|
||||
'https://github.com/owner/repo/actions/runs/run-id/attempts/run-attempt'
|
||||
}
|
||||
}
|
||||
}
|
||||
Collaborator
|
||||
@bdehamer bdehamer on Feb 29, 2024
|
||||
Instead of having this big, expected fixture here this is a good use case for .toMatchSnapshot().
|
||||
|
||||
See https://github.com/actions/toolkit/blob/0c735ba79dc9a148f98956164de52845f2e6f057/packages/attest/__tests__/provenance.test.ts#L25 for an example.
|
||||
|
||||
@webmasterdevices Reply...
|
||||
|
||||
// Use the expected object in the test assertion
|
||||
expect(setOutputMock).toHaveBeenNthCalledWith(
|
||||
1,
|
||||
'predicate',
|
||||
expectedObject
|
||||
)
|
||||
|
||||
expect(setOutputMock).toHaveBeenNthCalledWith(
|
||||
2,
|
||||
'predicate-type',
|
||||
'https://slsa.dev/provenance/v1'
|
||||
)
|
||||
|
||||
process.env = originalEnv
|
||||
})
|
||||
})
|
||||
1 change: 1 addition & 0 deletions1
|
||||
jest.setup.js
|
||||
Viewed
|
||||
Original file line number Diff line number Diff line change
|
||||
@@ -0,0 +1 @@
|
||||
process.stdout.write = jest.fn()
|
||||
3 changes: 3 additions & 0 deletions3
|
||||
package.json
|
||||
Viewed
|
||||
Original file line number Diff line number Diff line change
|
||||
@@ -46,6 +46,9 @@
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"setupFilesAfterEnv": [
|
||||
"./jest.setup.js"
|
||||
],
|
||||
"testMatch": [
|
||||
"**/*.test.ts"
|
||||
],
|
||||
Unchanged files with check annotations Preview
|
||||
|
||||
.github/linters/tsconfig.json
|
||||
{
|
||||
Check warning on line 1 in .github/linters/tsconfig.json
|
||||
|
||||
|
||||
GitHub Actions
|
||||
/ Lint Codebase
|
||||
File ignored by default.
|
||||
"$schema": "https://json.schemastore.org/tsconfig",
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
|
||||
.prettierrc.json
|
||||
{
|
||||
Check warning on line 1 in .prettierrc.json
|
||||
|
||||
|
||||
GitHub Actions
|
||||
/ Lint Codebase
|
||||
File ignored by default.
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
Footer
|
||||
© 2025 GitHub, Inc.
|
||||
Footer navigation
|
||||
Terms
|
||||
Privacy
|
||||
Security
|
||||
Status
|
||||
Docs
|
||||
Contact
|
||||
Manage cookies
|
||||
Do not share my personal information
|
||||
Loading…
Reference in New Issue
Block a user