Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
820c625f46
commit
b5e7873e3f
|
@ -509,10 +509,6 @@ class Namespace < ApplicationRecord
|
|||
Feature.enabled?(:block_issue_repositioning, self, type: :ops, default_enabled: :yaml)
|
||||
end
|
||||
|
||||
def project_namespace_creation_enabled?
|
||||
Feature.enabled?(:create_project_namespace_on_project_create, self, default_enabled: :yaml)
|
||||
end
|
||||
|
||||
def storage_enforcement_date
|
||||
# should return something like Date.new(2022, 02, 03)
|
||||
# TBD: https://gitlab.com/gitlab-org/gitlab/-/issues/350632
|
||||
|
|
|
@ -506,7 +506,7 @@ class Project < ApplicationRecord
|
|||
validates :project_feature, presence: true
|
||||
|
||||
validates :namespace, presence: true
|
||||
validates :project_namespace, presence: true, on: :create, if: -> { self.namespace && self.root_namespace.project_namespace_creation_enabled? }
|
||||
validates :project_namespace, presence: true, on: :create, if: -> { self.namespace }
|
||||
validates :project_namespace, presence: true, on: :update, if: -> { self.project_namespace_id_changed?(to: nil) }
|
||||
validates :name, uniqueness: { scope: :namespace_id }
|
||||
validates :import_url, public_url: { schemes: ->(project) { project.persisted? ? VALID_MIRROR_PROTOCOLS : VALID_IMPORT_PROTOCOLS },
|
||||
|
@ -3018,16 +3018,15 @@ class Project < ApplicationRecord
|
|||
end
|
||||
|
||||
def ensure_project_namespace_in_sync
|
||||
# create project_namespace when project is created if create_project_namespace_on_project_create FF is enabled
|
||||
# create project_namespace when project is created
|
||||
build_project_namespace if project_namespace_creation_enabled?
|
||||
|
||||
# regardless of create_project_namespace_on_project_create FF we need
|
||||
# to keep project and project namespace in sync if there is one
|
||||
# we need to keep project and project namespace in sync if there is one
|
||||
sync_attributes(project_namespace) if sync_project_namespace?
|
||||
end
|
||||
|
||||
def project_namespace_creation_enabled?
|
||||
new_record? && !project_namespace && self.namespace && self.root_namespace.project_namespace_creation_enabled?
|
||||
new_record? && !project_namespace && self.namespace
|
||||
end
|
||||
|
||||
def sync_project_namespace?
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
name: create_project_namespace_on_project_create
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/70972
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/344954
|
||||
milestone: '14.5'
|
||||
type: development
|
||||
group: group::workspace
|
||||
default_enabled: true
|
|
@ -468,6 +468,28 @@ Each link as an asset has the following attributes:
|
|||
| `filepath` | The redirect link to the `url`. See [this section](#permanent-links-to-release-assets) for more information. | No |
|
||||
| `link_type` | The content kind of what users can download via `url`. See [this section](#link-types) for more information. | No |
|
||||
|
||||
##### Permanent link to latest release
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/16821) in GitLab 14.9.
|
||||
|
||||
Latest release page is accessible through a permanent URL.
|
||||
GitLab will redirect to the latest release page URL when it is visited.
|
||||
|
||||
The format of the URL is:
|
||||
|
||||
```plaintext
|
||||
https://host/namespace/project/-/releases/permalink/latest
|
||||
```
|
||||
|
||||
We also support, suffix path carry forward on the redirect to the latest release.
|
||||
Example if release `v14.8.0-ee` is the latest release and has a readable link `https://host/namespace/project/-/releases/v14.8.0-ee#release` then it can be addressed as `https://host/namespace/project/-/releases/permalink/latest#release`.
|
||||
|
||||
Refer [permanent links to latest release assets](#permanent-links-to-latest-release-assets) section to understand more about the suffix path carry forward usage.
|
||||
|
||||
###### Sorting preferences
|
||||
|
||||
By default, GitLab fetches the release using `released_at` time. The use of the query parameter `?order_by=released_at` is optional, and support for `?order_by=semver` is tracked [in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/352945).
|
||||
|
||||
##### Permanent links to release assets
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/27300) in GitLab 12.9.
|
||||
|
@ -475,7 +497,7 @@ Each link as an asset has the following attributes:
|
|||
The assets associated with a release are accessible through a permanent URL.
|
||||
GitLab always redirects this URL to the actual asset
|
||||
location, so even if the assets move to a different location, you can continue
|
||||
to use the same URL. This is defined during [link creation](../../../api/releases/links.md#create-a-link) or [updating](../../../api/releases/links.md#update-a-link).
|
||||
to use the same URL. This is defined during [link creation](../../../api/releases/links.md#create-a-link) or [updating](../../../api/releases/links.md#update-a-link) using the `filepath` API attribute.
|
||||
|
||||
The format of the URL is:
|
||||
|
||||
|
@ -503,6 +525,36 @@ https://gitlab.com/gitlab-org/gitlab-runner/-/releases/v11.9.0-rc2/downloads/bin
|
|||
|
||||
The physical location of the asset can change at any time and the direct link remains unchanged.
|
||||
|
||||
##### Permanent links to latest release assets
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/16821) in GitLab 14.9.
|
||||
|
||||
The `filepath` from [permanent links to release assets](#permanent-links-to-release-assets) can be used in combination with [permanent link to the latest release](#permanent-link-to-latest-release). It is useful when we want to link a permanant URL to download an asset from the *latest release*.
|
||||
|
||||
The format of the URL is:
|
||||
|
||||
```plaintext
|
||||
https://host/namespace/project/-/releases/permalink/latest/downloads/:filepath
|
||||
```
|
||||
|
||||
If you have an asset with [`filepath`](../../../api/releases/links.md#create-a-link) for the `v11.9.0-rc2` latest release in the `gitlab-org`
|
||||
namespace and `gitlab-runner` project on `gitlab.com`, for example:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "linux amd64",
|
||||
"filepath": "/binaries/gitlab-runner-linux-amd64",
|
||||
"url": "https://gitlab-runner-downloads.s3.amazonaws.com/v11.9.0-rc2/binaries/gitlab-runner-linux-amd64",
|
||||
"link_type": "other"
|
||||
}
|
||||
```
|
||||
|
||||
This asset has a direct link of:
|
||||
|
||||
```plaintext
|
||||
https://gitlab.com/gitlab-org/gitlab-runner/-/releases/permalink/latest/downloads/binaries/gitlab-runner-linux-amd64
|
||||
```
|
||||
|
||||
##### Link Types
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/207257) in GitLab 13.1.
|
||||
|
|
|
@ -246,20 +246,6 @@ RSpec.describe Project, factory_default: :keep do
|
|||
expect(project.project_namespace).to be_in_sync_with_project(project)
|
||||
expect(project.reload.project_namespace.traversal_ids).to eq([project.namespace.traversal_ids, project.project_namespace.id].flatten.compact)
|
||||
end
|
||||
|
||||
context 'with FF disabled' do
|
||||
before do
|
||||
stub_feature_flags(create_project_namespace_on_project_create: false)
|
||||
end
|
||||
|
||||
it 'does not create a project namespace' do
|
||||
project = build(:project, path: 'hopefully-valid-path2')
|
||||
project.save!
|
||||
|
||||
expect(project).to be_persisted
|
||||
expect(project.project_namespace).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it_behaves_like 'creates project namespace'
|
||||
|
@ -306,35 +292,6 @@ RSpec.describe Project, factory_default: :keep do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with create_project_namespace_on_project_create FF enabled' do
|
||||
it_behaves_like 'project update'
|
||||
|
||||
it 'keeps project namespace in sync with project' do
|
||||
project = create(:project)
|
||||
project.update!(path: 'hopefully-valid-path1')
|
||||
|
||||
expect(project).to be_persisted
|
||||
expect(project.project_namespace).to be_persisted
|
||||
expect(project.project_namespace).to be_in_sync_with_project(project)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with create_project_namespace_on_project_create FF disabled' do
|
||||
before do
|
||||
stub_feature_flags(create_project_namespace_on_project_create: false)
|
||||
end
|
||||
|
||||
it_behaves_like 'project update'
|
||||
|
||||
it 'does not create a project namespace when project is updated' do
|
||||
project = create(:project)
|
||||
project.update!(path: 'hopefully-valid-path1')
|
||||
|
||||
expect(project).to be_persisted
|
||||
expect(project.project_namespace).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'updating cd_cd_settings' do
|
||||
|
|
Loading…
Reference in New Issue