Skip to content

Commit 182bef3

Browse files
Rustc binary hash (#14)
* add rustc binary hash to artifact key * extra env vars to artifact metadata * fix tests
1 parent 2d5f474 commit 182bef3

File tree

8 files changed

+51
-12
lines changed

8 files changed

+51
-12
lines changed

.github/workflows/build-cargo.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ jobs:
5757
uses: actions/checkout@v4
5858
with:
5959
repository: rust-lang/cargo
60-
ref: rust-1.77.0
60+
ref: rust-1.88.0
6161
path: ./cargo-1
6262
- run: cp -r .forklift ./cargo-1
6363
- name: build cargo
@@ -68,7 +68,7 @@ jobs:
6868
uses: actions/checkout@v4
6969
with:
7070
repository: rust-lang/cargo
71-
ref: rust-1.77.0
71+
ref: rust-1.88.0
7272
path: ./cargo-2
7373
- run: cp -r .forklift ./cargo-2
7474
- name: build cargo

Commands/Wrapper/Wrapper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func Run(args []string) {
3030

3131
WorkDir = wd
3232

33-
var wrapperTool = Rustc.NewWrapperToolFromArgs(WorkDir, &rustcArgsOnly)
33+
var wrapperTool = Rustc.NewWrapperToolFromArgs(WorkDir, args)
3434

3535
logger := Logging.CreateLogger("Wrapper", 4, log.Fields{
3636
"crate": wrapperTool.CrateName,

FileManager/Models/Models.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ type CacheItem struct {
1919
RustCArgsHash string
2020
CrateExternDepsChecksum string
2121
CrateNativeDepsChecksum string
22+
RustCBinHash string
2223
}

Lib/Config/Config.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ var AppConfig = ForkliftConfig{
3131
ExtraLabels: map[string]string{},
3232
},
3333
Cache: ForkliftCache{
34-
ExtraEnv: []string{},
34+
ExtraEnv: []string{},
35+
ExtraMetadata: map[string]string{},
3536
},
3637
}
3738

Lib/Config/Models.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ type ForkliftStorage struct {
1414
}
1515

1616
type ForkliftCache struct {
17-
ExtraEnv []string
17+
ExtraEnv []string
18+
ExtraMetadata map[string]string
1819
}
1920

2021
type ForkliftCompression struct {

Lib/Rustc/Rustc_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func TestCmdTool_GetExternDeps(t *testing.T) {
3030

3131
func TestWrapperTool_WriteStderrFile(t *testing.T) {
3232
var wd, _ = os.Getwd()
33-
var wrapper = Rustc.NewWrapperToolFromArgs(wd, &[]string{})
33+
var wrapper = Rustc.NewWrapperToolFromArgs(wd, []string{"aaaa", "bbbb"})
3434

3535
var data = "{\"artifact\":\"deps/base64-a62ed92405ecbfa1.d\",\"emit\":\"dep-info\"}"
3636
var expectedData = "{\"artifact\":\"base64-a62ed92405ecbfa1.d\",\"emit\":\"dep-info\"}\n"
@@ -59,7 +59,7 @@ func TestWrapperTool_WriteStderrFile(t *testing.T) {
5959

6060
func TestWrapperTool_ReadStderrFile(t *testing.T) {
6161
var wd, _ = os.Getwd()
62-
var wrapper = Rustc.NewWrapperToolFromArgs(wd, &[]string{"-a", "b"})
62+
var wrapper = Rustc.NewWrapperToolFromArgs(wd, []string{"-a", "b"})
6363

6464
var dataBytes, _ = json.Marshal(Rustc.Artifact{
6565
Artifact: filepath.Join("target", "deps", "base64-a62ed92405ecbfa1.d"),

Lib/Rustc/WrapperTool.go

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
"strings"
2424
)
2525

26-
const CachePackageVersion = "3"
26+
const CachePackageVersion = "4"
2727

2828
var cargoHashRegex = regexp.MustCompile("^metadata=([0-9a-f]{16})$")
2929

@@ -40,18 +40,22 @@ type WrapperTool struct {
4040
osWorkDir string
4141
CrateExternDepsChecksum string
4242
CrateNativeDepsChecksum string
43+
RustCBinHash string
4344

4445
cachePackageName string
4546
}
4647

47-
func NewWrapperToolFromArgs(workDir string, rustArgs *[]string) *WrapperTool {
48+
func NewWrapperToolFromArgs(workDir string, rustcCommand []string) *WrapperTool {
4849
var wrapper = WrapperTool{}
49-
wrapper.rustcArgs = rustArgs
50+
var rustcArgs = rustcCommand[1:]
5051

51-
wrapper.CrateName, wrapper.CargoCrateHash, wrapper.OutDir = wrapper.extractNameMetaHashDir(rustArgs)
52+
wrapper.rustcArgs = &rustcArgs
53+
54+
wrapper.CrateName, wrapper.CargoCrateHash, wrapper.OutDir = wrapper.extractNameMetaHashDir(wrapper.rustcArgs)
5255
wrapper.workDir = workDir
5356
wrapper.OutDir = FileManager.GetTrueRelFilePath(wrapper.workDir, wrapper.OutDir)
54-
wrapper.RustCArgsHash = GetArgsHash(rustArgs, wrapper.workDir)
57+
wrapper.RustCArgsHash = GetArgsHash(wrapper.rustcArgs, wrapper.workDir)
58+
wrapper.RustCBinHash = GetRustcBinHash(rustcCommand[0])
5559

5660
wrapper.ExternDepsChecksum()
5761

@@ -69,13 +73,30 @@ func NewWrapperToolFromCacheItem(workDir string, item Models.CacheItem) *Wrapper
6973
wrapper.workDir = workDir
7074
wrapper.CrateSourceChecksum = item.CrateSourceChecksum
7175
wrapper.RustCArgsHash = item.RustCArgsHash
76+
wrapper.RustCBinHash = item.RustCBinHash
7277

7378
wrapper.CrateExternDepsChecksum = item.CrateExternDepsChecksum
7479
wrapper.CrateNativeDepsChecksum = item.CrateNativeDepsChecksum
7580

7681
return &wrapper
7782
}
7883

84+
func GetRustcBinHash(path string) string {
85+
f, err := os.Open(path)
86+
if err != nil {
87+
log.Fatalf(err.Error())
88+
}
89+
90+
var sha = sha1.New()
91+
_, _ = io.Copy(sha, f)
92+
93+
err = f.Close()
94+
if err != nil {
95+
log.Fatalf(err.Error())
96+
}
97+
return fmt.Sprintf("%x", sha.Sum(nil))
98+
}
99+
79100
func GetArgsHash(args *[]string, toRemove string) string {
80101
var sha = sha1.New()
81102
for _, arg := range *args {
@@ -238,6 +259,7 @@ func (wrapperTool *WrapperTool) GetCachePackageName() string {
238259
sha.Write([]byte(wrapperTool.CrateSourceChecksum))
239260
sha.Write([]byte(wrapperTool.OutDir))
240261
sha.Write([]byte(wrapperTool.RustCArgsHash))
262+
sha.Write([]byte(wrapperTool.RustCBinHash))
241263
sha.Write([]byte(wrapperTool.ExternDepsChecksum()))
242264

243265
sha.Write(wrapperTool.ExtraEnvVarsChecksum())
@@ -263,6 +285,7 @@ func (wrapperTool *WrapperTool) ToCacheItem() Models.CacheItem {
263285
OutDir: wrapperTool.OutDir,
264286
CrateSourceChecksum: wrapperTool.CrateSourceChecksum,
265287
RustCArgsHash: wrapperTool.RustCArgsHash,
288+
RustCBinHash: wrapperTool.RustCBinHash,
266289

267290
CrateExternDepsChecksum: wrapperTool.CrateExternDepsChecksum,
268291
CrateNativeDepsChecksum: wrapperTool.CrateNativeDepsChecksum,
@@ -396,6 +419,7 @@ func (wrapperTool *WrapperTool) CreateMetadata() map[string]*string {
396419
"cargo-hash": &wrapperTool.CargoCrateHash,
397420
"sha1-source-files": &wrapperTool.CrateSourceChecksum,
398421
"sha1-rustc-args": &wrapperTool.RustCArgsHash,
422+
"sha1-rustc-bin": &wrapperTool.RustCBinHash,
399423
"sha1-extern-deps": &wrapperTool.CrateExternDepsChecksum,
400424
"sha1-native-deps": &wrapperTool.CrateNativeDepsChecksum,
401425
}

Rpc/Uploader.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ import (
88
"forklift/CacheStorage/Storages"
99
"forklift/FileManager/Models"
1010
"forklift/FileManager/Tar"
11+
"forklift/Lib/Config"
1112
"forklift/Lib/Diagnostic/Time"
1213
"forklift/Lib/Logging"
1314
log "forklift/Lib/Logging/ConsoleLogger"
1415
"forklift/Lib/Rustc"
1516
"forklift/Rpc/Models/CacheUpload"
17+
"os"
1618
"path"
1719
"path/filepath"
1820
"strings"
@@ -132,6 +134,16 @@ func (uploader *Uploader) TryUpload(
132134
var shaLocal = fmt.Sprintf("%x", sha.Sum(nil))
133135
metaMap["sha1-artifact"] = &shaLocal
134136

137+
for key, value := range Config.AppConfig.Cache.ExtraMetadata {
138+
if value[0] == '$' {
139+
if data, ok := os.LookupEnv(value[1:]); ok {
140+
metaMap[key] = &data
141+
}
142+
} else {
143+
metaMap[key] = &value
144+
}
145+
}
146+
135147
timer.Start("Compress time")
136148
compressed, err := uploader.compressor.Compress(reader)
137149
statusReport.CompressTime += timer.Stop("Compress time")

0 commit comments

Comments
 (0)