1
0
Fork 0
mirror of https://code.forgejo.org/forgejo/runner.git synced 2025-08-06 17:40:58 +00:00

fix: sum256 the container name so derivations do not overflow (#191)

For instance, the volume name derived from the workflow name may exceed the file system limit when the container name it is derived from is too long.

Fixes forgejo/runner#152

Reviewed-on: https://code.forgejo.org/forgejo/act/pulls/191
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Earl Warren <contact@earl-warren.org>
Co-committed-by: Earl Warren <contact@earl-warren.org>
This commit is contained in:
Earl Warren 2025-07-25 09:44:25 +00:00 committed by earl-warren
parent 7e1a84b400
commit 53e26e56b1
4 changed files with 28 additions and 5 deletions

13
act/common/sha256.go Normal file
View file

@ -0,0 +1,13 @@
// Copyright 2025 The Forgejo Authors
// SPDX-License-Identifier: MIT
package common
import (
"crypto/sha256"
"encoding/hex"
)
func Sha256(content string) string {
hashBytes := sha256.Sum256([]byte(content))
return hex.EncodeToString(hashBytes[:])
}

13
act/common/sha256_test.go Normal file
View file

@ -0,0 +1,13 @@
// Copyright 2025 The Forgejo Authors
// SPDX-License-Identifier: MIT
package common
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestSha256(t *testing.T) {
assert.Equal(t, "3fc9b689459d738f8c88a3a48aa9e33542016b7a4052e001aaa536fca74813cb", Sha256("something"))
}

View file

@ -1,8 +1,6 @@
package model
import (
"crypto/sha256"
"encoding/hex"
"errors"
"fmt"
"io"
@ -738,8 +736,7 @@ func (s *Step) Type() StepType {
}
func (s *Step) UsesHash() string {
hashBytes := sha256.Sum256([]byte(s.Uses))
hashString := hex.EncodeToString(hashBytes[:])
hashString := common.Sha256(s.Uses)
return filepath.Join(hashString[:2], hashString[2:])
}

View file

@ -94,7 +94,7 @@ func (rc *RunContext) GetEnv() map[string]string {
}
func (rc *RunContext) jobContainerName() string {
return createSimpleContainerName(rc.Config.ContainerNamePrefix, "WORKFLOW-"+rc.Run.Workflow.Name, "JOB-"+rc.Name)
return createSimpleContainerName(rc.Config.ContainerNamePrefix, "WORKFLOW-"+common.Sha256(rc.Run.Workflow.Name), "JOB-"+rc.Name)
}
// networkName return the name of the network which will be created by `act` automatically for job,