mirror of
https://codeberg.org/forgejo-aneksajo/forgejo-aneksajo.git
synced 2025-10-01 02:00:05 +02:00

**Backport: https://codeberg.org/forgejo/forgejo/pulls/8864** The status of two jobs by the same name shadow each other, they need to be distinct. If two jobs by the same name are found, they are made distinct by adding a -<occurence number> suffix. Resolves forgejo/forgejo#8648 (cherry picked from commit 6bc1803c70280b09af3e62bfc4000755faa36b42) ``` Conflicts: services/actions/notifier_helper.go services/actions/schedule_tasks.go services/actions/workflows.go trivial context conflicts services/actions/job_parser.go use "github.com/nektos/act/pkg/jobparser" ``` Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8883 Reviewed-by: Gusted <gusted@noreply.codeberg.org> Co-authored-by: Earl Warren <contact@earl-warren.org> Co-committed-by: Earl Warren <contact@earl-warren.org>
31 lines
977 B
Go
31 lines
977 B
Go
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package actions
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/nektos/act/pkg/jobparser"
|
|
)
|
|
|
|
func jobParser(workflow []byte, options ...jobparser.ParseOption) ([]*jobparser.SingleWorkflow, error) {
|
|
singleWorkflows, err := jobparser.Parse(workflow, options...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
nameToSingleWorkflows := make(map[string][]*jobparser.SingleWorkflow, len(singleWorkflows))
|
|
duplicates := make(map[string]int, len(singleWorkflows))
|
|
for _, singleWorkflow := range singleWorkflows {
|
|
id, job := singleWorkflow.Job()
|
|
nameToSingleWorkflows[job.Name] = append(nameToSingleWorkflows[job.Name], singleWorkflow)
|
|
if len(nameToSingleWorkflows[job.Name]) > 1 {
|
|
duplicates[job.Name]++
|
|
job.Name = fmt.Sprintf("%s-%d", job.Name, duplicates[job.Name])
|
|
if err := singleWorkflow.SetJob(id, job); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
}
|
|
return singleWorkflows, nil
|
|
}
|