Bugfixes for hashing

This commit is contained in:
Radon Rosborough 2021-03-21 21:53:22 -07:00
parent b986cf69af
commit 1672e42960
3 changed files with 58 additions and 15 deletions

View File

@ -743,7 +743,7 @@ async function main() {
await fs.mkdir(`build/test-hashes/lang`, { recursive: true }); await fs.mkdir(`build/test-hashes/lang`, { recursive: true });
await fs.writeFile( await fs.writeFile(
`build/test-hashes/lang/${lang}`, `build/test-hashes/lang/${lang}`,
await getTestHash(lang) await getTestHash(lang, process.env.RIJU_IMAGE_HASH)
); );
} }
process.exit(failed.size > 0 ? 1 : 0); process.exit(failed.size > 0 ? 1 : 0);

View File

@ -75,9 +75,11 @@ async function getTestConfigHash(lang) {
return crypto.createHash("sha1").update(JSON.stringify(config)).digest("hex"); return crypto.createHash("sha1").update(JSON.stringify(config)).digest("hex");
} }
export async function getTestHash(lang) { export async function getTestHash(lang, imageHash) {
return crypto return crypto
.createHash("sha1") .createHash("sha1")
.update(`${await testRunnerHash},${await getTestConfigHash(lang)}`) .update(
`${await testRunnerHash},${await getTestConfigHash(lang)},${imageHash}`
)
.digest("hex"); .digest("hex");
} }

View File

@ -102,16 +102,18 @@ async function getImageArtifact({ tag, isBaseImage, isLangImage }) {
return null; return null;
} }
const dependentDockerHashes = {}; const dependentDockerHashes = {};
for (const baseImageTag of baseImageTag) { for (const baseImageTag of baseImageTags) {
dependentDockerHashes[`riju:${baseImageTag}`] = dependentDockerHashes[`riju:${baseImageTag}`] =
dependencyHashes[`image:${baseImageTag}`]; dependencyHashes[`image:${baseImageTag}`];
} }
const salt = null; let salt = null;
if (isLangImage) { if (isLangImage) {
salt.langHash = dependencyHashes[`deb:lang-${isLangImage.lang}`]; salt = {
salt.sharedHashes = isLangImage.sharedDeps.map( langHash: dependencyHashes[`deb:lang-${isLangImage.lang}`],
(name) => dependencyHashes[`deb:shared-${name}`] sharedHashes: isLangImage.sharedDeps.map(
); (name) => dependencyHashes[`deb:shared-${name}`]
),
};
} }
return await hashDockerfile(name, dependentDockerHashes, { salt }); return await hashDockerfile(name, dependentDockerHashes, { salt });
}, },
@ -151,13 +153,12 @@ async function getDebArtifact({ type, lang }) {
getPublishedHash: async ({ s3DebHashes }) => { getPublishedHash: async ({ s3DebHashes }) => {
return s3DebHashes[`riju-${type}-${lang}`] || null; return s3DebHashes[`riju-${type}-${lang}`] || null;
}, },
getDesiredHash: async () => { getDesiredHash: async (dependencyHashes) => {
let contents = await fs.readFile( let contents = await fs.readFile(
`build/${type}/${lang}/build.bash`, `build/${type}/${lang}/build.bash`,
"utf-8" "utf-8"
); );
contents += contents += dependencyHashes["image:packaging"] + "\n";
(await getLocalImageLabel("riju:packaging", "riju.image-hash")) + "\n";
return crypto.createHash("sha1").update(contents).digest("hex"); return crypto.createHash("sha1").update(contents).digest("hex");
}, },
buildLocally: async () => { buildLocally: async () => {
@ -198,8 +199,8 @@ async function getLanguageTestArtifact({ lang }) {
getPublishedHash: async ({ s3TestHashes }) => { getPublishedHash: async ({ s3TestHashes }) => {
return s3TestHashes[lang]; return s3TestHashes[lang];
}, },
getDesiredHash: async () => { getDesiredHash: async (dependencyHashes) => {
return await getTestHash(lang); return await getTestHash(lang, dependencyHashes["image:runtime"]);
}, },
buildLocally: async () => { buildLocally: async () => {
await runCommand(`make shell I=runtime CMD="make test L=${lang}"`); await runCommand(`make shell I=runtime CMD="make test L=${lang}"`);
@ -296,7 +297,47 @@ async function executeDepGraph({ depgraph, publish, yes, targets }) {
artifacts[artifact.name] = artifact; artifacts[artifact.name] = artifact;
} }
const transitiveTargets = getTransitiveDependencies({ artifacts, targets }); const transitiveTargets = getTransitiveDependencies({ artifacts, targets });
console.log(transitiveTargets); const requiredInfo = new Set();
for (const target of transitiveTargets) {
for (const name of Object.values(
artifacts[target].informationalDependencies || {}
)) {
requiredInfo.add(name);
}
}
const info = {};
await Promise.all(
[...requiredInfo].map(async (name) => {
info[name] = await depgraph.informationalDependencies[name]();
})
);
const hashes = {
local: {},
published: {},
desired: {},
};
await Promise.all(
transitiveTargets.map(async (target) => {
const {
publishOnly,
getLocalHash,
getPublishedHash,
getDesiredHash,
} = artifacts[target];
await Promise.all([
getLocalHash(info).then((hash) => {
hashes.local[target] = hash;
}),
getPublishedHash(info).then((hash) => {
hashes.published[target] = hash;
}),
getDesiredHash(info).then((hash) => {
hashes.desired[target] = hash;
}),
]);
})
);
console.log(hashes);
} }
async function main() { async function main() {