@codacy/tools-hadolint-2 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +93 -73
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -642,7 +642,7 @@ var patterns_default = [
642
642
  severityLevel: "Info",
643
643
  title: "Escape Literal Dollar Signs in Double Quotes",
644
644
  enabled: true,
645
- languages: ["Dockerfile"],
645
+ languages: ["Shell"],
646
646
  parameters: []
647
647
  },
648
648
  {
@@ -651,7 +651,7 @@ var patterns_default = [
651
651
  severityLevel: "Info",
652
652
  title: "Avoid Unnecessary Escape Sequences in Shell Scripts",
653
653
  enabled: true,
654
- languages: ["Dockerfile"],
654
+ languages: ["Shell"],
655
655
  parameters: []
656
656
  },
657
657
  {
@@ -660,7 +660,7 @@ var patterns_default = [
660
660
  severityLevel: "High",
661
661
  title: "Remove Space After '=' in Variable Assignment",
662
662
  enabled: true,
663
- languages: ["Dockerfile"],
663
+ languages: ["Shell"],
664
664
  parameters: []
665
665
  },
666
666
  {
@@ -669,7 +669,7 @@ var patterns_default = [
669
669
  severityLevel: "High",
670
670
  title: "Enforce Semicolon or Linefeed Before Shell Keywords like done",
671
671
  enabled: true,
672
- languages: ["Dockerfile"],
672
+ languages: ["Shell"],
673
673
  parameters: []
674
674
  },
675
675
  {
@@ -678,7 +678,7 @@ var patterns_default = [
678
678
  severityLevel: "High",
679
679
  title: "Avoid Unicode Non-Breaking and Zero-Width Spaces",
680
680
  enabled: true,
681
- languages: ["Dockerfile"],
681
+ languages: ["Shell"],
682
682
  parameters: []
683
683
  },
684
684
  {
@@ -687,7 +687,7 @@ var patterns_default = [
687
687
  severityLevel: "High",
688
688
  title: "Enforce Space After Negation in Shell Conditionals",
689
689
  enabled: true,
690
- languages: ["Dockerfile"],
690
+ languages: ["Shell"],
691
691
  parameters: []
692
692
  },
693
693
  {
@@ -696,7 +696,7 @@ var patterns_default = [
696
696
  severityLevel: "Warning",
697
697
  title: "Avoid Using Both '&' and ';' to Terminate Commands",
698
698
  enabled: true,
699
- languages: ["Dockerfile"],
699
+ languages: ["Shell"],
700
700
  parameters: []
701
701
  },
702
702
  {
@@ -705,7 +705,7 @@ var patterns_default = [
705
705
  severityLevel: "High",
706
706
  title: "Avoid Declaring Parameters in Shell Functions",
707
707
  enabled: true,
708
- languages: ["Dockerfile"],
708
+ languages: ["Shell"],
709
709
  parameters: []
710
710
  },
711
711
  {
@@ -714,7 +714,7 @@ var patterns_default = [
714
714
  severityLevel: "High",
715
715
  title: "Avoid Using $ on Left Side of Assignments",
716
716
  enabled: true,
717
- languages: ["Dockerfile"],
717
+ languages: ["Shell"],
718
718
  parameters: []
719
719
  },
720
720
  {
@@ -723,7 +723,7 @@ var patterns_default = [
723
723
  severityLevel: "High",
724
724
  title: "Avoid Spaces Around '=' in Shell Variable Assignments",
725
725
  enabled: true,
726
- languages: ["Dockerfile"],
726
+ languages: ["Shell"],
727
727
  parameters: []
728
728
  },
729
729
  {
@@ -732,7 +732,7 @@ var patterns_default = [
732
732
  severityLevel: "High",
733
733
  title: "Enforce Correct Use of Backticks for Command Expansion",
734
734
  enabled: true,
735
- languages: ["Dockerfile"],
735
+ languages: ["Shell"],
736
736
  parameters: []
737
737
  },
738
738
  {
@@ -741,7 +741,7 @@ var patterns_default = [
741
741
  severityLevel: "High",
742
742
  title: "Detect Unclosed Double-Quoted Strings",
743
743
  enabled: true,
744
- languages: ["Dockerfile"],
744
+ languages: ["Shell"],
745
745
  parameters: []
746
746
  },
747
747
  {
@@ -759,7 +759,7 @@ var patterns_default = [
759
759
  severityLevel: "High",
760
760
  title: "Enforce lowercase shell script keywords",
761
761
  enabled: true,
762
- languages: ["Dockerfile"],
762
+ languages: ["Shell"],
763
763
  parameters: []
764
764
  },
765
765
  {
@@ -768,7 +768,7 @@ var patterns_default = [
768
768
  severityLevel: "Warning",
769
769
  title: "Avoid Literal Curly Braces Without Proper Syntax or Quoting",
770
770
  enabled: true,
771
- languages: ["Dockerfile"],
771
+ languages: ["Shell"],
772
772
  parameters: []
773
773
  },
774
774
  {
@@ -777,7 +777,7 @@ var patterns_default = [
777
777
  severityLevel: "High",
778
778
  title: "Avoid Using Dollar Sign on Iterator Variable in For Loops",
779
779
  enabled: true,
780
- languages: ["Dockerfile"],
780
+ languages: ["Shell"],
781
781
  parameters: []
782
782
  },
783
783
  {
@@ -786,7 +786,7 @@ var patterns_default = [
786
786
  severityLevel: "Warning",
787
787
  title: "Enforce Braces When Expanding Arrays",
788
788
  enabled: true,
789
- languages: ["Dockerfile"],
789
+ languages: ["Shell"],
790
790
  parameters: []
791
791
  },
792
792
  {
@@ -795,7 +795,7 @@ var patterns_default = [
795
795
  severityLevel: "High",
796
796
  title: "Enforce Space Between Function Name and Body in Shell Scripts",
797
797
  enabled: true,
798
- languages: ["Dockerfile"],
798
+ languages: ["Shell"],
799
799
  parameters: []
800
800
  },
801
801
  {
@@ -804,7 +804,7 @@ var patterns_default = [
804
804
  severityLevel: "High",
805
805
  title: "Avoid Using Unexpected '==' in Shell Scripts",
806
806
  enabled: true,
807
- languages: ["Dockerfile"],
807
+ languages: ["Shell"],
808
808
  parameters: []
809
809
  },
810
810
  {
@@ -813,7 +813,7 @@ var patterns_default = [
813
813
  severityLevel: "Warning",
814
814
  title: "Quote or Escape Special Characters in eval",
815
815
  enabled: true,
816
- languages: ["Dockerfile"],
816
+ languages: ["Shell"],
817
817
  parameters: []
818
818
  },
819
819
  {
@@ -822,7 +822,7 @@ var patterns_default = [
822
822
  severityLevel: "Info",
823
823
  title: "Enforce Space Before Comment Hash",
824
824
  enabled: true,
825
- languages: ["Dockerfile"],
825
+ languages: ["Shell"],
826
826
  parameters: []
827
827
  },
828
828
  {
@@ -831,7 +831,7 @@ var patterns_default = [
831
831
  severityLevel: "Info",
832
832
  title: "Avoid Useless Use of cat",
833
833
  enabled: true,
834
- languages: ["Dockerfile"],
834
+ languages: ["Shell"],
835
835
  parameters: []
836
836
  },
837
837
  {
@@ -840,7 +840,7 @@ var patterns_default = [
840
840
  severityLevel: "High",
841
841
  title: "Avoid Using 'A && B || C' Instead of If-Then-Else",
842
842
  enabled: true,
843
- languages: ["Dockerfile"],
843
+ languages: ["Shell"],
844
844
  parameters: []
845
845
  },
846
846
  {
@@ -849,7 +849,7 @@ var patterns_default = [
849
849
  severityLevel: "High",
850
850
  title: "Avoid Unescaped Single Quotes Outside of Quotes in Shell Commands",
851
851
  enabled: true,
852
- languages: ["Dockerfile"],
852
+ languages: ["Shell"],
853
853
  parameters: []
854
854
  },
855
855
  {
@@ -858,7 +858,7 @@ var patterns_default = [
858
858
  severityLevel: "Warning",
859
859
  title: "Avoid Using echo for Escape Sequences; Use printf Instead",
860
860
  enabled: true,
861
- languages: ["Dockerfile"],
861
+ languages: ["Shell"],
862
862
  parameters: []
863
863
  },
864
864
  {
@@ -867,7 +867,7 @@ var patterns_default = [
867
867
  severityLevel: "High",
868
868
  title: "Enforce Safe Glob Usage to Avoid Misinterpretation as Options",
869
869
  enabled: true,
870
- languages: ["Dockerfile"],
870
+ languages: ["Shell"],
871
871
  parameters: []
872
872
  },
873
873
  {
@@ -876,7 +876,7 @@ var patterns_default = [
876
876
  severityLevel: "High",
877
877
  title: "Avoid Using Undefined Features in POSIX sh",
878
878
  enabled: false,
879
- languages: ["Dockerfile"],
879
+ languages: ["Shell"],
880
880
  parameters: []
881
881
  },
882
882
  {
@@ -903,7 +903,7 @@ var patterns_default = [
903
903
  severityLevel: "Warning",
904
904
  title: "Avoid Incorrectly Nested or Unnecessary Double Quotes in Shell Scripts",
905
905
  enabled: true,
906
- languages: ["Dockerfile"],
906
+ languages: ["Shell"],
907
907
  parameters: []
908
908
  },
909
909
  {
@@ -912,7 +912,7 @@ var patterns_default = [
912
912
  severityLevel: "High",
913
913
  title: "Detect Unassigned Variable References in Shell Scripts",
914
914
  enabled: true,
915
- languages: ["Dockerfile"],
915
+ languages: ["Shell"],
916
916
  parameters: []
917
917
  },
918
918
  {
@@ -921,7 +921,7 @@ var patterns_default = [
921
921
  severityLevel: "High",
922
922
  title: "Declare and Assign Separately to Avoid Masking Return Values",
923
923
  enabled: false,
924
- languages: ["Dockerfile"],
924
+ languages: ["Shell"],
925
925
  parameters: []
926
926
  },
927
927
  {
@@ -930,7 +930,7 @@ var patterns_default = [
930
930
  severityLevel: "High",
931
931
  title: "Ensure cd Command Failure is Handled",
932
932
  enabled: true,
933
- languages: ["Dockerfile"],
933
+ languages: ["Shell"],
934
934
  parameters: []
935
935
  }
936
936
  ];
@@ -1000,7 +1000,10 @@ var PLATFORM_MAP = {
1000
1000
  "darwin-arm64": "macos-arm64",
1001
1001
  "darwin-x64": "macos-x86_64",
1002
1002
  "linux-x64": "linux-x86_64",
1003
- "linux-arm64": "linux-arm64"
1003
+ "linux-arm64": "linux-arm64",
1004
+ // Windows ships a raw `.exe` (hadolint-Windows-x86_64.exe) — the `.exe`
1005
+ // suffix is added at the download/resolve sites via exeName.
1006
+ "win32-x64": "Windows-x86_64"
1004
1007
  };
1005
1008
  async function getVersionFromBinary(binaryPath) {
1006
1009
  try {
@@ -1015,7 +1018,7 @@ async function getVersionFromBinary(binaryPath) {
1015
1018
  }
1016
1019
  }
1017
1020
  async function resolveBinaryPath(ctx) {
1018
- const codacyBin = import_path.default.join(ctx.toolInstallDir, BINARY);
1021
+ const codacyBin = import_path.default.join(ctx.toolInstallDir, (0, import_tooling.exeName)(BINARY));
1019
1022
  const version = await getVersionFromBinary(codacyBin);
1020
1023
  if (version) return codacyBin;
1021
1024
  return BINARY;
@@ -1096,12 +1099,13 @@ var adapter = {
1096
1099
  };
1097
1100
  }
1098
1101
  const version = adapter.preferredVersion;
1099
- const url = `https://github.com/hadolint/hadolint/releases/download/v${version}/hadolint-${platformSuffix}`;
1100
- const destPath = import_path.default.join(ctx.toolInstallDir, BINARY);
1102
+ const assetExt = import_tooling.IS_WINDOWS ? ".exe" : "";
1103
+ const url = `https://github.com/hadolint/hadolint/releases/download/v${version}/hadolint-${platformSuffix}${assetExt}`;
1104
+ const destPath = import_path.default.join(ctx.toolInstallDir, (0, import_tooling.exeName)(BINARY));
1101
1105
  try {
1102
1106
  ctx.logger.info(`Downloading hadolint v${version} for ${platformKey}...`);
1103
1107
  await (0, import_tooling.downloadFile)(url, destPath, ctx.logger);
1104
- await import_promises.default.chmod(destPath, 493);
1108
+ if (!import_tooling.IS_WINDOWS) await import_promises.default.chmod(destPath, 493);
1105
1109
  ctx.logger.info(`Installed hadolint v${version} to ${destPath}`);
1106
1110
  return { success: true, installedPath: destPath, installedVersion: version };
1107
1111
  } catch (err) {
@@ -1192,37 +1196,62 @@ var adapter = {
1192
1196
  args.push(flag, code);
1193
1197
  }
1194
1198
  }
1195
- args.push(...absoluteFiles);
1199
+ const fileChunks = (0, import_tooling.chunkFilesForArgv)(absoluteFiles);
1196
1200
  try {
1197
- const { stdout, stderr, exitCode } = await (0, import_tooling.spawnTool)(binary, args, {
1198
- cwd: ctx.repositoryRoot,
1199
- logger: ctx.logger
1200
- });
1201
- if (exitCode >= 2) {
1202
- errors.push({
1203
- toolId: TOOL_ID,
1204
- phase: "toolInvoke",
1205
- kind: "NonZeroExit",
1206
- message: `hadolint exited with code ${exitCode}${stderr ? `: ${stderr.trim()}` : ""}`,
1207
- level: "error"
1208
- });
1209
- return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
1210
- }
1211
- if (!stdout.trim()) {
1212
- return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
1213
- }
1214
- let findings;
1215
- try {
1216
- findings = JSON.parse(stdout);
1217
- } catch (err) {
1218
- errors.push({
1219
- toolId: TOOL_ID,
1220
- phase: "outputParse",
1221
- kind: "MalformedOutput",
1222
- message: `Failed to parse hadolint JSON output: ${err instanceof Error ? err.message : String(err)}`,
1223
- level: "error"
1201
+ const findings = [];
1202
+ for (const chunk of fileChunks) {
1203
+ const { stdout, stderr, exitCode } = await (0, import_tooling.spawnTool)(binary, [...args, ...chunk], {
1204
+ cwd: ctx.repositoryRoot,
1205
+ logger: ctx.logger
1224
1206
  });
1225
- return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
1207
+ if (exitCode >= 2) {
1208
+ errors.push({
1209
+ toolId: TOOL_ID,
1210
+ phase: "toolInvoke",
1211
+ kind: "NonZeroExit",
1212
+ message: `hadolint exited with code ${exitCode}${stderr ? `: ${stderr.trim()}` : ""}`,
1213
+ level: "error"
1214
+ });
1215
+ return (0, import_tooling.buildResult)(
1216
+ TOOL_ID,
1217
+ startedAt,
1218
+ /* @__PURE__ */ new Date(),
1219
+ issues,
1220
+ errors,
1221
+ ctx.targetFiles.length
1222
+ );
1223
+ }
1224
+ if (stderr.trim()) {
1225
+ errors.push({
1226
+ toolId: TOOL_ID,
1227
+ phase: "outputParse",
1228
+ kind: "ParseWarning",
1229
+ message: `hadolint stderr: ${stderr.trim()}`,
1230
+ level: "warning"
1231
+ });
1232
+ }
1233
+ if (!stdout.trim()) continue;
1234
+ let chunkFindings;
1235
+ try {
1236
+ chunkFindings = JSON.parse(stdout);
1237
+ } catch (err) {
1238
+ errors.push({
1239
+ toolId: TOOL_ID,
1240
+ phase: "outputParse",
1241
+ kind: "MalformedOutput",
1242
+ message: `Failed to parse hadolint JSON output: ${err instanceof Error ? err.message : String(err)}`,
1243
+ level: "error"
1244
+ });
1245
+ return (0, import_tooling.buildResult)(
1246
+ TOOL_ID,
1247
+ startedAt,
1248
+ /* @__PURE__ */ new Date(),
1249
+ issues,
1250
+ errors,
1251
+ ctx.targetFiles.length
1252
+ );
1253
+ }
1254
+ findings.push(...chunkFindings);
1226
1255
  }
1227
1256
  const enabledPatterns = new Set(codacyConfig.patterns.map((p) => p.patternId));
1228
1257
  const findingsByFile = /* @__PURE__ */ new Map();
@@ -1258,15 +1287,6 @@ var adapter = {
1258
1287
  });
1259
1288
  }
1260
1289
  }
1261
- if (stderr.trim()) {
1262
- errors.push({
1263
- toolId: TOOL_ID,
1264
- phase: "outputParse",
1265
- kind: "ParseWarning",
1266
- message: `hadolint stderr: ${stderr.trim()}`,
1267
- level: "warning"
1268
- });
1269
- }
1270
1290
  } catch (err) {
1271
1291
  errors.push({
1272
1292
  toolId: TOOL_ID,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codacy/tools-hadolint-2",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "Hadolint adapter — CLI-mode Dockerfile linter",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -8,7 +8,7 @@
8
8
  "dist"
9
9
  ],
10
10
  "dependencies": {
11
- "@codacy/tooling": "0.13.0"
11
+ "@codacy/tooling": "0.15.0"
12
12
  },
13
13
  "license": "MIT",
14
14
  "author": "Codacy <support@codacy.com> (https://www.codacy.com)",