feat: add internal reproducible git checksum builtin (#203)
Adds a new rego builtin `attest.internals.reproducible_git_checksum`. This is needed for verifying DOI provenance, see https://github.com/docker/doi-image-policy/blob/main/slsa.md#doi-build-reproducible-git-checksum. We use https://github.com/go-git/go-git for as much of this as possible, but it doesn't support the actual archive operation, so we shell out to `git` for that. There is some similar unexported code in bashbrew, and we should probably be using the same code in the build process as we are here. I'll create a follow-up ticket to sort that out.
This commit is contained in:
42
internal/git/git_test.go
Normal file
42
internal/git/git_test.go
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright Docker attest authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package git
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"os/exec"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestArchiveWithInvalidGitCommand(t *testing.T) {
|
||||
originalGitCommand := GitCommand
|
||||
GitCommand = "invalid-git-command"
|
||||
defer func() { GitCommand = originalGitCommand }()
|
||||
|
||||
tempDir, err := os.MkdirTemp("", "gitrepo")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create temp dir: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(tempDir)
|
||||
|
||||
ctx := context.Background()
|
||||
_, err = Archive(ctx, tempDir, "")
|
||||
require.ErrorIs(t, err, exec.ErrNotFound)
|
||||
}
|
||||
Reference in New Issue
Block a user