mirror of
https://github.com/go-gitea/gitea.git
synced 2025-06-10 04:44:39 +02:00
This addresses https://github.com/go-gitea/gitea/issues/34247 depends on https://gitea.com/gitea/act/pulls/137 I couldn't find any previous implementation for `run-name` support on workflows so I created one. Key points: All dispatched workflows, scheduled workflows and detected workflows (from different hooks) will use and evaluate `run-name` if exists, with the corresponding gitea context and variables. This will be used as the Action run title and replace the default commit message being used today. Had to change act package jobparser (see link above) and create two helpers3a1320c70d/models/actions/utils.go (L86)
and3a1320c70d/services/actions/context.go (L169)
to pass the correct types to [GenerateGiteaContext](https://github.com/go-gitea/gitea/pull/34301/files#diff-9c9c27cb61a33e55ad33dc2c2e6a3521957a3e5cc50ddf652fdcd1def87b044dR86) and [WithGitContext](65c232c4a5/pkg/jobparser/jobparser.go (L84)
) respectively. <img width="1336" alt="Screenshot 2025-04-28 at 17 13 01" src="https://github.com/user-attachments/assets/73cb03d0-23a0-4858-a466-bbf0748cea98" />
104 lines
2.8 KiB
Go
104 lines
2.8 KiB
Go
// Copyright 2022 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package actions
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/binary"
|
|
"encoding/hex"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"time"
|
|
|
|
auth_model "code.gitea.io/gitea/models/auth"
|
|
"code.gitea.io/gitea/modules/timeutil"
|
|
"code.gitea.io/gitea/modules/util"
|
|
)
|
|
|
|
func generateSaltedToken() (string, string, string, string, error) {
|
|
salt, err := util.CryptoRandomString(10)
|
|
if err != nil {
|
|
return "", "", "", "", err
|
|
}
|
|
buf, err := util.CryptoRandomBytes(20)
|
|
if err != nil {
|
|
return "", "", "", "", err
|
|
}
|
|
token := hex.EncodeToString(buf)
|
|
hash := auth_model.HashToken(token, salt)
|
|
return token, salt, hash, token[len(token)-8:], nil
|
|
}
|
|
|
|
/*
|
|
LogIndexes is the index for mapping log line number to buffer offset.
|
|
Because it uses varint encoding, it is impossible to predict its size.
|
|
But we can make a simple estimate with an assumption that each log line has 200 byte, then:
|
|
| lines | file size | index size |
|
|
|-----------|---------------------|--------------------|
|
|
| 100 | 20 KiB(20000) | 258 B(258) |
|
|
| 1000 | 195 KiB(200000) | 2.9 KiB(2958) |
|
|
| 10000 | 1.9 MiB(2000000) | 34 KiB(34715) |
|
|
| 100000 | 19 MiB(20000000) | 386 KiB(394715) |
|
|
| 1000000 | 191 MiB(200000000) | 4.1 MiB(4323626) |
|
|
| 10000000 | 1.9 GiB(2000000000) | 47 MiB(49323626) |
|
|
| 100000000 | 19 GiB(20000000000) | 490 MiB(513424280) |
|
|
*/
|
|
type LogIndexes []int64
|
|
|
|
func (indexes *LogIndexes) FromDB(b []byte) error {
|
|
reader := bytes.NewReader(b)
|
|
for {
|
|
v, err := binary.ReadVarint(reader)
|
|
if err != nil {
|
|
if errors.Is(err, io.EOF) {
|
|
return nil
|
|
}
|
|
return fmt.Errorf("binary ReadVarint: %w", err)
|
|
}
|
|
*indexes = append(*indexes, v)
|
|
}
|
|
}
|
|
|
|
func (indexes *LogIndexes) ToDB() ([]byte, error) {
|
|
buf, i := make([]byte, binary.MaxVarintLen64*len(*indexes)), 0
|
|
for _, v := range *indexes {
|
|
n := binary.PutVarint(buf[i:], v)
|
|
i += n
|
|
}
|
|
return buf[:i], nil
|
|
}
|
|
|
|
var timeSince = time.Since
|
|
|
|
func calculateDuration(started, stopped timeutil.TimeStamp, status Status) time.Duration {
|
|
if started == 0 {
|
|
return 0
|
|
}
|
|
s := started.AsTime()
|
|
if status.IsDone() {
|
|
return stopped.AsTime().Sub(s)
|
|
}
|
|
return timeSince(s).Truncate(time.Second)
|
|
}
|
|
|
|
// best effort function to convert an action schedule to action run, to be used in GenerateGiteaContext
|
|
func (s *ActionSchedule) ToActionRun() *ActionRun {
|
|
return &ActionRun{
|
|
Title: s.Title,
|
|
RepoID: s.RepoID,
|
|
Repo: s.Repo,
|
|
OwnerID: s.OwnerID,
|
|
WorkflowID: s.WorkflowID,
|
|
TriggerUserID: s.TriggerUserID,
|
|
TriggerUser: s.TriggerUser,
|
|
Ref: s.Ref,
|
|
CommitSHA: s.CommitSHA,
|
|
Event: s.Event,
|
|
EventPayload: s.EventPayload,
|
|
Created: s.Created,
|
|
Updated: s.Updated,
|
|
}
|
|
}
|