diff --git a/dist/index.js b/dist/index.js index 95165f65..29cb40ff 100644 --- a/dist/index.js +++ b/dist/index.js @@ -31660,8 +31660,10 @@ async function parse3(commitMessage, body, branchName, mainBranch, lookup, getSc nameCounters.set(dependencyName, nameIndex + 1); const updatedVersionList = updatedVersions.get(dependencyName); const updatedVersion = updatedVersionList?.[nameIndex]; - const lastVersion = updatedVersion?.prevVersion || (index === 0 ? prev : ""); - const nextVersion = dependency["dependency-version"] || updatedVersion?.newVersion || (index === 0 ? next : ""); + const dependencyVersion = dependency["dependency-version"]; + const isDockerDigestOnlyUpdate = chunks[1] === "docker" && !!dependencyVersion && !dependency["update-type"] && isMarkdownCodeSpan(updatedVersion?.prevVersion) && isMarkdownCodeSpan(updatedVersion?.newVersion); + const lastVersion = isDockerDigestOnlyUpdate ? dependencyVersion : updatedVersion?.prevVersion || (index === 0 ? prev : ""); + const nextVersion = dependencyVersion || updatedVersion?.newVersion || (index === 0 ? next : ""); const updateType = dependency["update-type"] || calculateUpdateType(lastVersion, nextVersion); return { dependencyName: dependency["dependency-name"], @@ -31704,6 +31706,9 @@ function parseMetadataLinks(commitMessage) { } return updates; } +function isMarkdownCodeSpan(value) { + return !!value && value.startsWith("`") && value.endsWith("`"); +} function calculateUpdateType(lastVersion, nextVersion) { if (!lastVersion || !nextVersion || lastVersion === nextVersion) { return ""; diff --git a/src/dependabot/update_metadata.test.ts b/src/dependabot/update_metadata.test.ts index 4e23f025..83d6db21 100644 --- a/src/dependabot/update_metadata.test.ts +++ b/src/dependabot/update_metadata.test.ts @@ -536,6 +536,31 @@ updated-dependencies: expect(updatedDependencies[1].newVersion).toEqual('1.27.1') }) +test('it handles Docker digest-only updates without classifying the tag as changed', async () => { + const commitMessage = `Bumps the docker group with 1 update: shawntoffel/dependabot-digest-test. + + +Updates \`shawntoffel/dependabot-digest-test\` from \`e1b523f\` to \`5fdf1f3\` + +--- +updated-dependencies: +- dependency-name: shawntoffel/dependabot-digest-test + dependency-version: 1.0-alpine3.24 + dependency-type: direct:production + dependency-group: docker +... + +Signed-off-by: dependabot[bot] +` + const updatedDependencies = await updateMetadata.parse(commitMessage, '', 'dependabot/docker/docker-2b208d09c0', 'master') + + expect(updatedDependencies).toHaveLength(1) + expect(updatedDependencies[0].dependencyName).toEqual('shawntoffel/dependabot-digest-test') + expect(updatedDependencies[0].updateType).toEqual('') + expect(updatedDependencies[0].prevVersion).toEqual('1.0-alpine3.24') + expect(updatedDependencies[0].newVersion).toEqual('1.0-alpine3.24') +}) + test('it handles new versions from YAML', async () => { const commitMessage = `Bump the non-breaking group in /log4j-parent with 2 updates diff --git a/src/dependabot/update_metadata.ts b/src/dependabot/update_metadata.ts index c8e4b85b..144d202e 100644 --- a/src/dependabot/update_metadata.ts +++ b/src/dependabot/update_metadata.ts @@ -98,8 +98,15 @@ export async function parse (commitMessage: string, body: string, branchName: st nameCounters.set(dependencyName, nameIndex + 1) const updatedVersionList = updatedVersions.get(dependencyName) const updatedVersion = updatedVersionList?.[nameIndex] - const lastVersion = updatedVersion?.prevVersion || (index === 0 ? prev : '') - const nextVersion = dependency['dependency-version'] || updatedVersion?.newVersion || (index === 0 ? next : '') + const dependencyVersion = dependency['dependency-version'] + // Digest-only Docker updates code-format the digests while dependency-version contains the unchanged tag. + const isDockerDigestOnlyUpdate = chunks[1] === 'docker' && + !!dependencyVersion && + !dependency['update-type'] && + isMarkdownCodeSpan(updatedVersion?.prevVersion) && + isMarkdownCodeSpan(updatedVersion?.newVersion) + const lastVersion = isDockerDigestOnlyUpdate ? dependencyVersion : updatedVersion?.prevVersion || (index === 0 ? prev : '') + const nextVersion = dependencyVersion || updatedVersion?.newVersion || (index === 0 ? next : '') const updateType = dependency['update-type'] || calculateUpdateType(lastVersion, nextVersion) return { dependencyName: dependency['dependency-name'], @@ -156,6 +163,10 @@ function parseMetadataLinks(commitMessage: string): Map