From f147e45da3b29e555527cd178a5c07f1240aeb62 Mon Sep 17 00:00:00 2001 From: ChristopherHX Date: Tue, 5 Mar 2024 07:04:54 +0100 Subject: [PATCH 1/3] fix: docker buildx cache restore not working --- act/artifactcache/handler.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/act/artifactcache/handler.go b/act/artifactcache/handler.go index c48bb1a9..28bacec5 100644 --- a/act/artifactcache/handler.go +++ b/act/artifactcache/handler.go @@ -431,7 +431,12 @@ func findCache(db *bolthold.Store, repo string, keys []string, version string) ( return nil, fmt.Errorf("find cache: %w", err) } return cache, nil + } else if cache.Complete { + return cache, nil } + } + + for _, prefix := range keys { prefixPattern := fmt.Sprintf("^%s", regexp.QuoteMeta(prefix)) re, err := regexp.Compile(prefixPattern) if err != nil { From 2110aed6c7ac69d45c86ea6f3546118fe0b711b9 Mon Sep 17 00:00:00 2001 From: huajin tong <137764712+thirdkeyword@users.noreply.github.com> Date: Wed, 6 Mar 2024 22:20:06 +0800 Subject: [PATCH 2/3] fix function name in comment (#2240) Signed-off-by: thirdkeyword (cherry picked from commit 71ae39085eb9ed060ac55b45e55147489faaefa2) --- act/model/workflow.go | 4 ++-- act/runner/expression.go | 2 +- act/runner/logger.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/act/model/workflow.go b/act/model/workflow.go index eda6e089..465fdf1b 100644 --- a/act/model/workflow.go +++ b/act/model/workflow.go @@ -367,7 +367,7 @@ func environment(yml yaml.Node) map[string]string { return env } -// Environments returns string-based key=value map for a job +// Environment returns string-based key=value map for a job func (j *Job) Environment() map[string]string { return environment(j.Env) } @@ -604,7 +604,7 @@ func (s *Step) String() string { return s.ID } -// Environments returns string-based key=value map for a step +// Environment returns string-based key=value map for a step func (s *Step) Environment() map[string]string { return environment(s.Env) } diff --git a/act/runner/expression.go b/act/runner/expression.go index ae3f145c..ef89fceb 100644 --- a/act/runner/expression.go +++ b/act/runner/expression.go @@ -106,7 +106,7 @@ func (rc *RunContext) NewExpressionEvaluatorWithEnv(ctx context.Context, env map //go:embed hashfiles/index.js var hashfiles string -// NewExpressionEvaluator creates a new evaluator +// NewStepExpressionEvaluator creates a new evaluator func (rc *RunContext) NewStepExpressionEvaluator(ctx context.Context, step step) ExpressionEvaluator { // todo: cleanup EvaluationEnvironment creation job := rc.Run.Job() diff --git a/act/runner/logger.go b/act/runner/logger.go index 68902931..ef93a02b 100644 --- a/act/runner/logger.go +++ b/act/runner/logger.go @@ -52,7 +52,7 @@ func Masks(ctx context.Context) *[]string { return &[]string{} } -// WithLogger adds a value to the context for the logger +// WithMasks adds a value to the context for the logger func WithMasks(ctx context.Context, masks *[]string) context.Context { return context.WithValue(ctx, masksContextKeyVal, masks) } From 868a1f9239ba2508d8e1574269677b92dd6509d5 Mon Sep 17 00:00:00 2001 From: ChristopherHX Date: Fri, 8 Mar 2024 02:25:03 +0100 Subject: [PATCH 3/3] fix: rootless permission bits (new actions cache) (#2242) * fix: rootless permission bits (new actions cache) * add test * fix lint / more tests (cherry picked from commit d8fc9bade3403d72f4d5a47e103660b462630f48) --- act/container/docker_run.go | 2 +- act/container/docker_run_test.go | 79 ++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) diff --git a/act/container/docker_run.go b/act/container/docker_run.go index d7f54d35..02e4dbfb 100644 --- a/act/container/docker_run.go +++ b/act/container/docker_run.go @@ -776,7 +776,7 @@ func (cr *containerReference) CopyTarStream(ctx context.Context, destPath string tw := tar.NewWriter(buf) _ = tw.WriteHeader(&tar.Header{ Name: destPath, - Mode: 777, + Mode: 0o777, Typeflag: tar.TypeDir, }) tw.Close() diff --git a/act/container/docker_run_test.go b/act/container/docker_run_test.go index 7383864a..14af789f 100644 --- a/act/container/docker_run_test.go +++ b/act/container/docker_run_test.go @@ -2,7 +2,9 @@ package container import ( "bufio" + "bytes" "context" + "fmt" "io" "net" "strings" @@ -83,6 +85,11 @@ func (m *mockDockerClient) ContainerExecInspect(ctx context.Context, execID stri return args.Get(0).(types.ContainerExecInspect), args.Error(1) } +func (m *mockDockerClient) CopyToContainer(ctx context.Context, id string, path string, content io.Reader, options types.CopyToContainerOptions) error { + args := m.Called(ctx, id, path, content, options) + return args.Error(0) +} + type endlessReader struct { io.Reader } @@ -173,6 +180,78 @@ func TestDockerExecFailure(t *testing.T) { client.AssertExpectations(t) } +func TestDockerCopyTarStream(t *testing.T) { + ctx := context.Background() + + conn := &mockConn{} + + client := &mockDockerClient{} + client.On("CopyToContainer", ctx, "123", "/", mock.Anything, mock.AnythingOfType("types.CopyToContainerOptions")).Return(nil) + client.On("CopyToContainer", ctx, "123", "/var/run/act", mock.Anything, mock.AnythingOfType("types.CopyToContainerOptions")).Return(nil) + cr := &containerReference{ + id: "123", + cli: client, + input: &NewContainerInput{ + Image: "image", + }, + } + + _ = cr.CopyTarStream(ctx, "/var/run/act", &bytes.Buffer{}) + + conn.AssertExpectations(t) + client.AssertExpectations(t) +} + +func TestDockerCopyTarStreamErrorInCopyFiles(t *testing.T) { + ctx := context.Background() + + conn := &mockConn{} + + merr := fmt.Errorf("Failure") + + client := &mockDockerClient{} + client.On("CopyToContainer", ctx, "123", "/", mock.Anything, mock.AnythingOfType("types.CopyToContainerOptions")).Return(merr) + client.On("CopyToContainer", ctx, "123", "/", mock.Anything, mock.AnythingOfType("types.CopyToContainerOptions")).Return(merr) + cr := &containerReference{ + id: "123", + cli: client, + input: &NewContainerInput{ + Image: "image", + }, + } + + err := cr.CopyTarStream(ctx, "/var/run/act", &bytes.Buffer{}) + assert.ErrorIs(t, err, merr) + + conn.AssertExpectations(t) + client.AssertExpectations(t) +} + +func TestDockerCopyTarStreamErrorInMkdir(t *testing.T) { + ctx := context.Background() + + conn := &mockConn{} + + merr := fmt.Errorf("Failure") + + client := &mockDockerClient{} + client.On("CopyToContainer", ctx, "123", "/", mock.Anything, mock.AnythingOfType("types.CopyToContainerOptions")).Return(nil) + client.On("CopyToContainer", ctx, "123", "/var/run/act", mock.Anything, mock.AnythingOfType("types.CopyToContainerOptions")).Return(merr) + cr := &containerReference{ + id: "123", + cli: client, + input: &NewContainerInput{ + Image: "image", + }, + } + + err := cr.CopyTarStream(ctx, "/var/run/act", &bytes.Buffer{}) + assert.ErrorIs(t, err, merr) + + conn.AssertExpectations(t) + client.AssertExpectations(t) +} + // Type assert containerReference implements ExecutionsEnvironment var _ ExecutionsEnvironment = &containerReference{}