From 9fc90af35485b7d53f2ab0cc20f1a409be9855c6 Mon Sep 17 00:00:00 2001 From: Nick Josevski Date: Fri, 17 Jul 2026 21:00:14 +1000 Subject: [PATCH] Add GitResources to CreateReleaseCommandV1 Allows callers of the release-create (v1) API to specify Git references for per-step Git resources at release-creation time, matching the server's existing 'gitResources' payload field and the Octopus CLI's --git-resource flag. This unblocks the create-release GitHub Action from targeting a specific Git branch/ref for steps like 'Update Argo CD Application Manifests' (SF-2251). Co-Authored-By: Claude Opus 4.8 --- .../releases/createReleaseCommandV1.test.ts | 30 +++++++++++++++++++ .../releases/createReleaseCommandV1.ts | 1 + 2 files changed, 31 insertions(+) create mode 100644 src/features/projects/releases/createReleaseCommandV1.test.ts diff --git a/src/features/projects/releases/createReleaseCommandV1.test.ts b/src/features/projects/releases/createReleaseCommandV1.test.ts new file mode 100644 index 0000000..3d4f43c --- /dev/null +++ b/src/features/projects/releases/createReleaseCommandV1.test.ts @@ -0,0 +1,30 @@ +import type { Client } from "../../../client"; +import { CreateReleaseCommandV1 } from "./createReleaseCommandV1"; +import { ReleaseRepository } from "./releaseRepository"; + +describe("CreateReleaseCommandV1", () => { + test("create posts GitResources in the create/v1 request body", async () => { + const doCreate = jest.fn().mockResolvedValue({ ReleaseId: "Releases-1", ReleaseVersion: "1.0.0" }); + // A minimal stand-in for Client exercising only the members create() touches. + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + const client = { + getServerInformation: jest.fn().mockResolvedValue({ version: "2022.4.0" }), + debug: jest.fn(), + error: jest.fn(), + doCreate, + } as unknown as Client; + + const command: CreateReleaseCommandV1 = { + spaceName: "Spaces-1", + ProjectName: "My Project", + GitResources: ["Update Argo Manifests:refs/heads/feature-x"], + }; + + await new ReleaseRepository(client, "Default").create(command); + + expect(doCreate).toHaveBeenCalledTimes(1); + const [path, body] = doCreate.mock.calls[0]; + expect(path).toContain("/releases/create/v1"); + expect(body.GitResources).toEqual(["Update Argo Manifests:refs/heads/feature-x"]); + }); +}); diff --git a/src/features/projects/releases/createReleaseCommandV1.ts b/src/features/projects/releases/createReleaseCommandV1.ts index b5949b8..c412034 100644 --- a/src/features/projects/releases/createReleaseCommandV1.ts +++ b/src/features/projects/releases/createReleaseCommandV1.ts @@ -8,6 +8,7 @@ export interface CreateReleaseCommandV1 extends SpaceScopedOperation { ReleaseVersion?: string; ChannelName?: string; Packages?: string[]; + GitResources?: string[]; ReleaseNotes?: string; IgnoreIfAlreadyExists?: boolean; IgnoreChannelRules?: boolean;