From 574d8fe6d6675c8aa05e2b75fdbc01c009efd8be Mon Sep 17 00:00:00 2001 From: James Cleverley-Prance Date: Thu, 16 Mar 2023 17:30:42 +0000 Subject: [PATCH] Add absent repounits to create/edit repo API (#23500) Adds the ability to enable/disable Actions, Packages and Releases from the API, via the Edit and Get Repository API endpoints. --- modules/structs/repo.go | 9 +++++++++ routers/api/v1/repo/repo.go | 33 +++++++++++++++++++++++++++++++++ services/convert/repository.go | 18 ++++++++++++++++++ templates/swagger/v1_json.tmpl | 27 +++++++++++++++++++++++++++ 4 files changed, 87 insertions(+) diff --git a/modules/structs/repo.go b/modules/structs/repo.go index b5a26a8155..6d3e2c2909 100644 --- a/modules/structs/repo.go +++ b/modules/structs/repo.go @@ -88,6 +88,9 @@ type Repository struct { ExternalWiki *ExternalWiki `json:"external_wiki,omitempty"` HasPullRequests bool `json:"has_pull_requests"` HasProjects bool `json:"has_projects"` + HasReleases bool `json:"has_releases"` + HasPackages bool `json:"has_packages"` + HasActions bool `json:"has_actions"` IgnoreWhitespaceConflicts bool `json:"ignore_whitespace_conflicts"` AllowMerge bool `json:"allow_merge_commits"` AllowRebase bool `json:"allow_rebase"` @@ -168,6 +171,12 @@ type EditRepoOption struct { HasPullRequests *bool `json:"has_pull_requests,omitempty"` // either `true` to enable project unit, or `false` to disable them. HasProjects *bool `json:"has_projects,omitempty"` + // either `true` to enable releases unit, or `false` to disable them. + HasReleases *bool `json:"has_releases,omitempty"` + // either `true` to enable packages unit, or `false` to disable them. + HasPackages *bool `json:"has_packages,omitempty"` + // either `true` to enable actions unit, or `false` to disable them. + HasActions *bool `json:"has_actions,omitempty"` // either `true` to ignore whitespace for conflicts, or `false` to not ignore whitespace. IgnoreWhitespaceConflicts *bool `json:"ignore_whitespace_conflicts,omitempty"` // either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits. diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index 16608e5bbb..4f43b10259 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -936,6 +936,39 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error { } } + if opts.HasReleases != nil && !unit_model.TypeReleases.UnitGlobalDisabled() { + if *opts.HasReleases { + units = append(units, repo_model.RepoUnit{ + RepoID: repo.ID, + Type: unit_model.TypeReleases, + }) + } else { + deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeReleases) + } + } + + if opts.HasPackages != nil && !unit_model.TypePackages.UnitGlobalDisabled() { + if *opts.HasPackages { + units = append(units, repo_model.RepoUnit{ + RepoID: repo.ID, + Type: unit_model.TypePackages, + }) + } else { + deleteUnitTypes = append(deleteUnitTypes, unit_model.TypePackages) + } + } + + if opts.HasActions != nil && !unit_model.TypeActions.UnitGlobalDisabled() { + if *opts.HasActions { + units = append(units, repo_model.RepoUnit{ + RepoID: repo.ID, + Type: unit_model.TypeActions, + }) + } else { + deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeActions) + } + } + if err := repo_model.UpdateRepositoryUnits(repo, units, deleteUnitTypes); err != nil { ctx.Error(http.StatusInternalServerError, "UpdateRepositoryUnits", err) return err diff --git a/services/convert/repository.go b/services/convert/repository.go index fc965a9457..a2a8570cc9 100644 --- a/services/convert/repository.go +++ b/services/convert/repository.go @@ -100,6 +100,21 @@ func innerToRepo(ctx context.Context, repo *repo_model.Repository, mode perm.Acc hasProjects = true } + hasReleases := false + if _, err := repo.GetUnit(ctx, unit_model.TypeReleases); err == nil { + hasReleases = true + } + + hasPackages := false + if _, err := repo.GetUnit(ctx, unit_model.TypePackages); err == nil { + hasPackages = true + } + + hasActions := false + if _, err := repo.GetUnit(ctx, unit_model.TypeActions); err == nil { + hasActions = true + } + if err := repo.LoadOwner(ctx); err != nil { return nil } @@ -174,6 +189,9 @@ func innerToRepo(ctx context.Context, repo *repo_model.Repository, mode perm.Acc InternalTracker: internalTracker, HasWiki: hasWiki, HasProjects: hasProjects, + HasReleases: hasReleases, + HasPackages: hasPackages, + HasActions: hasActions, ExternalWiki: externalWiki, HasPullRequests: hasPullRequests, IgnoreWhitespaceConflicts: ignoreWhitespaceConflicts, diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 9e35724315..ddcdc94b81 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -16861,11 +16861,21 @@ "external_wiki": { "$ref": "#/definitions/ExternalWiki" }, + "has_actions": { + "description": "either `true` to enable actions unit, or `false` to disable them.", + "type": "boolean", + "x-go-name": "HasActions" + }, "has_issues": { "description": "either `true` to enable issues for this repository or `false` to disable them.", "type": "boolean", "x-go-name": "HasIssues" }, + "has_packages": { + "description": "either `true` to enable packages unit, or `false` to disable them.", + "type": "boolean", + "x-go-name": "HasPackages" + }, "has_projects": { "description": "either `true` to enable project unit, or `false` to disable them.", "type": "boolean", @@ -16876,6 +16886,11 @@ "type": "boolean", "x-go-name": "HasPullRequests" }, + "has_releases": { + "description": "either `true` to enable releases unit, or `false` to disable them.", + "type": "boolean", + "x-go-name": "HasReleases" + }, "has_wiki": { "description": "either `true` to enable the wiki for this repository or `false` to disable it.", "type": "boolean", @@ -19421,10 +19436,18 @@ "type": "string", "x-go-name": "FullName" }, + "has_actions": { + "type": "boolean", + "x-go-name": "HasActions" + }, "has_issues": { "type": "boolean", "x-go-name": "HasIssues" }, + "has_packages": { + "type": "boolean", + "x-go-name": "HasPackages" + }, "has_projects": { "type": "boolean", "x-go-name": "HasProjects" @@ -19433,6 +19456,10 @@ "type": "boolean", "x-go-name": "HasPullRequests" }, + "has_releases": { + "type": "boolean", + "x-go-name": "HasReleases" + }, "has_wiki": { "type": "boolean", "x-go-name": "HasWiki"