Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions pkg/cmd/release/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -394,8 +394,13 @@
for _, ap := range rule.ActionPackages {
if ap.PackageReference == packageRef.PackageReferenceName && ap.DeploymentAction == packageRef.ActionName {
// this rule applies to our step/packageref combo
query.PreReleaseTag = rule.Tag
query.VersionRange = rule.VersionRange
if rule.VersioningStrategy == "MostRecentlyPublished" {

Check failure on line 397 in pkg/cmd/release/create/create.go

View workflow job for this annotation

GitHub Actions / test

rule.VersioningStrategy undefined (type channels.ChannelRule has no field or method VersioningStrategy)
query.VersioningStrategy = rule.VersioningStrategy

Check failure on line 398 in pkg/cmd/release/create/create.go

View workflow job for this annotation

GitHub Actions / test

rule.VersioningStrategy undefined (type channels.ChannelRule has no field or method VersioningStrategy)

Check failure on line 398 in pkg/cmd/release/create/create.go

View workflow job for this annotation

GitHub Actions / test

query.VersioningStrategy undefined (type feeds.SearchPackageVersionsQuery has no field or method VersioningStrategy)
query.VersionTagRegex = rule.VersionTagRegex

Check failure on line 399 in pkg/cmd/release/create/create.go

View workflow job for this annotation

GitHub Actions / test

rule.VersionTagRegex undefined (type channels.ChannelRule has no field or method VersionTagRegex)

Check failure on line 399 in pkg/cmd/release/create/create.go

View workflow job for this annotation

GitHub Actions / test

query.VersionTagRegex undefined (type feeds.SearchPackageVersionsQuery has no field or method VersionTagRegex)
} else {
query.PreReleaseTag = rule.Tag
query.VersionRange = rule.VersionRange
}
// the octopus server won't let the same package be targeted by more than one rule, so
// once we've found the first matching rule for our step+package, we can stop looping
break rulesLoop
Expand Down
62 changes: 62 additions & 0 deletions pkg/cmd/release/create/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2284,6 +2284,68 @@ func TestReleaseCreate_BuildPackageVersionBaseline(t *testing.T) {
}, packageVersions)
})

t.Run("uses versioningStrategy and versionTagRegex query params when channel rule has MostRecentlyPublished strategy", func(t *testing.T) {
api := testutil.NewMockHttpServer()
processTemplate := &deployments.DeploymentProcessTemplate{
Packages: []releases.ReleaseTemplatePackage{
{
ActionName: "Deploy",
FeedID: externalFeedID,
PackageID: "my-app",
PackageReferenceName: "my-app-on-deploy",
IsResolvable: true,
},
},
Resource: resources.Resource{},
}

channel := fixtures.NewChannel(spaceID, "Channels-1", "Default", "Projects-1")
channel.Rules = []channels.ChannelRule{
{
VersioningStrategy: "MostRecentlyPublished",
VersionTagRegex: "^feature-",
ActionPackages: []octopusPackages.DeploymentActionPackage{
{DeploymentAction: "Deploy", PackageReference: "my-app-on-deploy"},
},
},
}

receiver := testutil.GoBegin2(func() ([]*packages.StepPackageVersion, error) {
defer api.Close()
octopus, _ := octopusApiClient.NewClient(testutil.NewMockHttpClientWithTransport(api), serverUrl, placeholderApiKey, "")
return create.BuildPackageVersionBaselineForChannel(octopus, processTemplate, channel)
})

api.ExpectRequest(t, "GET", "/api/").RespondWith(rootResource)
api.ExpectRequest(t, "GET", "/api/spaces").RespondWith(rootResource)

api.ExpectRequest(t, "GET", "/api/Spaces-1/feeds?ids=Feeds-1001&take=1").RespondWith(&feeds.Feeds{Items: []feeds.IFeed{
&feeds.FeedResource{Name: "External Nuget", FeedType: feeds.FeedTypeNuGet, Resource: resources.Resource{
ID: externalFeedID,
Links: map[string]string{
constants.LinkSearchPackageVersionsTemplate: "/api/Spaces-1/feeds/Feeds-1001/packages/versions{?packageId,take,skip,includePreRelease,versionRange,preReleaseTag,versioningStrategy,versionTagRegex,filter,includeReleaseNotes}",
}}},
}})

// must send versioningStrategy and versionTagRegex — must NOT send preReleaseTag or versionRange
api.ExpectRequest(t, "GET", "/api/Spaces-1/feeds/Feeds-1001/packages/versions?packageId=my-app&take=1&versionTagRegex=%5Efeature-&versioningStrategy=MostRecentlyPublished").RespondWith(&resources.Resources[*octopusPackages.PackageVersion]{
Items: []*octopusPackages.PackageVersion{
{PackageID: "my-app", Version: "feature-login-42"},
},
})

packageVersions, err := testutil.ReceivePair(receiver)
assert.Nil(t, err)
assert.Equal(t, []*packages.StepPackageVersion{
{
PackageID: "my-app",
ActionName: "Deploy",
Version: "feature-login-42",
PackageReferenceName: "my-app-on-deploy",
},
}, packageVersions)
})

t.Run("still returns a value if the server returns zero available packages", func(t *testing.T) {
// note: channel rules can affect which packages the server returns so there might be zero,
// but either way the server returns zero items, which is the code path we are testing, so channel rules aren't relevant here
Expand Down
Loading