From f939b4c816b4126d4cf82fe37c44912f2e323481 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Tue, 3 Mar 2026 18:16:19 +0100 Subject: [PATCH] test: stabilize context test fixtures and github mock setup since ESM Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- __tests__/context.test.ts | 23 +-- __tests__/fixtures/builder-info.json | 22 +++ __tests__/setup.unit.ts | 236 ++------------------------- 3 files changed, 44 insertions(+), 237 deletions(-) create mode 100644 __tests__/fixtures/builder-info.json diff --git a/__tests__/context.test.ts b/__tests__/context.test.ts index 07ad579..74fb50e 100644 --- a/__tests__/context.test.ts +++ b/__tests__/context.test.ts @@ -2,7 +2,6 @@ import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'; import * as fs from 'fs'; import * as os from 'os'; import * as path from 'path'; -import {fileURLToPath} from 'node:url'; import {Builder} from '@docker/actions-toolkit/lib/buildx/builder.js'; import {Buildx} from '@docker/actions-toolkit/lib/buildx/buildx.js'; @@ -17,7 +16,7 @@ import * as context from '../src/context.js'; const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'context-')); const tmpName = path.join(tmpDir, '.tmpname-vi'); -const testDir = path.dirname(fileURLToPath(import.meta.url)); +const fixturesDir = path.join(__dirname, 'fixtures'); vi.spyOn(Context, 'tmpDir').mockImplementation((): string => { if (!fs.existsSync(tmpDir)) { @@ -44,22 +43,12 @@ vi.spyOn(Build.prototype, 'getImageIDFilePath').mockImplementation((): string => return imageIDFilePath; }); +type BuilderInfoFixture = Omit & {lastActivity: string}; +const builderInfoFixture = JSON.parse(fs.readFileSync(path.join(fixturesDir, 'builder-info.json'), {encoding: 'utf-8'}).trim()); vi.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise => { return { - name: 'builder2', - driver: 'docker-container', - lastActivity: new Date('2023-01-16 09:45:23 +0000 UTC'), - nodes: [ - { - buildkit: 'v0.11.0', - 'buildkitd-flags': '--debug --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host', - 'driver-opts': ['BUILDKIT_STEP_LOG_MAX_SIZE=10485760', 'BUILDKIT_STEP_LOG_MAX_SPEED=10485760', 'JAEGER_TRACE=localhost:6831', 'image=moby/buildkit:latest', 'network=host'], - endpoint: 'unix:///var/run/docker.sock', - name: 'builder20', - platforms: 'linux/amd64,linux/amd64/v2,linux/amd64/v3,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6', - status: 'running' - } - ] + ...builderInfoFixture, + lastActivity: new Date(builderInfoFixture.lastActivity) }; }); @@ -342,7 +331,7 @@ ccc`], new Map([ ['context', 'https://github.com/docker/build-push-action.git#refs/heads/master'], ['tag', 'localhost:5000/name/app:latest'], - ['secret-files', `MY_SECRET=${path.join(testDir, 'fixtures', 'secret.txt')}`], + ['secret-files', `MY_SECRET=${path.join(fixturesDir, 'secret.txt')}`], ['file', './test/Dockerfile'], ['builder', 'builder-git-context-2'], ['network', 'host'], diff --git a/__tests__/fixtures/builder-info.json b/__tests__/fixtures/builder-info.json new file mode 100644 index 0000000..f9ec9e6 --- /dev/null +++ b/__tests__/fixtures/builder-info.json @@ -0,0 +1,22 @@ +{ + "name": "builder2", + "driver": "docker-container", + "lastActivity": "2023-01-16 09:45:23 +0000 UTC", + "nodes": [ + { + "buildkit": "v0.11.0", + "buildkitd-flags": "--debug --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host", + "driver-opts": [ + "BUILDKIT_STEP_LOG_MAX_SIZE=10485760", + "BUILDKIT_STEP_LOG_MAX_SPEED=10485760", + "JAEGER_TRACE=localhost:6831", + "image=moby/buildkit:latest", + "network=host" + ], + "endpoint": "unix:///var/run/docker.sock", + "name": "builder20", + "platforms": "linux/amd64,linux/amd64/v2,linux/amd64/v3,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6", + "status": "running" + } + ] +} diff --git a/__tests__/setup.unit.ts b/__tests__/setup.unit.ts index b2ace6c..f4e42b2 100644 --- a/__tests__/setup.unit.ts +++ b/__tests__/setup.unit.ts @@ -1,22 +1,31 @@ import fs from 'node:fs'; -import {createRequire} from 'node:module'; import os from 'node:os'; import path from 'node:path'; import {vi} from 'vitest'; const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-build-push-action-')); +const githubPayload = { + repository: { + private: true + } +}; + +const githubEventPath = path.join(tmpDir, 'github-event.json'); +fs.writeFileSync(githubEventPath, JSON.stringify(githubPayload)); + process.env = Object.assign({}, process.env, { TEMP: tmpDir, GITHUB_REPOSITORY: 'docker/build-push-action', + GITHUB_REF: 'refs/heads/master', + GITHUB_RUN_ID: '123456789', + GITHUB_RUN_ATTEMPT: '1', + GITHUB_EVENT_PATH: githubEventPath, RUNNER_TEMP: path.join(tmpDir, 'runner-temp'), RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache') }); -const require = createRequire(import.meta.url); -type RequireCacheEntry = NonNullable<(typeof require.cache)[string]>; - -const githubMock = { +vi.mock('@actions/github', () => ({ context: { repo: { owner: 'docker', @@ -24,220 +33,7 @@ const githubMock = { }, ref: 'refs/heads/master', runId: 123456789, - payload: { - after: '860c1904a1ce19322e91ac35af1ab07466440c37', - base_ref: null, - before: '5f3331d7f7044c18ca9f12c77d961c4d7cf3276a', - commits: [ - { - author: { - email: 'crazy-max@users.noreply.github.com', - name: 'CrazyMax', - username: 'crazy-max' - }, - committer: { - email: 'crazy-max@users.noreply.github.com', - name: 'CrazyMax', - username: 'crazy-max' - }, - distinct: true, - id: '860c1904a1ce19322e91ac35af1ab07466440c37', - message: 'hello dev', - timestamp: '2022-04-19T11:27:24+02:00', - tree_id: 'd2c60af597e863787d2d27f569e30495b0b92820', - url: 'https://github.com/docker/test-docker-action/commit/860c1904a1ce19322e91ac35af1ab07466440c37' - } - ], - compare: 'https://github.com/docker/test-docker-action/compare/5f3331d7f704...860c1904a1ce', - created: false, - deleted: false, - forced: false, - head_commit: { - author: { - email: 'crazy-max@users.noreply.github.com', - name: 'CrazyMax', - username: 'crazy-max' - }, - committer: { - email: 'crazy-max@users.noreply.github.com', - name: 'CrazyMax', - username: 'crazy-max' - }, - distinct: true, - id: '860c1904a1ce19322e91ac35af1ab07466440c37', - message: 'hello dev', - timestamp: '2022-04-19T11:27:24+02:00', - tree_id: 'd2c60af597e863787d2d27f569e30495b0b92820', - url: 'https://github.com/docker/test-docker-action/commit/860c1904a1ce19322e91ac35af1ab07466440c37' - }, - organization: { - avatar_url: 'https://avatars.githubusercontent.com/u/5429470?v=4', - description: 'Docker helps developers bring their ideas to life by conquering the complexity of app development.', - events_url: 'https://api.github.com/orgs/docker/events', - hooks_url: 'https://api.github.com/orgs/docker/hooks', - id: 5429470, - issues_url: 'https://api.github.com/orgs/docker/issues', - login: 'docker', - members_url: 'https://api.github.com/orgs/docker/members{/member}', - node_id: 'MDEyOk9yZ2FuaXphdGlvbjU0Mjk0NzA=', - public_members_url: 'https://api.github.com/orgs/docker/public_members{/member}', - repos_url: 'https://api.github.com/orgs/docker/repos', - url: 'https://api.github.com/orgs/docker' - }, - pusher: { - email: 'github@crazymax.dev', - name: 'crazy-max' - }, - ref: 'refs/heads/dev', - repository: { - allow_forking: true, - archive_url: 'https://api.github.com/repos/docker/test-docker-action/{archive_format}{/ref}', - archived: false, - assignees_url: 'https://api.github.com/repos/docker/test-docker-action/assignees{/user}', - blobs_url: 'https://api.github.com/repos/docker/test-docker-action/git/blobs{/sha}', - branches_url: 'https://api.github.com/repos/docker/test-docker-action/branches{/branch}', - clone_url: 'https://github.com/docker/test-docker-action.git', - collaborators_url: 'https://api.github.com/repos/docker/test-docker-action/collaborators{/collaborator}', - comments_url: 'https://api.github.com/repos/docker/test-docker-action/comments{/number}', - commits_url: 'https://api.github.com/repos/docker/test-docker-action/commits{/sha}', - compare_url: 'https://api.github.com/repos/docker/test-docker-action/compare/{base}...{head}', - contents_url: 'https://api.github.com/repos/docker/test-docker-action/contents/{+path}', - contributors_url: 'https://api.github.com/repos/docker/test-docker-action/contributors', - created_at: 1596792180, - default_branch: 'master', - deployments_url: 'https://api.github.com/repos/docker/test-docker-action/deployments', - description: 'Test "Docker" Actions', - disabled: false, - downloads_url: 'https://api.github.com/repos/docker/test-docker-action/downloads', - events_url: 'https://api.github.com/repos/docker/test-docker-action/events', - fork: false, - forks: 1, - forks_count: 1, - forks_url: 'https://api.github.com/repos/docker/test-docker-action/forks', - full_name: 'docker/test-docker-action', - git_commits_url: 'https://api.github.com/repos/docker/test-docker-action/git/commits{/sha}', - git_refs_url: 'https://api.github.com/repos/docker/test-docker-action/git/refs{/sha}', - git_tags_url: 'https://api.github.com/repos/docker/test-docker-action/git/tags{/sha}', - git_url: 'git://github.com/docker/test-docker-action.git', - has_downloads: true, - has_issues: true, - has_pages: false, - has_projects: true, - has_wiki: true, - homepage: '', - hooks_url: 'https://api.github.com/repos/docker/test-docker-action/hooks', - html_url: 'https://github.com/docker/test-docker-action', - id: 285789493, - is_template: false, - issue_comment_url: 'https://api.github.com/repos/docker/test-docker-action/issues/comments{/number}', - issue_events_url: 'https://api.github.com/repos/docker/test-docker-action/issues/events{/number}', - issues_url: 'https://api.github.com/repos/docker/test-docker-action/issues{/number}', - keys_url: 'https://api.github.com/repos/docker/test-docker-action/keys{/key_id}', - labels_url: 'https://api.github.com/repos/docker/test-docker-action/labels{/name}', - language: 'JavaScript', - languages_url: 'https://api.github.com/repos/docker/test-docker-action/languages', - license: { - key: 'mit', - name: 'MIT License', - node_id: 'MDc6TGljZW5zZTEz', - spdx_id: 'MIT', - url: 'https://api.github.com/licenses/mit' - }, - master_branch: 'master', - merges_url: 'https://api.github.com/repos/docker/test-docker-action/merges', - milestones_url: 'https://api.github.com/repos/docker/test-docker-action/milestones{/number}', - mirror_url: null, - name: 'test-docker-action', - node_id: 'MDEwOlJlcG9zaXRvcnkyODU3ODk0OTM=', - notifications_url: 'https://api.github.com/repos/docker/test-docker-action/notifications{?since,all,participating}', - open_issues: 6, - open_issues_count: 6, - organization: 'docker', - owner: { - avatar_url: 'https://avatars.githubusercontent.com/u/5429470?v=4', - email: 'info@docker.com', - events_url: 'https://api.github.com/users/docker/events{/privacy}', - followers_url: 'https://api.github.com/users/docker/followers', - following_url: 'https://api.github.com/users/docker/following{/other_user}', - gists_url: 'https://api.github.com/users/docker/gists{/gist_id}', - gravatar_id: '', - html_url: 'https://github.com/docker', - id: 5429470, - login: 'docker', - name: 'docker', - node_id: 'MDEyOk9yZ2FuaXphdGlvbjU0Mjk0NzA=', - organizations_url: 'https://api.github.com/users/docker/orgs', - received_events_url: 'https://api.github.com/users/docker/received_events', - repos_url: 'https://api.github.com/users/docker/repos', - site_admin: false, - starred_url: 'https://api.github.com/users/docker/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/docker/subscriptions', - type: 'Organization', - url: 'https://api.github.com/users/docker' - }, - private: true, - pulls_url: 'https://api.github.com/repos/docker/test-docker-action/pulls{/number}', - pushed_at: 1650360446, - releases_url: 'https://api.github.com/repos/docker/test-docker-action/releases{/id}', - size: 796, - ssh_url: 'git@github.com:docker/test-docker-action.git', - stargazers: 0, - stargazers_count: 0, - stargazers_url: 'https://api.github.com/repos/docker/test-docker-action/stargazers', - statuses_url: 'https://api.github.com/repos/docker/test-docker-action/statuses/{sha}', - subscribers_url: 'https://api.github.com/repos/docker/test-docker-action/subscribers', - subscription_url: 'https://api.github.com/repos/docker/test-docker-action/subscription', - svn_url: 'https://github.com/docker/test-docker-action', - tags_url: 'https://api.github.com/repos/docker/test-docker-action/tags', - teams_url: 'https://api.github.com/repos/docker/test-docker-action/teams', - topics: [], - trees_url: 'https://api.github.com/repos/docker/test-docker-action/git/trees{/sha}', - updated_at: '2022-04-19T09:05:09Z', - url: 'https://github.com/docker/test-docker-action', - visibility: 'private', - watchers: 0, - watchers_count: 0 - }, - sender: { - avatar_url: 'https://avatars.githubusercontent.com/u/1951866?v=4', - events_url: 'https://api.github.com/users/crazy-max/events{/privacy}', - followers_url: 'https://api.github.com/users/crazy-max/followers', - following_url: 'https://api.github.com/users/crazy-max/following{/other_user}', - gists_url: 'https://api.github.com/users/crazy-max/gists{/gist_id}', - gravatar_id: '', - html_url: 'https://github.com/crazy-max', - id: 1951866, - login: 'crazy-max', - node_id: 'MDQ6VXNlcjE5NTE4NjY=', - organizations_url: 'https://api.github.com/users/crazy-max/orgs', - received_events_url: 'https://api.github.com/users/crazy-max/received_events', - repos_url: 'https://api.github.com/users/crazy-max/repos', - site_admin: false, - starred_url: 'https://api.github.com/users/crazy-max/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/crazy-max/subscriptions', - type: 'User', - url: 'https://api.github.com/users/crazy-max' - } - } + payload: githubPayload }, getOctokit: vi.fn() -}; - -vi.mock('@actions/github', () => githubMock); -vi.doMock(require.resolve('@docker/actions-toolkit/node_modules/@actions/github'), () => githubMock); - -for (const mod of ['@docker/actions-toolkit/node_modules/@actions/github']) { - try { - const resolved = require.resolve(mod); - require.cache[resolved] = { - id: resolved, - filename: resolved, - loaded: true, - exports: githubMock, - children: [], - paths: [] - } as RequireCacheEntry; - } catch { - // Ignore unresolved optional paths; vi.mock handles module-level mocking. - } -} +}));