feat(i18n): Branch protection improvements
- adds a header to indicate creating a new rule - test that header is different between new and edit form - consistently avoids colons in the form - excludes some accessibility checks that require a global solution for forms
This commit is contained in:
parent
3bbd129270
commit
00276dfc30
4 changed files with 40 additions and 13 deletions
|
@ -2468,6 +2468,7 @@ settings.protected_branch = Branch protection
|
||||||
settings.protected_branch.save_rule = Save rule
|
settings.protected_branch.save_rule = Save rule
|
||||||
settings.protected_branch.delete_rule = Delete rule
|
settings.protected_branch.delete_rule = Delete rule
|
||||||
settings.branch_protection = Protection rules for branch "<b>%s</b>"
|
settings.branch_protection = Protection rules for branch "<b>%s</b>"
|
||||||
|
settings.protect_new_rule = Create a new branch protection rule
|
||||||
settings.protect_this_branch = Enable branch protection
|
settings.protect_this_branch = Enable branch protection
|
||||||
settings.protect_this_branch_desc = Prevents deletion and restricts Git pushing and merging to the branch.
|
settings.protect_this_branch_desc = Prevents deletion and restricts Git pushing and merging to the branch.
|
||||||
settings.protect_disable_push = Disable push
|
settings.protect_disable_push = Disable push
|
||||||
|
@ -2479,26 +2480,26 @@ settings.protect_enable_merge_desc = Anyone with write access will be allowed to
|
||||||
settings.protect_whitelist_committers = Whitelist restricted push
|
settings.protect_whitelist_committers = Whitelist restricted push
|
||||||
settings.protect_whitelist_committers_desc = Only whitelisted users or teams will be allowed to push to this branch (but not force push).
|
settings.protect_whitelist_committers_desc = Only whitelisted users or teams will be allowed to push to this branch (but not force push).
|
||||||
settings.protect_whitelist_deploy_keys = Whitelist deploy keys with write access to push.
|
settings.protect_whitelist_deploy_keys = Whitelist deploy keys with write access to push.
|
||||||
settings.protect_whitelist_users = Whitelisted users for pushing:
|
settings.protect_whitelist_users = Whitelisted users for pushing
|
||||||
settings.protect_whitelist_teams = Whitelisted teams for pushing:
|
settings.protect_whitelist_teams = Whitelisted teams for pushing
|
||||||
settings.protect_merge_whitelist_committers = Enable merge whitelist
|
settings.protect_merge_whitelist_committers = Enable merge whitelist
|
||||||
settings.protect_merge_whitelist_committers_desc = Allow only whitelisted users or teams to merge pull requests into this branch.
|
settings.protect_merge_whitelist_committers_desc = Allow only whitelisted users or teams to merge pull requests into this branch.
|
||||||
settings.protect_merge_whitelist_users = Whitelisted users for merging:
|
settings.protect_merge_whitelist_users = Whitelisted users for merging
|
||||||
settings.protect_merge_whitelist_teams = Whitelisted teams for merging:
|
settings.protect_merge_whitelist_teams = Whitelisted teams for merging
|
||||||
settings.protect_check_status_contexts = Enable status check
|
settings.protect_check_status_contexts = Enable status check
|
||||||
settings.protect_status_check_patterns = Status check patterns:
|
settings.protect_status_check_patterns = Status check patterns
|
||||||
settings.protect_status_check_patterns_desc = Enter patterns to specify which status checks must pass before branches can be merged into a branch that matches this rule. Each line specifies a pattern. Patterns cannot be empty.
|
settings.protect_status_check_patterns_desc = Enter patterns to specify which status checks must pass before branches can be merged into a branch that matches this rule. Each line specifies a pattern. Patterns cannot be empty.
|
||||||
settings.protect_check_status_contexts_desc = Require status checks to pass before merging. When enabled, commits must first be pushed to another branch, then merged or pushed directly to a branch that matches this rule after status checks have passed. If no contexts are matched, the last commit must be successful regardless of context.
|
settings.protect_check_status_contexts_desc = Require status checks to pass before merging. When enabled, commits must first be pushed to another branch, then merged or pushed directly to a branch that matches this rule after status checks have passed. If no contexts are matched, the last commit must be successful regardless of context.
|
||||||
settings.protect_check_status_contexts_list = Status checks found in the last week for this repository
|
settings.protect_check_status_contexts_list = Status checks found in the last week for this repository
|
||||||
settings.protect_status_check_matched = Matched
|
settings.protect_status_check_matched = Matched
|
||||||
settings.protect_invalid_status_check_pattern = Invalid status check pattern: "%s".
|
settings.protect_invalid_status_check_pattern = Invalid status check pattern: "%s".
|
||||||
settings.protect_no_valid_status_check_patterns = No valid status check patterns.
|
settings.protect_no_valid_status_check_patterns = No valid status check patterns.
|
||||||
settings.protect_required_approvals = Required approvals:
|
settings.protect_required_approvals = Required approvals
|
||||||
settings.protect_required_approvals_desc = Allow only to merge pull request with enough positive reviews.
|
settings.protect_required_approvals_desc = Allow only to merge pull request with enough positive reviews.
|
||||||
settings.protect_approvals_whitelist_enabled = Restrict approvals to whitelisted users or teams
|
settings.protect_approvals_whitelist_enabled = Restrict approvals to whitelisted users or teams
|
||||||
settings.protect_approvals_whitelist_enabled_desc = Only reviews from whitelisted users or teams will count to the required approvals. Without approval whitelist, reviews from anyone with write access count to the required approvals.
|
settings.protect_approvals_whitelist_enabled_desc = Only reviews from whitelisted users or teams will count to the required approvals. Without approval whitelist, reviews from anyone with write access count to the required approvals.
|
||||||
settings.protect_approvals_whitelist_users = Whitelisted reviewers:
|
settings.protect_approvals_whitelist_users = Whitelisted reviewers
|
||||||
settings.protect_approvals_whitelist_teams = Whitelisted teams for reviews:
|
settings.protect_approvals_whitelist_teams = Whitelisted teams for reviews
|
||||||
settings.dismiss_stale_approvals = Dismiss stale approvals
|
settings.dismiss_stale_approvals = Dismiss stale approvals
|
||||||
settings.dismiss_stale_approvals_desc = When new commits that change the content of the pull request are pushed to the branch, old approvals will be dismissed.
|
settings.dismiss_stale_approvals_desc = When new commits that change the content of the pull request are pushed to the branch, old approvals will be dismissed.
|
||||||
settings.ignore_stale_approvals = Ignore stale approvals
|
settings.ignore_stale_approvals = Ignore stale approvals
|
||||||
|
@ -2508,9 +2509,9 @@ settings.require_signed_commits_desc = Reject pushes to this branch if they are
|
||||||
settings.protect_branch_name_pattern = Protected branch name pattern
|
settings.protect_branch_name_pattern = Protected branch name pattern
|
||||||
settings.protect_branch_name_pattern_desc = Protected branch name patterns. See <a href="https://github.com/gobwas/glob">the documentation</a> for pattern syntax. Examples: main, release/**
|
settings.protect_branch_name_pattern_desc = Protected branch name patterns. See <a href="https://github.com/gobwas/glob">the documentation</a> for pattern syntax. Examples: main, release/**
|
||||||
settings.protect_patterns = Patterns
|
settings.protect_patterns = Patterns
|
||||||
settings.protect_protected_file_patterns = Protected file patterns (separated using semicolon ";"):
|
settings.protect_protected_file_patterns = Protected file patterns (separated using semicolon ";")
|
||||||
settings.protect_protected_file_patterns_desc = Protected files are not allowed to be changed directly even if user has rights to add, edit, or delete files in this branch. Multiple patterns can be separated using semicolon (";"). See <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> documentation for pattern syntax. Examples: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
|
settings.protect_protected_file_patterns_desc = Protected files are not allowed to be changed directly even if user has rights to add, edit, or delete files in this branch. Multiple patterns can be separated using semicolon (";"). See <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> documentation for pattern syntax. Examples: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
|
||||||
settings.protect_unprotected_file_patterns = Unprotected file patterns (separated using semicolon ";"):
|
settings.protect_unprotected_file_patterns = Unprotected file patterns (separated using semicolon ";")
|
||||||
settings.protect_unprotected_file_patterns_desc = Unprotected files that are allowed to be changed directly if user has write access, bypassing push restriction. Multiple patterns can be separated using semicolon (";"). See <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> documentation for pattern syntax. Examples: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
|
settings.protect_unprotected_file_patterns_desc = Unprotected files that are allowed to be changed directly if user has write access, bypassing push restriction. Multiple patterns can be separated using semicolon (";"). See <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> documentation for pattern syntax. Examples: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
|
||||||
settings.add_protected_branch = Enable protection
|
settings.add_protected_branch = Enable protection
|
||||||
settings.delete_protected_branch = Disable protection
|
settings.delete_protected_branch = Disable protection
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings branches")}}
|
{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings branches")}}
|
||||||
<div class="repo-setting-content">
|
<div class="repo-setting-content">
|
||||||
<h4 class="ui top attached header">
|
<h4 class="ui top attached header">
|
||||||
{{ctx.Locale.Tr "repo.settings.branch_protection" .Rule.RuleName}}
|
{{if .Rule.RuleName}}
|
||||||
|
{{ctx.Locale.Tr "repo.settings.branch_protection" .Rule.RuleName}}
|
||||||
|
{{else}}
|
||||||
|
{{ctx.Locale.Tr "repo.settings.protect_new_rule"}}
|
||||||
|
{{end}}
|
||||||
</h4>
|
</h4>
|
||||||
<form class="ui form attached segment" action="{{.Link}}" method="post">
|
<form class="ui form attached segment" action="{{.Link}}" method="post">
|
||||||
{{.CsrfTokenHtml}}
|
{{.CsrfTokenHtml}}
|
||||||
|
|
|
@ -31,6 +31,18 @@ test('repo branch protection settings', async ({browser}, workerInfo) => {
|
||||||
const response = await page.goto('/user2/repo1/settings/branches/edit');
|
const response = await page.goto('/user2/repo1/settings/branches/edit');
|
||||||
await expect(response?.status()).toBe(200);
|
await expect(response?.status()).toBe(200);
|
||||||
|
|
||||||
// not yet accessible :(
|
await validate_form({page}, 'fieldset');
|
||||||
// await validate_form({page}, 'fieldset');
|
|
||||||
|
// verify header is new
|
||||||
|
await expect(page.locator('h4')).toContainText('new');
|
||||||
|
await page.locator('input[name="rule_name"]').fill('testrule');
|
||||||
|
await page.getByText('Save rule').click();
|
||||||
|
// verify header is in edit mode
|
||||||
|
await page.waitForLoadState('networkidle');
|
||||||
|
await page.getByText('Edit').click();
|
||||||
|
await expect(page.locator('h4')).toContainText('Protection rules for branch');
|
||||||
|
// delete the rule for the next test
|
||||||
|
await page.goBack();
|
||||||
|
await page.getByText('Delete rule').click();
|
||||||
|
await page.getByText('Yes').click();
|
||||||
});
|
});
|
||||||
|
|
|
@ -4,9 +4,13 @@ import AxeBuilder from '@axe-core/playwright';
|
||||||
export async function validate_form({page}, scope) {
|
export async function validate_form({page}, scope) {
|
||||||
scope ??= 'form';
|
scope ??= 'form';
|
||||||
const accessibilityScanResults = await new AxeBuilder({page})
|
const accessibilityScanResults = await new AxeBuilder({page})
|
||||||
|
// disable checking for link style - should be fixed, but not now
|
||||||
|
.disableRules('link-in-text-block')
|
||||||
.include(scope)
|
.include(scope)
|
||||||
// exclude automated tooltips from accessibility scan, remove when fixed
|
// exclude automated tooltips from accessibility scan, remove when fixed
|
||||||
.exclude('span[data-tooltip-content')
|
.exclude('span[data-tooltip-content')
|
||||||
|
// exclude weird non-semantic HTML disabled content
|
||||||
|
.exclude('.disabled')
|
||||||
.analyze();
|
.analyze();
|
||||||
expect(accessibilityScanResults.violations).toEqual([]);
|
expect(accessibilityScanResults.violations).toEqual([]);
|
||||||
|
|
||||||
|
@ -17,4 +21,10 @@ export async function validate_form({page}, scope) {
|
||||||
await expect(b).toHaveCSS('margin-top', '0px');
|
await expect(b).toHaveCSS('margin-top', '0px');
|
||||||
await expect(b).toHaveCSS('vertical-align', 'baseline');
|
await expect(b).toHaveCSS('vertical-align', 'baseline');
|
||||||
}
|
}
|
||||||
|
// assert no (trailing) colon is used in labels
|
||||||
|
// might be necessary to adjust in case colons are strictly necessary in help text
|
||||||
|
for (const l of await page.locator('label').all()) {
|
||||||
|
const str = await l.textContent();
|
||||||
|
await expect(str.split('\n')[0]).not.toContain(':');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue