67
67
else :
68
68
VERSION_URL_SEGMENT = VERSION
69
69
70
-
71
70
MKDOCS_URL_ROOT = ML_DOC_URL_BASE + VERSION_URL_SEGMENT
72
71
73
72
BRANCH = "main"
@@ -404,31 +403,6 @@ def build_dockerfile(
404
403
if len (gem_packages ) > 0 :
405
404
apk_packages += ["ruby" , "ruby-dev" , "ruby-bundler" , "ruby-rdoc" ]
406
405
# Replace between tags in Dockerfile
407
- # Commands
408
- replace_in_file (
409
- dockerfile ,
410
- "#FROM__START" ,
411
- "#FROM__END" ,
412
- "\n " .join (list (dict .fromkeys (docker_from ))),
413
- )
414
- replace_in_file (
415
- dockerfile ,
416
- "#ARG__START" ,
417
- "#ARG__END" ,
418
- "\n " .join (list (dict .fromkeys (docker_arg ))),
419
- )
420
- replace_in_file (
421
- dockerfile ,
422
- "#COPY__START" ,
423
- "#COPY__END" ,
424
- "\n " .join (docker_copy ),
425
- )
426
- replace_in_file (
427
- dockerfile ,
428
- "#OTHER__START" ,
429
- "#OTHER__END" ,
430
- "\n " .join (docker_other ),
431
- )
432
406
# apk packages
433
407
apk_install_command = ""
434
408
if len (apk_packages ) > 0 :
@@ -440,6 +414,44 @@ def build_dockerfile(
440
414
replace_in_file (dockerfile , "#APK__START" , "#APK__END" , apk_install_command )
441
415
# cargo packages
442
416
cargo_install_command = ""
417
+ # Pre-building packages
418
+ prebuild_list = set (cargo_packages ) & {"shellcheck-sarif" , "sarif-fmt" }
419
+ cargo_packages = set (cargo_packages ) - prebuild_list
420
+ if len (prebuild_list ) > 0 :
421
+ docker_from += [
422
+ "FROM --platform=$BUILDPLATFORM alpine:3 AS cargo-build\n "
423
+ + "WORKDIR /cargo\n "
424
+ + "ENV HOME=/cargo\n "
425
+ + "USER 0\n "
426
+ + "RUN --mount=type=cache,target=/var/cache/apk,id=apk-${BUILDARCH},sharing=locked \\ \n "
427
+ + " apk add --update \\ \n "
428
+ + " gcc \\ \n "
429
+ + " rustup \\ \n "
430
+ + " bash \\ \n "
431
+ + " git \\ \n "
432
+ + " musl-dev \\ \n "
433
+ + " llvm \\ \n "
434
+ + " clang\n "
435
+ + "RUN chown 63425:63425 /cargo\n "
436
+ + "USER 63425\n "
437
+ + "ENV CC_aarch64_unknown_linux_musl=clang \\ \n "
438
+ + " AR_aarch64_unknown_linux_musl=llvm-ar \\ \n "
439
+ + ' CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-Clink-self-contained=yes -Clinker=rust-lld" \\ \n '
440
+ + " CC_x86_64_unknown_linux_musl=clang \\ \n "
441
+ + " AR_x86_64_unknown_linux_musl=llvm-ar \\ \n "
442
+ + ' CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-Clink-self-contained=yes -Clinker=rust-lld"\n '
443
+ + "ARG TARGETARCH\n "
444
+ + 'RUN rustup-init -y --target $([[ "${TARGETARCH}" == "amd64" ]] && echo "x86_64-unknown-linux-musl" || echo "aarch64-unknown-linux-musl")\n '
445
+ + "\n "
446
+ + "RUN --mount=type=cache,id=cargo-${TARGETARCH},sharing=locked,target=/cargo/.cargo/registry/,uid=63425 \\ \n "
447
+ + " . /cargo/.cargo/env \\ \n "
448
+ + f' && cargo install { " " .join (prebuild_list )} --root /tmp --target $([[ "${{TARGETARCH}}" == "amd64" ]] && echo "x86_64-unknown-linux-musl" || echo "aarch64-unknown-linux-musl") \n '
449
+ + "\n "
450
+ + "FROM scratch AS cargo\n "
451
+ + "COPY --link --from=cargo-build /tmp/bin/* /bin/\n "
452
+ + f'RUN ["/bin/' + '", "--help"]\n RUN ["/bin/' .join (prebuild_list ) + '", "--help"]\n '
453
+ ]
454
+ docker_copy += [f"COPY --from=cargo /bin/* /usr/bin/" ]
443
455
keep_rustup = False
444
456
if len (cargo_packages ) > 0 :
445
457
rust_commands = []
@@ -542,6 +554,31 @@ def build_dockerfile(
542
554
+ " \\ \n " .join (list (dict .fromkeys (gem_packages )))
543
555
)
544
556
replace_in_file (dockerfile , "#GEM__START" , "#GEM__END" , gem_install_command )
557
+ # Commands
558
+ replace_in_file (
559
+ dockerfile ,
560
+ "#FROM__START" ,
561
+ "#FROM__END" ,
562
+ "\n " .join (list (dict .fromkeys (docker_from ))),
563
+ )
564
+ replace_in_file (
565
+ dockerfile ,
566
+ "#ARG__START" ,
567
+ "#ARG__END" ,
568
+ "\n " .join (list (dict .fromkeys (docker_arg ))),
569
+ )
570
+ replace_in_file (
571
+ dockerfile ,
572
+ "#COPY__START" ,
573
+ "#COPY__END" ,
574
+ "\n " .join (docker_copy ),
575
+ )
576
+ replace_in_file (
577
+ dockerfile ,
578
+ "#OTHER__START" ,
579
+ "#OTHER__END" ,
580
+ "\n " .join (docker_other ),
581
+ )
545
582
flavor_env = f"ENV MEGALINTER_FLAVOR={ flavor } "
546
583
replace_in_file (dockerfile , "#FLAVOR__START" , "#FLAVOR__END" , flavor_env )
547
584
replace_in_file (
@@ -1399,9 +1436,9 @@ def process_type(linters_by_type, type1, type_label, linters_tables_md):
1399
1436
# Pre/post commands
1400
1437
linter_doc_md += [
1401
1438
f"| { linter .name } _PRE_COMMANDS | List of bash commands to run before the linter"
1402
- f"| { dump_as_json (linter .pre_commands ,'None' )} |" ,
1439
+ f"| { dump_as_json (linter .pre_commands , 'None' )} |" ,
1403
1440
f"| { linter .name } _POST_COMMANDS | List of bash commands to run after the linter"
1404
- f"| { dump_as_json (linter .post_commands ,'None' )} |" ,
1441
+ f"| { dump_as_json (linter .post_commands , 'None' )} |" ,
1405
1442
]
1406
1443
add_in_config_schema_file (
1407
1444
[
@@ -2354,7 +2391,7 @@ def finalize_doc_build():
2354
2391
[](https://github.com/oxsecurity/megalinter/stargazers/)
2355
2392
[](https://github.com/oxsecurity/megalinter/network/dependents)
2356
2393
[](https://github.com/oxsecurity/megalinter/graphs/contributors/)
2357
- [](http://makeapullrequest.com)""" , # noqa: E501
2394
+ [](http://makeapullrequest.com)""" , # noqa: E501
2358
2395
)
2359
2396
2360
2397
# Remove TOC in target file
@@ -3085,7 +3122,7 @@ def update_workflow_linters(file_path, linters):
3085
3122
file_content = f .read ()
3086
3123
file_content = re .sub (
3087
3124
r"(linter:\s+\[\s*)([^\[\]]*?)(\s*\])" ,
3088
- rf"\1{ re .escape (linters ).replace (chr (92 ),'' ).strip ()} \3" ,
3125
+ rf"\1{ re .escape (linters ).replace (chr (92 ), '' ).strip ()} \3" ,
3089
3126
file_content ,
3090
3127
)
3091
3128
0 commit comments