Merge pull request '[v8.0/forgejo] Fixes an visual bug where the info box to dispatch a workflow is shown even for users that lack permissions to actualy run the workflow.' (#4364) from bp-v8.0/forgejo-98c8d45 into v8.0/forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4364
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
This commit is contained in:
Earl Warren 2024-07-06 06:21:56 +00:00
commit e269d405d0
2 changed files with 13 additions and 2 deletions

View file

@ -95,6 +95,8 @@ func List(ctx *context.Context) {
allRunnerLabels.AddMultiple(r.AgentLabels...) allRunnerLabels.AddMultiple(r.AgentLabels...)
} }
canRun := ctx.Repo.CanWrite(unit.TypeActions)
workflows = make([]Workflow, 0, len(entries)) workflows = make([]Workflow, 0, len(entries))
for _, entry := range entries { for _, entry := range entries {
workflow := Workflow{Entry: *entry} workflow := Workflow{Entry: *entry}
@ -146,7 +148,7 @@ func List(ctx *context.Context) {
} }
workflows = append(workflows, workflow) workflows = append(workflows, workflow)
if workflow.Entry.Name() == curWorkflow { if canRun && workflow.Entry.Name() == curWorkflow {
config := wf.WorkflowDispatchConfig() config := wf.WorkflowDispatchConfig()
if config != nil { if config != nil {
keys := util.KeysOfMap(config.Inputs) keys := util.KeysOfMap(config.Inputs)

View file

@ -6,6 +6,8 @@ test.beforeAll(async ({browser}, workerInfo) => {
await login_user(browser, workerInfo, 'user2'); await login_user(browser, workerInfo, 'user2');
}); });
const workflow_trigger_notification_text = 'This workflow has a workflow_dispatch event trigger.';
test('Test workflow dispatch present', async ({browser}, workerInfo) => { test('Test workflow dispatch present', async ({browser}, workerInfo) => {
const context = await load_logged_in_context(browser, workerInfo, 'user2'); const context = await load_logged_in_context(browser, workerInfo, 'user2');
/** @type {import('@playwright/test').Page} */ /** @type {import('@playwright/test').Page} */
@ -13,7 +15,7 @@ test('Test workflow dispatch present', async ({browser}, workerInfo) => {
await page.goto('/user2/test_workflows/actions?workflow=test-dispatch.yml&actor=0&status=0'); await page.goto('/user2/test_workflows/actions?workflow=test-dispatch.yml&actor=0&status=0');
await expect(page.getByText('This workflow has a workflow_dispatch event trigger.')).toBeVisible(); await expect(page.getByText(workflow_trigger_notification_text)).toBeVisible();
const run_workflow_btn = page.locator('#workflow_dispatch_dropdown>button'); const run_workflow_btn = page.locator('#workflow_dispatch_dropdown>button');
await expect(run_workflow_btn).toBeVisible(); await expect(run_workflow_btn).toBeVisible();
@ -72,3 +74,10 @@ test('Test workflow dispatch success', async ({browser}, workerInfo) => {
await expect(page.locator('.run-list>:first-child .run-list-meta', {hasText: 'now'})).toBeVisible(); await expect(page.locator('.run-list>:first-child .run-list-meta', {hasText: 'now'})).toBeVisible();
}); });
test('Test workflow dispatch box not available for unauthenticated users', async ({page}) => {
await page.goto('/user2/test_workflows/actions?workflow=test-dispatch.yml&actor=0&status=0');
await page.waitForLoadState('networkidle');
await expect(page.locator('body')).not.toContainText(workflow_trigger_notification_text);
});