[
  {
    "path": ".ansible-lint",
    "content": "skip_list:\n  - galaxy # We don't publish to Ansible Galaxy.\n  - package-latest # Since this is a development environment, we allow the latest versions.\n\nwarn_list: []\n"
  },
  {
    "path": ".clang-format",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\n# Modified from https://github.com/ament/ament_lint/blob/master/ament_clang_format/ament_clang_format/configuration/.clang-format\nLanguage: Cpp\nBasedOnStyle: Google\n\nAccessModifierOffset: -2\nAlignAfterOpenBracket: AlwaysBreak\nAllowShortFunctionsOnASingleLine: InlineOnly\nBraceWrapping:\n  AfterClass: true\n  AfterFunction: true\n  AfterNamespace: true\n  AfterStruct: true\nBreakBeforeBraces: Custom\nColumnLimit: 100\nConstructorInitializerIndentWidth: 0\nContinuationIndentWidth: 2\nDerivePointerAlignment: false\nPointerAlignment: Middle\nReflowComments: true\nIncludeCategories:\n  # C++ system headers\n  - Regex: <[a-z_]*>\n    Priority: 6\n    CaseSensitive: true\n  # C system headers\n  - Regex: <.*\\.h>\n    Priority: 5\n    CaseSensitive: true\n  # Boost headers\n  - Regex: boost/.*\n    Priority: 4\n    CaseSensitive: true\n  # Message headers\n  - Regex: .*_msgs/.*\n    Priority: 3\n    CaseSensitive: true\n  - Regex: .*_srvs/.*\n    Priority: 3\n    CaseSensitive: true\n  # Other Package headers\n  - Regex: <.*>\n    Priority: 2\n    CaseSensitive: true\n  # Local package headers\n  - Regex: '\".*\"'\n    Priority: 1\n    CaseSensitive: true\n"
  },
  {
    "path": ".clang-tidy",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nChecks: \"\n  -*,\n  boost-use-to-string,\n  bugprone-argument-comment,\n  bugprone-assert-side-effect,\n  bugprone-bad-signal-to-kill-thread,\n  bugprone-bool-pointer-implicit-conversion,\n  bugprone-branch-clone,\n  bugprone-copy-constructor-init,\n  bugprone-dangling-handle,\n  bugprone-dynamic-static-initializers,\n  bugprone-exception-escape,\n  bugprone-fold-init-type,\n  bugprone-forward-declaration-namespace,\n  bugprone-forwarding-reference-overload,\n  bugprone-inaccurate-erase,\n  bugprone-incorrect-roundings,\n  bugprone-integer-division,\n  bugprone-lambda-function-name,\n  bugprone-macro-parentheses,\n  bugprone-macro-repeated-side-effects,\n  bugprone-misplaced-operator-in-strlen-in-alloc,\n  bugprone-misplaced-widening-cast,\n  bugprone-move-forwarding-reference,\n  bugprone-multiple-statement-macro,\n  bugprone-not-null-terminated-result,\n  bugprone-parent-virtual-call,\n  bugprone-posix-return,\n  bugprone-signed-char-misuse,\n  bugprone-sizeof-container,\n  bugprone-sizeof-expression,\n  bugprone-string-constructor,\n  bugprone-string-integer-assignment,\n  bugprone-string-literal-with-embedded-nul,\n  bugprone-suspicious-enum-usage,\n  bugprone-suspicious-memset-usage,\n  bugprone-suspicious-missing-comma,\n  bugprone-suspicious-semicolon,\n  bugprone-suspicious-string-compare,\n  bugprone-swapped-arguments,\n  bugprone-terminating-continue,\n  bugprone-throw-keyword-missing,\n  bugprone-too-small-loop-variable,\n  bugprone-unchecked-optional-access,\n  bugprone-undefined-memory-manipulation,\n  bugprone-undelegated-constructor,\n  bugprone-unhandled-self-assignment,\n  bugprone-unused-raii,\n  bugprone-unused-return-value,\n  bugprone-use-after-move,\n  bugprone-virtual-near-miss,\n  cppcoreguidelines-avoid-goto,\n  cppcoreguidelines-init-variables,\n  cppcoreguidelines-interfaces-global-init,\n  cppcoreguidelines-macro-usage,\n  cppcoreguidelines-narrowing-conversions,\n  cppcoreguidelines-no-malloc,\n  cppcoreguidelines-pro-bounds-pointer-arithmetic,\n  cppcoreguidelines-pro-type-const-cast,\n  cppcoreguidelines-pro-type-cstyle-cast,\n  cppcoreguidelines-pro-type-member-init,\n  cppcoreguidelines-pro-type-reinterpret-cast,\n  cppcoreguidelines-pro-type-static-cast-downcast,\n  cppcoreguidelines-pro-type-union-access,\n  cppcoreguidelines-slicing,\n  cppcoreguidelines-special-member-functions,\n  google-build-explicit-make-pair,\n  google-build-namespaces,\n  google-build-using-namespace,\n  google-explicit-constructor,\n  google-global-names-in-headers,\n  google-upgrade-googletest-case,\n  hicpp-exception-baseclass,\n  hicpp-multiway-paths-covered,\n  hicpp-no-assembler,\n  hicpp-signed-bitwise,\n  llvm-namespace-comment,\n  misc-definitions-in-headers,\n  misc-misplaced-const,\n  misc-new-delete-overloads,\n  misc-non-copyable-objects,\n  misc-redundant-expression,\n  misc-static-assert,\n  misc-throw-by-value-catch-by-reference,\n  misc-unconventional-assign-operator,\n  misc-uniqueptr-reset-release,\n  misc-unused-alias-decls,\n  misc-unused-parameters,\n  misc-unused-using-decls,\n  modernize-concat-nested-namespaces,\n  modernize-deprecated-headers,\n  modernize-deprecated-ios-base-aliases,\n  modernize-loop-convert,\n  modernize-make-shared,\n  modernize-make-unique,\n  modernize-pass-by-value,\n  modernize-raw-string-literal,\n  modernize-redundant-void-arg,\n  modernize-replace-auto-ptr,\n  modernize-replace-disallow-copy-and-assign-macro,\n  modernize-replace-random-shuffle,\n  modernize-return-braced-init-list,\n  modernize-shrink-to-fit,\n  modernize-unary-static-assert,\n  modernize-use-auto,\n  modernize-use-bool-literals,\n  modernize-use-default-member-init,\n  modernize-use-emplace,\n  modernize-use-equals-default,\n  modernize-use-equals-delete,\n  modernize-use-nodiscard,\n  modernize-use-noexcept,\n  modernize-use-nullptr,\n  modernize-use-override,\n  modernize-use-transparent-functors,\n  modernize-use-uncaught-exceptions,\n  modernize-use-using,\n  openmp-use-default-none,\n  performance-faster-string-find,\n  performance-for-range-copy,\n  performance-implicit-conversion-in-loop,\n  performance-inefficient-algorithm,\n  performance-inefficient-string-concatenation,\n  performance-inefficient-vector-operation,\n  performance-move-const-arg,\n  performance-move-constructor-init,\n  performance-no-automatic-move,\n  performance-no-int-to-ptr,\n  performance-noexcept-move-constructor,\n  performance-trivially-destructible,\n  performance-type-promotion-in-math-fn,\n  performance-unnecessary-copy-initialization,\n  performance-unnecessary-value-param,\n  portability-simd-intrinsics,\n  readability-const-return-type,\n  readability-container-size-empty,\n  readability-convert-member-functions-to-static,\n  readability-delete-null-pointer,\n  readability-else-after-return,\n  readability-function-cognitive-complexity,\n  readability-identifier-naming,\n  readability-inconsistent-declaration-parameter-name,\n  readability-isolate-declaration,\n  readability-make-member-function-const,\n  readability-misleading-indentation,\n  readability-misplaced-array-index,\n  readability-non-const-parameter,\n  readability-redundant-access-specifiers,\n  readability-redundant-control-flow,\n  readability-redundant-declaration,\n  readability-redundant-function-ptr-dereference,\n  readability-redundant-member-init,\n  readability-redundant-smartptr-get,\n  readability-redundant-string-cstr,\n  readability-redundant-string-init,\n  readability-simplify-boolean-expr,\n  readability-simplify-subscript-expr,\n  readability-static-accessed-through-instance,\n  readability-static-definition-in-anonymous-namespace,\n  readability-string-compare,\n  readability-uniqueptr-delete-release\"\n\nWarningsAsErrors: \"\n  boost-use-to-string,\n  bugprone-dangling-handle,\n  bugprone-fold-init-type,\n  bugprone-inaccurate-erase,\n  bugprone-incorrect-roundings,\n  bugprone-misplaced-widening-cast,\n  bugprone-sizeof-container,\n  bugprone-sizeof-expression,\n  bugprone-string-constructor,\n  bugprone-suspicious-enum-usage,\n  bugprone-suspicious-memset-usage,\n  bugprone-suspicious-missing-comma,\n  bugprone-suspicious-semicolon,\n  bugprone-swapped-arguments,\n  bugprone-unused-raii,\n  bugprone-use-after-move,\n  llvm-namespace-comment,\n  misc-non-copyable-objects,\n  misc-redundant-expression,\n  misc-throw-by-value-catch-by-reference,\n  misc-unused-alias-decls,\n  misc-unused-parameters,\n  misc-unused-using-decls,\n  modernize-deprecated-headers,\n  modernize-redundant-void-arg,\n  modernize-use-bool-literals,\n  modernize-use-emplace,\n  modernize-use-equals-default,\n  modernize-use-equals-delete,\n  modernize-use-nullptr,\n  modernize-use-override,\n  modernize-use-using,\n  performance-faster-string-find,\n  performance-inefficient-algorithm,\n  readability-make-member-function-const,\n  readability-misleading-indentation,\n  readability-misplaced-array-index,\n  readability-string-compare\"\n\nHeaderFilterRegex: ^(?!\\/usr)(?!\\/opt)\n\nExtraArgs:\n  - -std=c++17\n\nFormatStyle: none\n\nCheckOptions:\n  - key: bugprone-argument-comment.CommentBoolLiterals\n    value: \"0\"\n  - key: bugprone-argument-comment.CommentCharacterLiterals\n    value: \"0\"\n  - key: bugprone-argument-comment.CommentFloatLiterals\n    value: \"0\"\n  - key: bugprone-argument-comment.CommentIntegerLiterals\n    value: \"0\"\n  - key: bugprone-argument-comment.CommentNullPtrs\n    value: \"0\"\n  - key: bugprone-argument-comment.CommentStringLiterals\n    value: \"0\"\n  - key: bugprone-argument-comment.CommentUserDefinedLiterals\n    value: \"0\"\n  - key: bugprone-argument-comment.IgnoreSingleArgument\n    value: \"0\"\n  - key: bugprone-argument-comment.StrictMode\n    value: \"0\"\n  - key: bugprone-assert-side-effect.AssertMacros\n    value: assert\n  - key: bugprone-assert-side-effect.CheckFunctionCalls\n    value: \"0\"\n  - key: bugprone-dangling-handle.HandleClasses\n    value: std::basic_string_view;std::experimental::basic_string_view\n  - key: bugprone-dynamic-static-initializers.HeaderFileExtensions\n    value: \",h,hh,hpp,hxx\"\n  - key: bugprone-exception-escape.FunctionsThatShouldNotThrow\n    value: \"\"\n  - key: bugprone-exception-escape.IgnoredExceptions\n    value: \"\"\n  - key: bugprone-misplaced-widening-cast.CheckImplicitCasts\n    value: \"0\"\n  - key: bugprone-not-null-terminated-result.WantToUseSafeFunctions\n    value: \"1\"\n  - key: bugprone-signed-char-misuse.CharTypdefsToIgnore\n    value: \"\"\n  - key: bugprone-sizeof-expression.WarnOnSizeOfCompareToConstant\n    value: \"1\"\n  - key: bugprone-sizeof-expression.WarnOnSizeOfConstant\n    value: \"1\"\n  - key: bugprone-sizeof-expression.WarnOnSizeOfIntegerExpression\n    value: \"0\"\n  - key: bugprone-sizeof-expression.WarnOnSizeOfThis\n    value: \"1\"\n  - key: bugprone-string-constructor.LargeLengthThreshold\n    value: \"8388608\"\n  - key: bugprone-string-constructor.WarnOnLargeLength\n    value: \"1\"\n  - key: bugprone-suspicious-enum-usage.StrictMode\n    value: \"0\"\n  - key: bugprone-suspicious-missing-comma.MaxConcatenatedTokens\n    value: \"5\"\n  - key: bugprone-suspicious-missing-comma.RatioThreshold\n    value: \"0.200000\"\n  - key: bugprone-suspicious-missing-comma.SizeThreshold\n    value: \"5\"\n  - key: bugprone-suspicious-string-compare.StringCompareLikeFunctions\n    value: \"\"\n  - key: bugprone-suspicious-string-compare.WarnOnImplicitComparison\n    value: \"1\"\n  - key: bugprone-suspicious-string-compare.WarnOnLogicalNotComparison\n    value: \"0\"\n  - key: bugprone-too-small-loop-variable.MagnitudeBitsUpperLimit\n    value: \"16\"\n  - key: bugprone-unhandled-self-assignment.WarnOnlyIfThisHasSuspiciousField\n    value: \"1\"\n  - key: bugprone-unused-return-value.CheckedFunctions\n    value: ::std::async;::std::launder;::std::remove;::std::remove_if;::std::unique;::std::unique_ptr::release;::std::basic_string::empty;::std::vector::empty\n  - key: cert-dcl16-c.NewSuffixes\n    value: L;LL;LU;LLU\n  - key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField\n    value: \"0\"\n  - key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors\n    value: \"1\"\n  - key: cppcoreguidelines-macro-usage.AllowedRegexp\n    value: ^DEBUG_*\n  - key: cppcoreguidelines-macro-usage.CheckCapsOnly\n    value: \"0\"\n  - key: cppcoreguidelines-macro-usage.IgnoreCommandLineMacros\n    value: \"1\"\n  - key: cppcoreguidelines-no-malloc.Allocations\n    value: ::malloc;::calloc\n  - key: cppcoreguidelines-no-malloc.Deallocations\n    value: ::free\n  - key: cppcoreguidelines-no-malloc.Reallocations\n    value: ::realloc\n  - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic\n    value: \"1\"\n  - key: cppcoreguidelines-pro-type-member-init.IgnoreArrays\n    value: \"0\"\n  - key: cppcoreguidelines-pro-type-member-init.UseAssignment\n    value: \"0\"\n  - key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctions\n    value: \"0\"\n  - key: cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor\n    value: \"0\"\n  - key: google-readability-braces-around-statements.ShortStatementLines\n    value: \"1\"\n  - key: google-readability-function-size.StatementThreshold\n    value: \"800\"\n  - key: google-readability-namespace-comments.ShortNamespaceLines\n    value: \"10\"\n  - key: google-readability-namespace-comments.SpacesBeforeComments\n    value: \"2\"\n  - key: hicpp-multiway-paths-covered.WarnOnMissingElse\n    value: \"0\"\n  - key: hicpp-signed-bitwise.IgnorePositiveIntegerLiterals\n    value: \"0\"\n  - key: misc-definitions-in-headers.HeaderFileExtensions\n    value: \",h,hh,hpp,hxx\"\n  - key: misc-definitions-in-headers.UseHeaderFileExtension\n    value: \"1\"\n  - key: misc-throw-by-value-catch-by-reference.CheckThrowTemporaries\n    value: \"1\"\n  - key: misc-unused-parameters.StrictMode\n    value: \"0\"\n  - key: modernize-loop-convert.MaxCopySize\n    value: \"16\"\n  - key: modernize-loop-convert.MinConfidence\n    value: reasonable\n  - key: modernize-loop-convert.NamingStyle\n    value: CamelCase\n  - key: modernize-make-shared.IgnoreMacros\n    value: \"1\"\n  - key: modernize-make-shared.IncludeStyle\n    value: google\n  - key: modernize-make-shared.MakeSmartPtrFunction\n    value: std::make_shared\n  - key: modernize-make-shared.MakeSmartPtrFunctionHeader\n    value: memory\n  - key: modernize-make-unique.IgnoreMacros\n    value: \"1\"\n  - key: modernize-make-unique.IncludeStyle\n    value: google\n  - key: modernize-make-unique.MakeSmartPtrFunction\n    value: std::make_unique\n  - key: modernize-make-unique.MakeSmartPtrFunctionHeader\n    value: memory\n  - key: modernize-pass-by-value.IncludeStyle\n    value: google\n  - key: modernize-pass-by-value.ValuesOnly\n    value: \"0\"\n  - key: modernize-raw-string-literal.ReplaceShorterLiterals\n    value: \"0\"\n  - key: modernize-replace-auto-ptr.IncludeStyle\n    value: google\n  - key: modernize-replace-random-shuffle.IncludeStyle\n    value: google\n  - key: modernize-use-auto.MinTypeNameLength\n    value: \"5\"\n  - key: modernize-use-auto.RemoveStars\n    value: \"0\"\n  - key: modernize-use-default-member-init.IgnoreMacros\n    value: \"1\"\n  - key: modernize-use-default-member-init.UseAssignment\n    value: \"0\"\n  - key: modernize-use-emplace.ContainersWithPushBack\n    value: ::std::vector;::std::list;::std::deque\n  - key: modernize-use-emplace.SmartPointers\n    value: ::std::shared_ptr;::std::unique_ptr;::std::auto_ptr;::std::weak_ptr\n  - key: modernize-use-emplace.TupleMakeFunctions\n    value: ::std::make_pair;::std::make_tuple\n  - key: modernize-use-emplace.TupleTypes\n    value: ::std::pair;::std::tuple\n  - key: modernize-use-equals-default.IgnoreMacros\n    value: \"1\"\n  - key: modernize-use-equals-delete.IgnoreMacros\n    value: \"1\"\n  - key: modernize-use-nodiscard.ReplacementString\n    value: \"[[nodiscard]]\"\n  - key: modernize-use-noexcept.ReplacementString\n    value: \"\"\n  - key: modernize-use-noexcept.UseNoexceptFalse\n    value: \"1\"\n  - key: modernize-use-nullptr.NullMacros\n    value: \"NULL\"\n  - key: modernize-use-override.AllowOverrideAndFinal\n    value: \"0\"\n  - key: modernize-use-override.FinalSpelling\n    value: final\n  - key: modernize-use-override.IgnoreDestructors\n    value: \"0\"\n  - key: modernize-use-override.OverrideSpelling\n    value: override\n  - key: modernize-use-transparent-functors.SafeMode\n    value: \"0\"\n  - key: modernize-use-using.IgnoreMacros\n    value: \"1\"\n  - key: performance-faster-string-find.StringLikeClasses\n    value: std::basic_string\n  - key: performance-for-range-copy.AllowedTypes\n    value: \"\"\n  - key: performance-for-range-copy.WarnOnAllAutoCopies\n    value: \"0\"\n  - key: performance-inefficient-string-concatenation.StrictMode\n    value: \"0\"\n  - key: performance-inefficient-vector-operation.EnableProto\n    value: \"0\"\n  - key: performance-inefficient-vector-operation.VectorLikeClasses\n    value: ::std::vector\n  - key: performance-move-const-arg.CheckTriviallyCopyableMove\n    value: \"1\"\n  - key: performance-move-constructor-init.IncludeStyle\n    value: google\n  - key: performance-no-automatic-move.AllowedTypes\n    value: \"\"\n  - key: performance-type-promotion-in-math-fn.IncludeStyle\n    value: google\n  - key: performance-unnecessary-copy-initialization.AllowedTypes\n    value: \"\"\n  - key: performance-unnecessary-value-param.AllowedTypes\n    value: .*Ptr;.*SharedFuture\n  - key: performance-unnecessary-value-param.IncludeStyle\n    value: google\n  - key: portability-simd-intrinsics.Std\n    value: \"\"\n  - key: portability-simd-intrinsics.Suggest\n    value: \"0\"\n  - key: readability-function-cognitive-complexity.IgnoreMacros\n    value: \"1\"\n  - key: readability-else-after-return.WarnOnUnfixable\n    value: \"1\"\n  - key: readability-identifier-naming.NamespaceCase\n    value: lower_case\n  - key: readability-identifier-naming.ClassCase\n    value: CamelCase\n  - key: readability-identifier-naming.PrivateMemberSuffix\n    value: _\n  - key: readability-identifier-naming.StructCase\n    value: CamelCase\n  - key: readability-identifier-naming.FunctionCase\n    value: lower_case\n  - key: readability-identifier-naming.VariableCase\n    value: lower_case\n  - key: readability-identifier-naming.GlobalConstantCase\n    value: lower_case\n  - key: readability-identifier-naming.GlobalConstantPrefix\n    value: g_\n  - key: readability-identifier-naming.ConstexprVariableCase\n    value: lower_case\n  - key: readability-inconsistent-declaration-parameter-name.IgnoreMacros\n    value: \"1\"\n  - key: readability-inconsistent-declaration-parameter-name.Strict\n    value: \"0\"\n  - key: readability-redundant-smartptr-get.IgnoreMacros\n    value: \"1\"\n  - key: readability-redundant-string-init.StringNames\n    value: ::std::basic_string\n  - key: readability-simplify-subscript-expr.Types\n    value: ::std::basic_string;::std::basic_string_view;::std::vector;::std::array\n  - key: readability-static-accessed-through-instance.NameSpecifierNestingThreshold\n    value: \"3\"\n"
  },
  {
    "path": ".clang-tidy-ci",
    "content": "Checks: \"\n  -*,\n  bugprone-*,\n  -bugprone-branch-clone,\n  -bugprone-easily-swappable-parameters,\n  -bugprone-exception-escape,\n  -bugprone-implicit-widening-of-multiplication-result,\n  -bugprone-infinite-loop,\n  -bugprone-integer-division,\n  -bugprone-macro-parentheses,\n  -bugprone-narrowing-conversions,\n  -bugprone-parent-virtual-call,\n  -bugprone-reserved-identifier,\n  -bugprone-signed-char-misuse\"\n\nWarningsAsErrors: \"*\"\n\nExtraArgs:\n  - -std=c++17\n  - -Wno-c11-extensions\n  - -Wno-unknown-warning-option\n"
  },
  {
    "path": ".devcontainer/Dockerfile",
    "content": "# hadolint global ignore=DL3006\nARG BASE_IMAGE\nFROM $BASE_IMAGE\n\nENV SHELL /bin/bash\n\nARG USERNAME=autoware\nARG USER_UID=1000\nARG USER_GID=$USER_UID\n\nRUN groupadd --gid $USER_GID $USERNAME \\\n  && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \\\n  && apt-get update \\\n  && apt-get install -y sudo \\\n  && echo $USERNAME ALL=\\(root\\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \\\n  && chmod 0440 /etc/sudoers.d/$USERNAME\n"
  },
  {
    "path": ".devcontainer/core-devel/devcontainer.json",
    "content": "{\n  \"name\": \"autoware:core-devel\",\n  \"build\": {\n    \"dockerfile\": \"../Dockerfile\",\n    \"args\": { \"BASE_IMAGE\": \"ghcr.io/autowarefoundation/autoware:core-devel\" }\n  },\n  \"remoteUser\": \"autoware\",\n  \"runArgs\": [\n    \"--cap-add=SYS_PTRACE\",\n    \"--security-opt\",\n    \"seccomp=unconfined\",\n    \"--net=host\",\n    \"--volume=/etc/localtime:/etc/localtime:ro\"\n  ],\n  \"customizations\": {\n    \"vscode\": {\n      \"settings.json\": {\n        \"terminal.integrated.profiles.linux\": { \"bash\": { \"path\": \"/bin/bash\" } }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": ".devcontainer/universe-devel/devcontainer.json",
    "content": "{\n  \"name\": \"autoware:universe-devel\",\n  \"build\": {\n    \"dockerfile\": \"../Dockerfile\",\n    \"args\": { \"BASE_IMAGE\": \"ghcr.io/autowarefoundation/autoware:universe-devel\" }\n  },\n  \"remoteUser\": \"autoware\",\n  \"runArgs\": [\n    \"--cap-add=SYS_PTRACE\",\n    \"--security-opt\",\n    \"seccomp=unconfined\",\n    \"--net=host\",\n    \"--volume=/etc/localtime:/etc/localtime:ro\"\n  ],\n  \"customizations\": {\n    \"vscode\": {\n      \"settings.json\": {\n        \"terminal.integrated.profiles.linux\": { \"bash\": { \"path\": \"/bin/bash\" } }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": ".devcontainer/universe-devel-cuda/devcontainer.json",
    "content": "{\n  \"name\": \"autoware:universe-devel-cuda\",\n  \"build\": {\n    \"dockerfile\": \"../Dockerfile\",\n    \"args\": { \"BASE_IMAGE\": \"ghcr.io/autowarefoundation/autoware:universe-devel-cuda\" }\n  },\n  \"remoteUser\": \"autoware\",\n  \"hostRequirements\": {\n    \"gpu\": true\n  },\n  \"runArgs\": [\n    \"--cap-add=SYS_PTRACE\",\n    \"--security-opt\",\n    \"seccomp=unconfined\",\n    \"--net=host\",\n    \"--volume=/etc/localtime:/etc/localtime:ro\",\n    \"--gpus\",\n    \"all\"\n  ],\n  \"customizations\": {\n    \"vscode\": {\n      \"settings.json\": {\n        \"terminal.integrated.profiles.linux\": { \"bash\": { \"path\": \"/bin/bash\" } }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": ".dockerignore",
    "content": "# Ignore git and metadata directories\n.git\n.github\n.vscode\n\n# Ignore all markdown files\n*.md\n\n# Ignore Docker files\ndocker\n!docker/etc\n!docker/scripts\n!docker/tools\n\n# Ignore a part of files under src\nsrc/**/.*\nsrc/**/*.asc\nsrc/**/*.gif\nsrc/**/*.md\nsrc/**/*.svg\n\n# Ignore generated files by colcon\nbuild\ninstall\nlog\n"
  },
  {
    "path": ".fdignore",
    "content": "!/src/\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "content": "* ryohsuke.mitsudome@tier4.jp mfc@autoware.org\n\n.devcontainer/** oguzkaganozt@gmail.com yutaka.kondo@tier4.jp\n.github/** oguzkaganozt@gmail.com yutaka.kondo@tier4.jp isamu.takagi@tier4.jp\nansible/** oguzkaganozt@gmail.com yutaka.kondo@tier4.jp isamu.takagi@tier4.jp\ndocker/** oguzkaganozt@gmail.com yutaka.kondo@tier4.jp isamu.takagi@tier4.jp\n"
  },
  {
    "path": ".github/DISCUSSION_TEMPLATE/general.yaml",
    "content": "body:\n  - type: checkboxes\n    attributes:\n      label: Code of Conduct\n      options:\n        - label: I have read [CODE OF CONDUCT](https://github.com/autowarefoundation/autoware/blob/main/CODE_OF_CONDUCT.md) and [Support Guidelines](https://autowarefoundation.github.io/autoware-documentation/main/support/support-guidelines/#github-discussions) before creating this Discussion post.\n          required: true\n  - type: textarea\n    attributes:\n      label: Contents\n      description: Write your contents here\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: Bug\ndescription: Report a bug\nbody:\n  - type: checkboxes\n    attributes:\n      label: Checklist\n      description: Confirm the following items before proceeding. If one cannot be satisfied, create a discussion thread instead.\n      options:\n        - label: I've read the [contribution guidelines](https://github.com/autowarefoundation/autoware/blob/main/CONTRIBUTING.md).\n          required: true\n        - label: I've searched other issues and no duplicate issues were found.\n          required: true\n        - label: I'm convinced that this is not my fault but a bug.\n          required: true\n\n  - type: textarea\n    attributes:\n      label: Description\n      description: Write a brief description of the bug.\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Expected behavior\n      description: Describe the expected behavior.\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Actual behavior\n      description: Describe the actual behavior.\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Steps to reproduce\n      description: Write the steps to reproduce the bug.\n      placeholder: |-\n        1.\n        2.\n        3.\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Versions\n      description: Provide the version information. You can omit this if you believe it's irrelevant.\n      placeholder: |-\n        - OS:\n        - ROS 2:\n        - Autoware:\n    validations:\n      required: false\n\n  - type: textarea\n    attributes:\n      label: Possible causes\n      description: Write the possible causes if you have any ideas.\n    validations:\n      required: false\n\n  - type: textarea\n    attributes:\n      label: Additional context\n      description: Add any other additional context if it exists.\n    validations:\n      required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nblank_issues_enabled: false\ncontact_links:\n  - name: Question\n    url: https://github.com/autowarefoundation/autoware/discussions/new?category=q-a\n    about: Ask a question\n\n  - name: Feature request\n    url: https://github.com/autowarefoundation/autoware/discussions/new?category=feature-requests\n    about: Send a feature request\n\n  - name: Idea\n    url: https://github.com/autowarefoundation/autoware/discussions/new?category=ideas\n    about: Post an idea\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/simple-issue.yaml",
    "content": "name: Simple Issue\ndescription: Create a simple issue\nbody:\n  - type: checkboxes\n    attributes:\n      label: Checklist\n      description: Confirm the following items before proceeding. If one cannot be satisfied, create a discussion thread instead.\n      options:\n        - label: I've read the [contribution guidelines](https://github.com/autowarefoundation/autoware/blob/main/CONTRIBUTING.md).\n          required: true\n        - label: I've searched other issues and no duplicate issues were found.\n          required: true\n\n  - type: textarea\n    attributes:\n      label: Description\n      description: Write a brief description of the issue.\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/task.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: Task\ndescription: Plan a task\nbody:\n  - type: checkboxes\n    attributes:\n      label: Checklist\n      description: Confirm the following items before proceeding. If one cannot be satisfied, create a discussion thread instead.\n      options:\n        - label: I've read the [contribution guidelines](https://github.com/autowarefoundation/autoware/blob/main/CONTRIBUTING.md).\n          required: true\n        - label: I've searched other issues and no duplicate issues were found.\n          required: true\n        - label: I've agreed with the maintainers that I can plan this task.\n          required: true\n\n  - type: textarea\n    attributes:\n      label: Description\n      description: Write a brief description of the task.\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Purpose\n      description: Describe the purpose of the task.\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Possible approaches\n      description: Describe possible approaches for the task.\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Definition of done\n      description: Write the definition of done for the task.\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/actions/combine-multi-arch-images/action.yaml",
    "content": "name: combine-multi-arch-images\ndescription: \"\"\n\ninputs:\n  package-name:\n    description: \"\"\n    required: true\n\nruns:\n  using: composite\n  steps:\n    - name: Login to GitHub Container Registry\n      uses: docker/login-action@v2\n      with:\n        registry: ghcr.io\n        username: ${{ github.repository_owner }}\n        password: ${{ github.token }}\n\n    - name: Set image name\n      id: set-image-name\n      run: echo \"image-name=ghcr.io/${{ github.repository_owner }}/${{ inputs.package-name }}\" >> $GITHUB_OUTPUT\n      shell: bash\n\n    - name: Get all tags\n      id: get-all-tags\n      run: |\n        base_url=\"https://api.github.com/orgs/${{ github.repository_owner }}/packages/container/${{ inputs.package-name }}/versions\"\n        echo \"base_url: $base_url\"\n\n        all_tags=()\n        for page in $(seq 1 10); do\n          page_url=\"${base_url}?page=$page\"\n          echo -e \"\\npage_url: $page_url\"\n\n          page_tags=$(curl -fsSL \"$page_url\" -H \"Authorization: token ${{ github.token }}\" | jq \".[].metadata.container.tags[]\" | cut -d '\"' -f 2)\n          echo -e \"\\n[page_tags]\\n$page_tags\"\n\n          if [ \"$page_tags\" = \"\" ]; then\n            echo \"No tags found in the page $page.\"\n            break\n          fi\n\n          for tag in $(IFS=$'\\n'; echo \"$page_tags\"); do\n            all_tags+=(\"$tag\")\n          done\n        done\n\n        all_tags=$(printf \"%s\\n\" ${all_tags[@]})\n        echo -e \"\\n[all_tags]\\n$all_tags\"\n\n        echo \"tags=$(printf \"%s \" $all_tags | sed 's/\\s*$//')\" >> $GITHUB_OUTPUT\n      shell: bash\n\n    - name: Get base tags\n      id: get-base-tags\n      run: |\n        amd64_tags=$(printf \"%s\\n\" $ALL_TAGS | grep \"\\-amd64\" | sed \"s/-amd64$//g\")\n        arm64_tags=$(printf \"%s\\n\" $ALL_TAGS | grep \"\\-arm64\" | sed \"s/-arm64$//g\")\n        base_tags=$(printf \"%s\\n\" \"$amd64_tags\" \"$arm64_tags\" | sort | uniq)\n\n        echo -e \"\\n[amd64_tags]\\n$amd64_tags\"\n        echo -e \"\\n[arm64_tags]\\n$arm64_tags\"\n        echo -e \"\\n[base_tags]\\n$base_tags\"\n\n        echo \"tags=$(printf \"%s \" $base_tags | sed 's/\\s*$//')\" >> $GITHUB_OUTPUT\n      env:\n        ALL_TAGS: ${{ steps.get-all-tags.outputs.tags }}\n      shell: bash\n\n    - name: Create Docker manifest and delete -amd64 and -arm64 tags\n      run: |\n        for base_tag in $BASE_TAGS; do\n          echo -e \"\\nbase_tag: $base_tag\"\n\n          amd64_tag=$(printf \"%s\\n\" $ALL_TAGS | grep \"^$base_tag\\-amd64\" || true)\n          arm64_tag=$(printf \"%s\\n\" $ALL_TAGS | grep \"^$base_tag\\-arm64\" || true)\n\n          echo \"amd64_tag: $amd64_tag\"\n          echo \"arm64_tag: $arm64_tag\"\n\n          if [ \"$amd64_tag\" != \"\" ]; then\n            amd64_image=\"${{ steps.set-image-name.outputs.image-name }}:$amd64_tag\"\n          else\n            echo \"No amd64 tag found for '$base_tag'.\"\n            continue\n          fi\n\n          if [ \"$arm64_tag\" != \"\" ]; then\n            arm64_image=\"${{ steps.set-image-name.outputs.image-name }}:$arm64_tag\"\n          else\n            echo \"No arm64 tag found for '$base_tag'.\"\n            continue\n          fi\n\n          echo \"amd64_image: $amd64_image\"\n          echo \"arm64_image: $arm64_image\"\n\n          if docker manifest create ${{ steps.set-image-name.outputs.image-name }}:$base_tag \\\n            $amd64_image \\\n            $arm64_image; then\n\n            docker manifest push ${{ steps.set-image-name.outputs.image-name }}:$base_tag\n\n            # Delete amd64_image and arm64_image\n            curl -X DELETE \\\n              -H \"Authorization: Bearer ${{ github.token }}\" \\\n              -H \"Accept: application/vnd.github.v3+json\" \\\n              https://api.github.com/orgs/${{ github.repository_owner }}/packages/container/${{ inputs.package-name }}/versions/$amd64_tag\n            curl -X DELETE \\\n              -H \"Authorization: Bearer ${{ github.token }}\" \\\n              -H \"Accept: application/vnd.github.v3+json\" \\\n              https://api.github.com/orgs/${{ github.repository_owner }}/packages/container/${{ inputs.package-name }}/versions/$arm64_tag\n          fi\n        done\n      env:\n        ALL_TAGS: ${{ steps.get-all-tags.outputs.tags }}\n        BASE_TAGS: ${{ steps.get-base-tags.outputs.tags }}\n      shell: bash\n"
  },
  {
    "path": ".github/actions/docker-build/action.yaml",
    "content": "name: docker-build\ndescription: Composite action to build images only.\n\ninputs:\n  platform:\n    description: Target platform.\n    required: true\n  cache-tag-suffix:\n    description: Suffix of the target cache tag.\n    required: true\n  additional-repos:\n    description: Additional target .repos file.\n    default: \"\"\n    required: false\n  build-args:\n    description: Additional build args.\n    required: false\n  image-artifact-name:\n    description: Name of the exported docker image artifact.\n    default: \"\"\n    required: false\n  image-tag:\n    description: Tag for the saved docker image.\n    default: autoware:health-check-${{ github.sha }}\n    required: false\n\nruns:\n  using: composite\n  steps:\n    - name: Setup Docker Buildx\n      uses: docker/setup-buildx-action@v3\n\n    - name: Install vcs2l\n      run: |\n        sudo apt-get -y update\n        sudo apt-get -y install python3-pip\n        pipx install vcs2l\n      shell: bash\n\n    - name: Run vcs import\n      run: |\n        mkdir -p src\n        vcs import --shallow src < repositories/autoware.repos\n      shell: bash\n\n    - name: Import additional repositories\n      if: ${{ inputs.additional-repos != '' }}\n      run: |\n        vcs import --shallow --force src < ${{ inputs.additional-repos }}\n      shell: bash\n\n    - name: Cache ccache\n      uses: actions/cache@v4\n      if: ${{ github.ref == 'refs/heads/main'}}\n      id: cache-ccache\n      with:\n        path: |\n          root-ccache\n        key: ccache-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-${{ hashFiles('src/**/*.cpp') }}\n        restore-keys: |\n          ccache-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-\n          ccache-${{ inputs.platform }}-\n\n    - name: Cache apt-get\n      uses: actions/cache@v4\n      if: ${{ github.ref == 'refs/heads/main'}}\n      id: cache-apt-get\n      with:\n        path: |\n          var-cache-apt\n        key: apt-get-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-${{ hashFiles('src/**/package.xml') }}\n        restore-keys: |\n          apt-get-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-\n          apt-get-${{ inputs.platform }}-\n\n    - name: Restore ccache\n      uses: actions/cache/restore@v4\n      if: ${{ github.ref != 'refs/heads/main'}}\n      with:\n        path: |\n          root-ccache\n        key: ccache-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-${{ hashFiles('src/**/*.cpp') }}\n        restore-keys: |\n          ccache-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-\n          ccache-${{ inputs.platform }}-\n\n    - name: Restore apt-get\n      uses: actions/cache/restore@v4\n      if: ${{ github.ref != 'refs/heads/main'}}\n      with:\n        path: |\n          var-cache-apt\n        key: apt-get-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-${{ hashFiles('src/**/package.xml') }}\n        restore-keys: |\n          apt-get-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-\n          apt-get-${{ inputs.platform }}-\n\n    - name: Inject cache into docker\n      # TODO(youtalk): Use the release version again\n      uses: reproducible-containers/buildkit-cache-dance@7c892679bab8ff382a8c88ab7f973d5e30a8f239\n      with:\n        utility-image: ghcr.io/containerd/busybox:latest\n        cache-map: |\n          {\n            \"root-ccache\": \"/root/.ccache\",\n            \"var-cache-apt\": \"/var/cache/apt\"\n          }\n        skip-extraction: ${{ steps.cache-ccache.outputs.cache-hit && steps.cache-apt-get.outputs.cache-hit }}\n\n    - name: Login to GitHub Container Registry\n      uses: docker/login-action@v3\n      with:\n        registry: ghcr.io\n        username: ${{ github.repository_owner }}\n        password: ${{ github.token }}\n\n    - name: Run docker build\n      uses: docker/build-push-action@v6\n      with:\n        file: docker/Dockerfile\n        context: .\n        push: false\n        load: true\n        target: universe-devel\n        build-args: ${{ inputs.build-args }}\n        cache-from: type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ inputs.platform }}-main\n        tags: ${{ inputs.image-tag }}\n\n    - name: Save Docker image\n      if: ${{ inputs.image-artifact-name != '' }}\n      run: docker save ${{ inputs.image-tag }} | gzip > /tmp/autoware-image.tar.gz\n      shell: bash\n    - name: Upload Docker image artifact\n      if: ${{ inputs.image-artifact-name != '' }}\n      uses: actions/upload-artifact@v4\n      with:\n        name: ${{ inputs.image-artifact-name }}\n        path: /tmp/autoware-image.tar.gz\n"
  },
  {
    "path": ".github/actions/docker-build-and-push/action.yaml",
    "content": "name: docker-build-and-push\ndescription: Composite action to build and push non CUDA images to registry.\n\ninputs:\n  platform:\n    description: Target platform.\n    required: true\n  target-image:\n    description: Target docker image name in the registry.\n    required: true\n  build-args:\n    description: Additional build args.\n    required: false\n  max-parallelism:\n    default: 2\n    description: Maximum parallelism for buildkitd.\n    required: false\n  suffix:\n    description: Suffix for image tags.\n    required: false\n    default: \"\"\n  set-latest:\n    description: Whether to set the latest flavor for images.\n    required: false\n    default: true\n  # TODO(mitsudome-r): Remove this input after Jazzy porting is complete\n  core-only:\n    description: Whether to build only the core images.\n    required: false\n    default: false\n\nruns:\n  using: composite\n  steps:\n    - name: Install jq and vcs2l\n      run: |\n        sudo apt-get -y update\n        sudo apt-get -y install jq python3-pip\n        pip install --no-cache-dir vcs2l\n      shell: bash\n\n    - name: Run vcs import\n      run: |\n        mkdir -p src\n        vcs import --shallow src < repositories/autoware.repos\n      shell: bash\n\n    - name: Setup Docker Buildx\n      uses: docker/setup-buildx-action@v3\n      with:\n        buildkitd-config-inline: |\n          [worker.oci]\n            max-parallelism = ${{ inputs.max-parallelism }}\n        install: true\n\n    - name: Restore ccache\n      uses: actions/cache/restore@v4\n      with:\n        path: |\n          root-ccache\n        key: ccache-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}${{ hashFiles('src/**/*.cpp') }}\n        restore-keys: |\n          ccache-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}\n          ccache-${{ inputs.platform }}-\n    - name: Restore apt-get\n      uses: actions/cache/restore@v4\n      with:\n        path: |\n          var-cache-apt\n        key: apt-get-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}${{ hashFiles('src/**/package.xml') }}\n        restore-keys: |\n          apt-get-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}\n          apt-get-${{ inputs.platform }}-\n\n    - name: Inject cache into docker\n      # TODO(youtalk): Use the release version again\n      uses: reproducible-containers/buildkit-cache-dance@7c892679bab8ff382a8c88ab7f973d5e30a8f239\n      with:\n        utility-image: ghcr.io/containerd/busybox:latest\n        cache-map: |\n          {\n            \"root-ccache\": \"/root/.ccache\",\n            \"var-cache-apt\": \"/var/cache/apt\"\n          }\n        skip-extraction: true\n\n    - name: Get current date\n      id: date\n      run: echo \"date=$(date +'%Y%m%d')\" >> $GITHUB_OUTPUT\n      shell: bash\n\n    - name: Docker meta for autoware:core-common-devel\n      id: meta-core-common-devel\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=core-common-devel${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=core-common-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=core-common-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-core-common-devel\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:core\n      id: meta-core\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=core${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=core-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=core-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-core\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:core-devel\n      id: meta-core-devel\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=core-devel${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=core-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=core-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-core-devel\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-common-devel\n      id: meta-universe-common-devel\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-common-devel${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-common-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-common-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-common-devel\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-sensing-perception-devel\n      id: meta-universe-sensing-perception-devel\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-sensing-perception-devel${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-sensing-perception-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-sensing-perception-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-sensing-perception-devel\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-sensing-perception\n      id: meta-universe-sensing-perception\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-sensing-perception${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-sensing-perception-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-sensing-perception-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-sensing-perception\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-localization-mapping-devel\n      id: meta-universe-localization-mapping-devel\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-localization-mapping-devel${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-localization-mapping-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-localization-mapping-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-localization-mapping-devel\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-localization-mapping\n      id: meta-universe-localization-mapping\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-localization-mapping${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-localization-mapping-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-localization-mapping-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-localization-mapping\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-planning-control-devel\n      id: meta-universe-planning-control-devel\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-planning-control-devel${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-planning-control-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-planning-control-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-planning-control-devel\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-planning-control\n      id: meta-universe-planning-control\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-planning-control${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-planning-control-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-planning-control-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-planning-control\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-vehicle-system-devel\n      id: meta-universe-vehicle-system-devel\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-vehicle-system-devel${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-vehicle-system-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-vehicle-system-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-vehicle-system-devel\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-vehicle-system\n      id: meta-universe-vehicle-system\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-vehicle-system${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-vehicle-system-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-vehicle-system-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-vehicle-system\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-visualization-devel\n      id: meta-universe-visualization-devel\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-visualization-devel${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-visualization-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-visualization-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-visualization-devel\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-visualization\n      id: meta-universe-visualization\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-visualization${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-visualization-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-visualization-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-visualization\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-api-devel\n      id: meta-universe-api-devel\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-api-devel${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-api-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-api-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-api-devel\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-api\n      id: meta-universe-api\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-api${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-api-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-api-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-api\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-devel\n      id: meta-universe-devel\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-devel${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-devel\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe\n      id: meta-universe\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe${{ inputs.suffix }}-${{ inputs.platform }}\n          type=raw,value=universe-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-,suffix=${{ inputs.suffix }}-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe\n        flavor: |\n          latest=${{ inputs.set-latest }}\n\n    - name: Login to GitHub Container Registry\n      uses: docker/login-action@v3\n      with:\n        registry: ghcr.io\n        username: ${{ github.repository_owner }}\n        password: ${{ github.token }}\n\n    - name: set build targets\n      id: set-build-targets\n      run: |\n        echo \"build_targets=${{ fromJSON(inputs['core-only']) && 'core-common-devel' || 'core-common-devel,core,core-devel,universe-common-devel,universe-sensing-perception-devel,universe-sensing-perception,universe-localization-mapping-devel,universe-localization-mapping,universe-planning-control-devel,universe-planning-control,universe-vehicle-system-devel,universe-vehicle-system,universe-visualization-devel,universe-visualization,universe-api-devel,universe-api,universe-devel,universe'}}\" >> $GITHUB_OUTPUT\n      shell: bash\n\n    - name: Build and Push to GitHub Container Registry\n      uses: docker/bake-action@v5\n      with:\n        push: true\n        targets: |\n          ${{ steps.set-build-targets.outputs.build_targets }}\n        files: |\n          docker/docker-bake.hcl\n          ${{ steps.meta-core-common-devel.outputs.bake-file }}\n          ${{ steps.meta-core.outputs.bake-file }}\n          ${{ steps.meta-core-devel.outputs.bake-file }}\n          ${{ steps.meta-universe-common-devel.outputs.bake-file }}\n          ${{ steps.meta-universe-sensing-perception-devel.outputs.bake-file }}\n          ${{ steps.meta-universe-sensing-perception.outputs.bake-file }}\n          ${{ steps.meta-universe-localization-mapping-devel.outputs.bake-file }}\n          ${{ steps.meta-universe-localization-mapping.outputs.bake-file }}\n          ${{ steps.meta-universe-planning-control-devel.outputs.bake-file }}\n          ${{ steps.meta-universe-planning-control.outputs.bake-file }}\n          ${{ steps.meta-universe-vehicle-system-devel.outputs.bake-file }}\n          ${{ steps.meta-universe-vehicle-system.outputs.bake-file }}\n          ${{ steps.meta-universe-visualization-devel.outputs.bake-file }}\n          ${{ steps.meta-universe-visualization.outputs.bake-file }}\n          ${{ steps.meta-universe-api-devel.outputs.bake-file }}\n          ${{ steps.meta-universe-api.outputs.bake-file }}\n          ${{ steps.meta-universe-devel.outputs.bake-file }}\n          ${{ steps.meta-universe.outputs.bake-file }}\n        provenance: false\n        set: |\n          ${{ inputs.build-args }}\n"
  },
  {
    "path": ".github/actions/docker-build-and-push-base/action.yaml",
    "content": "name: docker-build-and-push-base\ndescription: Composite action to build and push base images to registry.\n\ninputs:\n  target-image:\n    description: Target docker image name in the registry.\n    required: true\n  build-args:\n    description: Additional build args.\n    required: false\n  max-parallelism:\n    default: 2\n    description: Maximum parallelism for buildkitd.\n    required: false\n  set-latest:\n    description: Whether to set the latest flavor for images.\n    required: false\n    default: true\n  suffix:\n    description: Suffix for image tags.\n    required: false\n    default: \"\"\n\nruns:\n  using: composite\n  steps:\n    - name: Setup Docker Buildx\n      uses: docker/setup-buildx-action@v3\n      with:\n        buildkitd-config-inline: |\n          [worker.oci]\n            max-parallelism = ${{ inputs.max-parallelism }}\n        install: true\n\n    - name: Get current date\n      id: date\n      run: echo \"date=$(date +'%Y%m%d')\" >> $GITHUB_OUTPUT\n      shell: bash\n\n    - name: Docker meta for autoware-base:latest\n      id: meta-base\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=${{ steps.date.outputs.date }}${{ inputs.suffix }}\n          type=raw,value=latest${{ inputs.suffix }}\n        bake-target: docker-metadata-action-base\n        flavor: |\n          latest=${{ inputs.set-latest }}\n\n    - name: Docker meta for autoware-base:cuda-latest\n      id: meta-base-cuda\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=cuda-latest${{ inputs.suffix }}\n          type=raw,value=cuda-${{ steps.date.outputs.date }}${{ inputs.suffix }}\n        bake-target: docker-metadata-action-base-cuda\n        flavor: |\n          latest=false\n\n    - name: Login to GitHub Container Registry\n      uses: docker/login-action@v3\n      with:\n        registry: ghcr.io\n        username: ${{ github.repository_owner }}\n        password: ${{ github.token }}\n\n    - name: Build and Push to GitHub Container Registry\n      uses: docker/bake-action@v5\n      with:\n        push: true\n        files: |\n          docker/docker-bake-base.hcl\n          ${{ steps.meta-base.outputs.bake-file }}\n          ${{ steps.meta-base-cuda.outputs.bake-file }}\n        provenance: false\n        set: |\n          ${{ inputs.build-args }}\n"
  },
  {
    "path": ".github/actions/docker-build-and-push-cuda/action.yaml",
    "content": "name: docker-build-and-push-cuda\ndescription: Composite action to build and push CUDA images to registry.\n\ninputs:\n  platform:\n    description: Target platform.\n    required: true\n  target-image:\n    description: Target docker image name in the registry.\n    required: true\n  build-args:\n    description: Additional build args.\n    required: false\n  max-parallelism:\n    default: 2\n    description: Maximum parallelism for buildkitd.\n    required: false\n  suffix:\n    description: Suffix for image tags (e.g., -jazzy).\n    required: false\n    default: \"\"\n\nruns:\n  using: composite\n  steps:\n    - name: Install jq and vcs2l\n      run: |\n        sudo apt-get -y update\n        sudo apt-get -y install curl gnupg lsb-release\n\n        # Add the ROS 2 GPG key and repository\n        sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg\n        echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main\" | \\\n          sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null\n\n        sudo apt-get update\n        sudo apt-get install -y jq python3-pip python3-vcs2l\n      shell: bash\n\n    - name: Run vcs import\n      run: |\n        mkdir -p src\n        vcs import --shallow src < repositories/autoware.repos\n      shell: bash\n\n    - name: Setup Docker Buildx\n      uses: docker/setup-buildx-action@v3\n      with:\n        buildkitd-config-inline: |\n          [worker.oci]\n            max-parallelism = ${{ inputs.max-parallelism }}\n        install: true\n\n    - name: Restore ccache\n      uses: actions/cache/restore@v4\n      with:\n        path: |\n          root-ccache\n        key: ccache-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}${{ hashFiles('src/**/*.cpp') }}\n        restore-keys: |\n          ccache-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}\n          ccache-${{ inputs.platform }}-\n\n    - name: Restore apt-get\n      uses: actions/cache/restore@v4\n      with:\n        path: |\n          var-cache-apt\n        key: apt-get-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}${{ hashFiles('src/**/package.xml') }}\n        restore-keys: |\n          apt-get-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}\n          apt-get-${{ inputs.platform }}-\n\n    - name: Inject cache into docker\n      # TODO(youtalk): Use the release version again\n      uses: reproducible-containers/buildkit-cache-dance@7c892679bab8ff382a8c88ab7f973d5e30a8f239\n      with:\n        utility-image: ghcr.io/containerd/busybox:latest\n        cache-map: |\n          {\n            \"root-ccache\": \"/root/.ccache\",\n            \"var-cache-apt\": \"/var/cache/apt\"\n          }\n        skip-extraction: true\n\n    - name: Get current date\n      id: date\n      run: echo \"date=$(date +'%Y%m%d')\" >> $GITHUB_OUTPUT\n      shell: bash\n\n    - name: Docker meta for autoware:universe-common-devel-cuda\n      id: meta-universe-common-devel-cuda\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-common-devel${{ inputs.suffix }}-cuda-${{ inputs.platform }}\n          type=raw,value=universe-common-devel${{ inputs.suffix }}-cuda-${{ steps.date.outputs.date }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-common-devel${{ inputs.suffix }}-cuda-,suffix=-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-common-devel-cuda\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-sensing-perception-devel-cuda\n      id: meta-universe-sensing-perception-devel-cuda\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-sensing-perception-devel${{ inputs.suffix }}-cuda-${{ inputs.platform }}\n          type=raw,value=universe-sensing-perception-devel${{ inputs.suffix }}-cuda-${{ steps.date.outputs.date }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-sensing-perception-devel${{ inputs.suffix }}-cuda-,suffix=-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-sensing-perception-devel-cuda\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-sensing-perception-cuda\n      id: meta-universe-sensing-perception-cuda\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-sensing-perception${{ inputs.suffix }}-cuda-${{ inputs.platform }}\n          type=raw,value=universe-sensing-perception${{ inputs.suffix }}-cuda-${{ steps.date.outputs.date }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-sensing-perception${{ inputs.suffix }}-cuda-,suffix=-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-sensing-perception-cuda\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-devel-cuda\n      id: meta-universe-devel-cuda\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe-devel${{ inputs.suffix }}-cuda-${{ inputs.platform }}\n          type=raw,value=universe-devel${{ inputs.suffix }}-cuda-${{ steps.date.outputs.date }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe-devel${{ inputs.suffix }}-cuda-,suffix=-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-devel-cuda\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware:universe-cuda\n      id: meta-universe-cuda\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=universe${{ inputs.suffix }}-cuda-${{ inputs.platform }}\n          type=raw,value=universe${{ inputs.suffix }}-cuda-${{ steps.date.outputs.date }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=universe${{ inputs.suffix }}-cuda-,suffix=-${{ inputs.platform }}\n        bake-target: docker-metadata-action-universe-cuda\n        flavor: |\n          latest=false\n\n    - name: Login to GitHub Container Registry\n      uses: docker/login-action@v3\n      with:\n        registry: ghcr.io\n        username: ${{ github.repository_owner }}\n        password: ${{ github.token }}\n\n    - name: Build and Push to GitHub Container Registry\n      uses: docker/bake-action@v5\n      with:\n        push: true\n        files: |\n          docker/docker-bake-cuda.hcl\n          ${{ steps.meta-universe-common-devel-cuda.outputs.bake-file }}\n          ${{ steps.meta-universe-sensing-perception-devel-cuda.outputs.bake-file }}\n          ${{ steps.meta-universe-sensing-perception-cuda.outputs.bake-file }}\n          ${{ steps.meta-universe-devel-cuda.outputs.bake-file }}\n          ${{ steps.meta-universe-cuda.outputs.bake-file }}\n        provenance: false\n        set: |\n          ${{ inputs.build-args }}\n"
  },
  {
    "path": ".github/actions/docker-build-and-push-tools/action.yaml",
    "content": "name: docker-build-and-push-tools\ndescription: Composite action to build and push tools images to registry.\n\ninputs:\n  platform:\n    description: Target platform.\n    required: true\n  target-image:\n    description: Target docker image name in the registry.\n    required: true\n  build-args:\n    description: Additional build args.\n    required: false\n  max-parallelism:\n    default: 2\n    description: Maximum parallelism for buildkitd.\n    required: false\n\nruns:\n  using: composite\n  steps:\n    - name: Install jq and vcs2l\n      run: |\n        sudo apt-get -y update\n        sudo apt-get -y install jq python3-pip\n        pip install --no-cache-dir vcs2l\n      shell: bash\n\n    - name: Run vcs import\n      run: |\n        mkdir -p src\n        vcs import --shallow src < repositories/simulator.repos\n      shell: bash\n\n    - name: Setup Docker Buildx\n      uses: docker/setup-buildx-action@v3\n      with:\n        buildkitd-config-inline: |\n          [worker.oci]\n            max-parallelism = ${{ inputs.max-parallelism }}\n        install: true\n\n    - name: Cache ccache\n      uses: actions/cache@v4\n      with:\n        path: |\n          root-ccache\n        key: ccache-tools-${{ inputs.platform }}-${{ hashFiles('src/**/*.cpp') }}\n        restore-keys: |\n          ccache-tools-${{ inputs.platform }}-\n\n    - name: Cache apt-get\n      uses: actions/cache@v4\n      with:\n        path: |\n          var-cache-apt\n        key: apt-get-tools-${{ inputs.platform }}-${{ hashFiles('src/**/package.xml') }}\n        restore-keys: |\n          apt-get-tools-${{ inputs.platform }}-\n\n    - name: Inject cache into docker\n      # TODO(youtalk): Use the release version again\n      uses: reproducible-containers/buildkit-cache-dance@7c892679bab8ff382a8c88ab7f973d5e30a8f239\n      with:\n        utility-image: ghcr.io/containerd/busybox:latest\n        cache-map: |\n          {\n            \"root-ccache\": \"/root/.ccache\",\n            \"var-cache-apt\": \"/var/cache/apt\"\n          }\n        skip-extraction: ${{ steps.cache-ccache.outputs.cache-hit && steps.cache-apt-get.outputs.cache-hit }}\n\n    - name: Get current date\n      id: date\n      run: echo \"date=$(date +'%Y%m%d')\" >> $GITHUB_OUTPUT\n      shell: bash\n\n    - name: Docker meta for autoware-tools:visualizer\n      id: meta-visualizer\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=visualizer-${{ inputs.platform }}\n          type=raw,value=visualizer-${{ steps.date.outputs.date }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=visualizer-,suffix=-${{ inputs.platform }}\n        bake-target: docker-metadata-action-visualizer\n        flavor: |\n          latest=false\n\n    - name: Docker meta for autoware-tools:scenario-simulator\n      id: meta-scenario-simulator\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }}\n        tags: |\n          type=raw,value=scenario-simulator-${{ inputs.platform }}\n          type=raw,value=scenario-simulator-${{ steps.date.outputs.date }}-${{ inputs.platform }}\n          type=ref,event=tag,prefix=scenario-simulator-,suffix=-${{ inputs.platform }}\n        bake-target: docker-metadata-action-scenario-simulator\n        flavor: |\n          latest=false\n\n    - name: Login to GitHub Container Registry\n      uses: docker/login-action@v3\n      with:\n        registry: ghcr.io\n        username: ${{ github.repository_owner }}\n        password: ${{ github.token }}\n\n    - name: Build and Push to GitHub Container Registry\n      uses: docker/bake-action@v5\n      with:\n        push: true\n        files: |\n          docker/tools/docker-bake.hcl\n          ${{ steps.meta-visualizer.outputs.bake-file }}\n          ${{ steps.meta-scenario-simulator.outputs.bake-file }}\n        provenance: false\n        set: |\n          ${{ inputs.build-args }}\n"
  },
  {
    "path": ".github/actions/free-disk-space/action.yaml",
    "content": "name: free-disk-space\ndescription: \"\"\n\nruns:\n  using: composite\n  steps:\n    - name: Install sudo\n      run: |\n        if ! (command -v sudo >/dev/null 2>&1); then\n            apt-get -y update\n            apt-get -y install sudo\n        fi\n      shell: bash\n\n    - name: Free Disk Space (Ubuntu)\n      uses: jlumbroso/free-disk-space@main\n      with:\n        # this might remove tools that are actually needed,\n        # if set to \"true\" but frees about 6 GB\n        tool-cache: true\n\n        # all of these default to true, but feel free to set to\n        # \"false\" if necessary for your workflow\n        android: true\n        dotnet: true\n        haskell: true\n        large-packages: true\n        docker-images: true\n        swap-storage: false\n"
  },
  {
    "path": ".github/dependabot.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nversion: 2\nupdates:\n  - package-ecosystem: github-actions\n    directory: /\n    # https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#scheduleinterval\n    schedule:\n      interval: monthly\n    open-pull-requests-limit: 1\n    labels:\n      - tag:bot\n      - type:github-actions\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "## Description\n\n## How was this PR tested?\n"
  },
  {
    "path": ".github/stale.yml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\n# Modified from https://github.com/probot/stale#usage\n\n# Number of days of inactivity before an Issue or Pull Request with the stale label is closed\ndaysUntilClose: false\n\n# Label to use when marking as stale\nstaleLabel: status:stale\n\n# Comment to post when marking as stale\nmarkComment: >\n  This pull request has been automatically marked as stale because it has not had\n  recent activity.\n"
  },
  {
    "path": ".github/sync-files.yaml",
    "content": "- repository: autowarefoundation/sync-file-templates\n  source-dir: sources\n  files:\n    - source: .github/ISSUE_TEMPLATE/bug.yaml\n    - source: .github/ISSUE_TEMPLATE/config.yml\n    - source: .github/ISSUE_TEMPLATE/task.yaml\n    - source: .github/dependabot.yaml\n    - source: .github/stale.yml\n    - source: .github/workflows/backport.yaml\n    - source: .github/workflows/comment-on-pr.yaml\n    - source: .github/workflows/github-release.yaml\n    - source: .github/workflows/pre-commit-optional.yaml\n    - source: .github/workflows/pre-commit.yaml\n    - source: .github/workflows/semantic-pull-request.yaml\n    - source: .github/workflows/spell-check-differential.yaml\n    - source: .github/workflows/spell-check-daily.yaml\n    - source: .github/workflows/sync-files.yaml\n    - source: .clang-format\n    - source: .clang-tidy\n    - source: .markdown-link-check.json\n    - source: .markdownlint.yaml\n    - source: .pre-commit-config-optional.yaml\n    - source: .pre-commit-config.yaml\n    - source: .prettierignore\n    - source: .prettierrc.yaml\n    - source: .yamllint.yaml\n    - source: CODE_OF_CONDUCT.md\n    - source: CONTRIBUTING.md\n    - source: CPPLINT.cfg\n    - source: DISCLAIMER.md\n    - source: LICENSE\n    - source: setup.cfg\n"
  },
  {
    "path": ".github/workflows/autoware-base.yaml",
    "content": "name: autoware-base\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - .github/actions/docker-build-and-push-base\n      - .github/workflows/autoware-base.yaml\n      - amd64.env\n      - ansible-galaxy-requirements.yaml\n      - ansible/playbooks/openadkit.yaml\n      - ansible/roles/**\n      - arm64.env\n      - docker/Dockerfile.base\n      - docker/etc\n      - docker/scripts/cleanup_*.sh\n      - setup-dev-env.sh\n  schedule:\n    - cron: 0 0 15 * * # every 15th of the month\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  autoware-base:\n    strategy:\n      matrix:\n        platform: [humble, jazzy]\n        include:\n          - platform: humble\n            runner: ubuntu-22.04\n            env-file: amd64.env\n            suffix: \"\" # no suffix for humble since it is default\n            set-latest: true\n          - platform: jazzy\n            runner: ubuntu-24.04\n            env-file: amd64_jazzy.env\n            suffix: -jazzy\n            set-latest: false\n    runs-on: ${{ matrix.runner }}\n    steps:\n      - name: Check out this repository\n        uses: actions/checkout@v4\n\n      - name: Free disk space\n        uses: ./.github/actions/free-disk-space\n\n      - name: Set up QEMU\n        uses: docker/setup-qemu-action@v3\n        with: # cSpell:ignore tonistiigi, binfmt\n          image: tonistiigi/binfmt:qemu-v7.0.0\n\n      - name: Load env file\n        id: load-env\n        uses: falti/dotenv-action@v1\n        with:\n          path: ${{ matrix.env-file }}\n          export-variables: true\n          log-variables: true\n\n      - name: Build Autoware's base images\n        uses: ./.github/actions/docker-build-and-push-base\n        with:\n          target-image: autoware-base\n          build-args: |\n            *.platform=linux/amd64,linux/arm64\n            *.args.ROS_DISTRO=${{ steps.load-env.outputs.rosdistro }}\n            *.args.BASE_IMAGE=${{ steps.load-env.outputs.base_image }}\n          suffix: ${{ matrix.suffix }}\n          set-latest: ${{ matrix.set-latest }}\n"
  },
  {
    "path": ".github/workflows/backport.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: backport\non:\n  pull_request_target:\n    types:\n      - closed\n      - labeled\n\njobs:\n  backport:\n    runs-on: ubuntu-22.04\n    # Only react to merged PRs for security reasons.\n    # See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target.\n    if: >\n      github.event.pull_request.merged\n      && (\n        github.event.action == 'closed'\n        || (\n          github.event.action == 'labeled'\n          && contains(github.event.label.name, 'backport')\n        )\n      )\n    steps:\n      - name: Generate token\n        id: generate-token\n        uses: tibdex/github-app-token@v2\n        with:\n          app_id: ${{ secrets.APP_ID }}\n          private_key: ${{ secrets.PRIVATE_KEY }}\n\n      - uses: tibdex/backport@v2\n        id: backport\n        with:\n          github_token: ${{ steps.generate-token.outputs.token }}\n          title_template: \"<%= title %> (backport #<%= number %>)\"\n\n      - name: Request review from original author\n        env:\n          GH_TOKEN: ${{ steps.generate-token.outputs.token }}\n          PR_JSON: ${{ steps.backport.outputs.created_pull_requests }}\n          ORIGINAL_AUTHOR: ${{ github.event.pull_request.user.login }}\n        run: |\n          set -e\n          echo \"Created PRs JSON: $PR_JSON\"\n          echo \"Original PR Author: $ORIGINAL_AUTHOR\"\n\n          # Use 'jq' to parse the JSON and extract all PR numbers\n          pr_numbers=($(echo \"$PR_JSON\" | jq -r 'to_entries | .[] | .value'))\n\n          # Loop through the array of PR numbers\n          for pr_num in \"${pr_numbers[@]}\"; do\n            if [ -n \"$pr_num\" ]; then\n              echo \"Requesting review for PR #$pr_num from $ORIGINAL_AUTHOR...\"\n              gh pr edit \"$pr_num\" --add-reviewer \"$ORIGINAL_AUTHOR\" --repo \"${{ github.repository }}\"\n            fi\n          done\n"
  },
  {
    "path": ".github/workflows/bump-repo-versions-autoware.yaml",
    "content": "name: bump-repo-versions-autoware\n\non:\n  schedule:\n    - cron: 0 0,6,12,18 * * *\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  create-version-update-pr:\n    runs-on: ubuntu-22.04\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Generate GitHub App token\n        id: generate-token\n        uses: tibdex/github-app-token@v2\n        with:\n          app_id: ${{ secrets.APP_ID }}\n          private_key: ${{ secrets.PRIVATE_KEY }}\n\n      - name: Create PRs to update VCS repositories for autoware.repos\n        uses: autowarefoundation/autoware-github-actions/create-prs-to-update-vcs-repositories@v1\n        with:\n          token: ${{ steps.generate-token.outputs.token }}\n          repo_name: autowarefoundation/autoware\n          parent_dir: .\n          targets: major minor patch\n          base_branch: main\n          new_branch_prefix: feat/update-\n          autoware_repos_file_name: repositories/autoware.repos\n          verbosity: 0\n"
  },
  {
    "path": ".github/workflows/bump-repo-versions-simulator.yaml",
    "content": "name: bump-repo-versions-simulator\n\non:\n  schedule:\n    - cron: 0 0,6,12,18 * * *\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  create-version-update-pr:\n    runs-on: ubuntu-22.04\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Generate GitHub App token\n        id: generate-token\n        uses: tibdex/github-app-token@v2\n        with:\n          app_id: ${{ secrets.APP_ID }}\n          private_key: ${{ secrets.PRIVATE_KEY }}\n\n      - name: Create PRs to update VCS repositories for simulator.repos\n        uses: autowarefoundation/autoware-github-actions/create-prs-to-update-vcs-repositories@v1\n        with:\n          token: ${{ steps.generate-token.outputs.token }}\n          repo_name: autowarefoundation/autoware\n          parent_dir: .\n          targets: major minor\n          base_branch: main\n          new_branch_prefix: feat/update-\n          autoware_repos_file_name: repositories/simulator.repos\n          verbosity: 0\n"
  },
  {
    "path": ".github/workflows/bump-repo-versions-tools.yaml",
    "content": "name: bump-repo-versions-tools\n\non:\n  schedule:\n    - cron: 0 0,6,12,18 * * *\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  create-version-update-pr:\n    runs-on: ubuntu-22.04\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Generate GitHub App token\n        id: generate-token\n        uses: tibdex/github-app-token@v2\n        with:\n          app_id: ${{ secrets.APP_ID }}\n          private_key: ${{ secrets.PRIVATE_KEY }}\n\n      - name: Create PRs to update VCS repositories for tools.repos\n        uses: autowarefoundation/autoware-github-actions/create-prs-to-update-vcs-repositories@v1\n        with:\n          token: ${{ steps.generate-token.outputs.token }}\n          repo_name: autowarefoundation/autoware\n          parent_dir: .\n          targets: major minor patch\n          base_branch: main\n          new_branch_prefix: feat/update-\n          autoware_repos_file_name: repositories/tools.repos\n          verbosity: 0\n"
  },
  {
    "path": ".github/workflows/comment-on-pr.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: comment-on-pr\non:\n  pull_request_target:\n\njobs:\n  comment-on-pr:\n    runs-on: ubuntu-22.04\n    permissions:\n      pull-requests: write\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Initial PR comment\n        uses: marocchino/sticky-pull-request-comment@v2\n        with:\n          message: |\n            Thank you for contributing to the Autoware project!\n\n            🚧 If your pull request is in progress, [switch it to draft mode](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft).\n\n            Please ensure:\n            - You've checked our [contribution guidelines](https://autowarefoundation.github.io/autoware-documentation/main/contributing/).\n            - Your PR follows our [pull request guidelines](https://autowarefoundation.github.io/autoware-documentation/main/contributing/pull-request-guidelines/).\n            - All required CI checks pass before [marking the PR ready for review](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#marking-a-pull-request-as-ready-for-review).\n"
  },
  {
    "path": ".github/workflows/dco.yaml",
    "content": "name: DCO\n# ref: https://github.com/anchore/syft/pull/2926/files\non:\n  pull_request:\njobs:\n  dco:\n    runs-on: ubuntu-22.04\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Setup Python 3.x\n        uses: actions/setup-python@v5\n        with:\n          python-version: 3.x\n\n      - name: Check DCO\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: |\n          pip3 install -U dco-check\n          dco-check --verbose --exclude-pattern 'pre-commit-ci\\[bot\\]@users\\.noreply\\.github\\.com'\n"
  },
  {
    "path": ".github/workflows/docker-build-and-push.yaml",
    "content": "name: docker-build-and-push\n\non:\n  push:\n    branches:\n      - main\n    tags:\n      - \"*.*.*\"\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  load-env:\n    uses: ./.github/workflows/load-env.yaml\n    with:\n      env_file: amd64.env\n\n  docker-build-and-push:\n    needs: load-env\n    strategy:\n      matrix:\n        platform: [amd64, arm64]\n        include:\n          - platform: amd64\n            runner: ubuntu-22.04\n            arch-platform: linux/amd64\n            lib-dir: x86_64\n          - platform: arm64\n            runner: ubuntu-22.04-arm\n            arch-platform: linux/arm64\n            lib-dir: aarch64\n    runs-on: ${{ matrix.runner }}\n    steps:\n      # https://github.com/actions/checkout/issues/211\n      - name: Change permission of workspace\n        run: |\n          sudo chown -R $USER:$USER ${{ github.workspace }}\n\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Set git config\n        uses: autowarefoundation/autoware-github-actions/set-git-config@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Get changed files\n        id: changed-files\n        uses: step-security/changed-files@v46\n        with:\n          files: |\n            *.env\n            repositories/*.repos\n            .github/actions/combine-multi-arch-images/action.yaml\n            .github/actions/docker-build-and-push*/action.yaml\n            .github/workflows/docker-build-and-push.yaml\n            ansible-galaxy-requirements.yaml\n            ansible/**\n            docker/**\n\n      - name: Free disk space\n        if: ${{ steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'workflow_dispatch' ||\n          (github.event_name == 'push' && github.ref_type == 'tag') }}\n        uses: ./.github/actions/free-disk-space\n\n      - name: Build 'Autoware' without CUDA\n        if: ${{ steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'workflow_dispatch' ||\n          (github.event_name == 'push' && github.ref_type == 'tag') }}\n        uses: ./.github/actions/docker-build-and-push\n        with:\n          platform: ${{ matrix.platform }}\n          target-image: autoware\n          build-args: |\n            *.platform=${{ matrix.arch-platform }}\n            *.args.ROS_DISTRO=${{ needs.load-env.outputs.rosdistro }}\n            *.args.AUTOWARE_BASE_IMAGE=${{ needs.load-env.outputs.autoware_base_image }}\n            *.args.AUTOWARE_BASE_CUDA_IMAGE=${{ needs.load-env.outputs.autoware_base_cuda_image }}\n            *.args.LIB_DIR=${{ matrix.lib-dir }}\n            *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }}\n            *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-main\n            *.cache-to=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }},mode=max\n\n      - name: Show disk space\n        if: always()\n        run: |\n          df -h\n\n  docker-build-and-push-tools:\n    needs: [load-env, docker-build-and-push]\n    strategy:\n      matrix:\n        platform: [amd64, arm64]\n        include:\n          - platform: amd64\n            runner: ubuntu-22.04\n            arch-platform: linux/amd64\n            lib-dir: x86_64\n          - platform: arm64\n            runner: ubuntu-22.04-arm\n            arch-platform: linux/arm64\n            lib-dir: aarch64\n    runs-on: ${{ matrix.runner }}\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Set git config\n        uses: autowarefoundation/autoware-github-actions/set-git-config@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Get changed files\n        id: changed-files\n        uses: step-security/changed-files@v46\n        with:\n          files: |\n            *.env\n            repositories/*.repos\n            .github/actions/combine-multi-arch-images/action.yaml\n            .github/actions/docker-build-and-push*/action.yaml\n            .github/workflows/docker-build-and-push.yaml\n            ansible-galaxy-requirements.yaml\n            ansible/**\n            docker/**\n\n      - name: Free disk space\n        if: ${{ steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'workflow_dispatch' ||\n          (github.event_name == 'push' && github.ref_type == 'tag') }}\n        uses: ./.github/actions/free-disk-space\n\n      - name: Build 'autoware-tools'\n        if: ${{ steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'workflow_dispatch' ||\n          (github.event_name == 'push' && github.ref_type == 'tag') }}\n        uses: ./.github/actions/docker-build-and-push-tools\n        with:\n          platform: ${{ matrix.platform }}\n          target-image: autoware-tools\n          build-args: |\n            *.platform=${{ matrix.arch-platform }}\n            *.args.ROS_DISTRO=${{ needs.load-env.outputs.rosdistro }}\n            *.args.LIB_DIR=${{ matrix.lib-dir }}\n            *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }}\n            *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-main\n            *.cache-to=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }},mode=max\n\n      - name: Show disk space\n        if: always()\n        run: |\n          df -h\n\n  docker-build-and-push-cuda:\n    needs: [load-env, docker-build-and-push]\n    strategy:\n      matrix:\n        platform: [amd64, arm64]\n        include:\n          - platform: amd64\n            runner: [self-hosted, Linux, X64]\n            arch-platform: linux/amd64\n            lib-dir: x86_64\n          - platform: arm64\n            runner: [self-hosted, Linux, ARM64]\n            arch-platform: linux/arm64\n            lib-dir: aarch64\n    runs-on: ${{ matrix.runner }}\n    steps:\n      # https://github.com/actions/checkout/issues/211\n      - name: Change permission of workspace\n        run: |\n          sudo chown -R $USER:$USER ${{ github.workspace }}\n\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Set git config\n        uses: autowarefoundation/autoware-github-actions/set-git-config@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Get changed files\n        id: changed-files\n        uses: step-security/changed-files@v46\n        with:\n          files: |\n            *.env\n            repositories/*.repos\n            .github/actions/combine-multi-arch-images/action.yaml\n            .github/actions/docker-build-and-push*/action.yaml\n            .github/workflows/docker-build-and-push.yaml\n            ansible-galaxy-requirements.yaml\n            ansible/**\n            docker/**\n\n      - name: Free disk space\n        if: ${{ runner.environment == 'github-hosted' &&\n          (steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'workflow_dispatch' ||\n          (github.event_name == 'push' && github.ref_type == 'tag')) }}\n        uses: ./.github/actions/free-disk-space\n\n      - name: Build 'Autoware' with CUDA\n        if: ${{ steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'workflow_dispatch' ||\n          (github.event_name == 'push' && github.ref_type == 'tag') }}\n        uses: ./.github/actions/docker-build-and-push-cuda\n        with:\n          platform: ${{ matrix.platform }}\n          target-image: autoware\n          build-args: |\n            *.platform=${{ matrix.arch-platform }}\n            *.args.ROS_DISTRO=${{ needs.load-env.outputs.rosdistro }}\n            *.args.BASE_IMAGE=${{ needs.load-env.outputs.base_image }}\n            *.args.AUTOWARE_BASE_IMAGE=${{ needs.load-env.outputs.autoware_base_image }}\n            *.args.AUTOWARE_BASE_CUDA_IMAGE=${{ needs.load-env.outputs.autoware_base_cuda_image }}\n            *.args.LIB_DIR=${{ matrix.lib-dir }}\n            *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }}\n            *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-main\n            *.cache-to=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }},mode=max\n\n      - name: Show disk space\n        if: always()\n        run: |\n          df -h\n\n  update-docker-manifest:\n    needs: docker-build-and-push\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Combine multi arch images for 'autoware' without CUDA\n        uses: ./.github/actions/combine-multi-arch-images\n        with:\n          package-name: autoware\n\n  update-docker-manifest-cuda:\n    needs: docker-build-and-push-cuda\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Combine multi arch images for 'autoware' with CUDA\n        uses: ./.github/actions/combine-multi-arch-images\n        with:\n          package-name: autoware\n\n  update-docker-manifest-tools:\n    needs: docker-build-and-push-tools\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Combine multi arch images for 'autoware-tools'\n        uses: ./.github/actions/combine-multi-arch-images\n        with:\n          package-name: autoware-tools\n\n  load-env-jazzy:\n    uses: ./.github/workflows/load-env.yaml\n    with:\n      env_file: amd64_jazzy.env\n\n  docker-build-and-push-jazzy:\n    needs: [load-env-jazzy]\n    strategy:\n      matrix:\n        platform: [amd64, arm64]\n        include:\n          - platform: amd64\n            runner: ubuntu-24.04\n            arch-platform: linux/amd64\n            lib-dir: x86_64\n          - platform: arm64\n            runner: ubuntu-24.04-arm\n            arch-platform: linux/arm64\n            lib-dir: aarch64\n    runs-on: ${{ matrix.runner }}\n    steps:\n      # https://github.com/actions/checkout/issues/211\n      - name: Change permission of workspace\n        run: |\n          sudo chown -R $USER:$USER ${{ github.workspace }}\n\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Set git config\n        uses: autowarefoundation/autoware-github-actions/set-git-config@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Get changed files\n        id: changed-files\n        uses: step-security/changed-files@v46\n        with:\n          files: |\n            *.env\n            repositories/*.repos\n            .github/actions/combine-multi-arch-images/action.yaml\n            .github/actions/docker-build-and-push*/action.yaml\n            .github/workflows/docker-build-and-push.yaml\n            ansible-galaxy-requirements.yaml\n            ansible/**\n            docker/**\n\n      - name: Free disk space\n        if: ${{ steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'workflow_dispatch' ||\n          (github.event_name == 'push' && github.ref_type == 'tag') }}\n        uses: ./.github/actions/free-disk-space\n\n      - name: Build 'Autoware Jazzy Universe' without CUDA\n        if: ${{ steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'workflow_dispatch' ||\n          (github.event_name == 'push' && github.ref_type == 'tag') }}\n        uses: ./.github/actions/docker-build-and-push\n        with:\n          platform: ${{ matrix.platform }}\n          target-image: autoware\n          build-args: |\n            *.platform=${{ matrix.arch-platform }}\n            *.args.ROS_DISTRO=${{ needs.load-env-jazzy.outputs.rosdistro }}\n            *.args.AUTOWARE_BASE_IMAGE=${{ needs.load-env-jazzy.outputs.autoware_base_image }}\n            *.args.AUTOWARE_BASE_CUDA_IMAGE=${{ needs.load-env-jazzy.outputs.autoware_base_cuda_image }}\n            *.args.LIB_DIR=${{ matrix.lib-dir }}\n            *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-${{ github.ref_name }}\n            *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-main\n            *.cache-to=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-${{ github.ref_name }},mode=max\n          set-latest: false\n          suffix: -jazzy\n\n      - name: Show disk space\n        if: always()\n        run: |\n          df -h\n\n  docker-build-and-push-jazzy-cuda:\n    needs: [load-env-jazzy, docker-build-and-push-jazzy]\n    strategy:\n      matrix:\n        platform: [amd64, arm64]\n        include:\n          - platform: amd64\n            runner: [self-hosted, Linux, X64]\n            arch-platform: linux/amd64\n            lib-dir: x86_64\n          - platform: arm64\n            runner: [self-hosted, Linux, ARM64]\n            arch-platform: linux/arm64\n            lib-dir: aarch64\n    runs-on: ${{ matrix.runner }}\n    steps:\n      # https://github.com/actions/checkout/issues/211\n      - name: Change permission of workspace\n        run: |\n          sudo chown -R $USER:$USER ${{ github.workspace }}\n\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Set git config\n        uses: autowarefoundation/autoware-github-actions/set-git-config@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Get changed files\n        id: changed-files\n        uses: step-security/changed-files@v46\n        with:\n          files: |\n            *.env\n            *.repos\n            .github/actions/combine-multi-arch-images/action.yaml\n            .github/actions/docker-build-and-push*/action.yaml\n            .github/workflows/docker-build-and-push.yaml\n            ansible-galaxy-requirements.yaml\n            ansible/**\n            docker/**\n\n      - name: Free disk space\n        if: ${{ runner.environment == 'github-hosted' &&\n          (steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'workflow_dispatch' ||\n          (github.event_name == 'push' && github.ref_type == 'tag')) }}\n        uses: ./.github/actions/free-disk-space\n\n      - name: Build 'Autoware Jazzy Universe' with CUDA\n        if: ${{ steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'workflow_dispatch' ||\n          (github.event_name == 'push' && github.ref_type == 'tag') }}\n        uses: ./.github/actions/docker-build-and-push-cuda\n        with:\n          platform: ${{ matrix.platform }}\n          target-image: autoware\n          build-args: |\n            *.platform=${{ matrix.arch-platform }}\n            *.args.ROS_DISTRO=${{ needs.load-env-jazzy.outputs.rosdistro }}\n            *.args.BASE_IMAGE=${{ needs.load-env-jazzy.outputs.base_image }}\n            *.args.AUTOWARE_BASE_IMAGE=${{ needs.load-env-jazzy.outputs.autoware_base_image }}\n            *.args.AUTOWARE_BASE_CUDA_IMAGE=${{ needs.load-env-jazzy.outputs.autoware_base_cuda_image }}\n            *.args.LIB_DIR=${{ matrix.lib-dir }}\n            *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-cuda-${{ github.ref_name }}\n            *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-cuda-main\n            *.cache-to=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-cuda-${{ github.ref_name }},mode=max\n          suffix: -jazzy\n\n      - name: Show disk space\n        if: always()\n        run: |\n          df -h\n\n  update-docker-manifest-jazzy:\n    needs: [docker-build-and-push-jazzy]\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Combine multi arch images for 'autoware' Jazzy\n        uses: ./.github/actions/combine-multi-arch-images\n        with:\n          package-name: autoware\n\n  update-docker-manifest-jazzy-cuda:\n    needs: [docker-build-and-push-jazzy-cuda]\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Combine multi arch images for 'autoware' Jazzy with CUDA\n        uses: ./.github/actions/combine-multi-arch-images\n        with:\n          package-name: autoware\n"
  },
  {
    "path": ".github/workflows/github-release.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: github-release\n\non:\n  push:\n    tags:\n      - \"[0-9]+.[0-9]+.[0-9]+\"\n  workflow_dispatch:\n    inputs:\n      tag-name:\n        description: The name of the tag to release\n        type: string\n        required: true\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  github-release:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Set tag name\n        id: set-tag-name\n        run: |\n          if [ \"${{ github.event_name }}\" = \"workflow_dispatch\" ]; then\n            REF_NAME=\"${{ github.event.inputs.tag-name }}\"\n          else\n            REF_NAME=\"${{ github.ref_name }}\"\n          fi\n\n          echo \"tag-name=$REF_NAME\" >> $GITHUB_OUTPUT\n\n      - name: Check out repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n          ref: ${{ steps.set-tag-name.outputs.tag-name }}\n\n      - name: Run generate-changelog\n        id: generate-changelog\n        uses: autowarefoundation/autoware-github-actions/generate-changelog@v1\n        with:\n          git-cliff-args: --tag-pattern \"^(\\d+)\\.(\\d+)\\.(\\d+)$\" --latest\n\n      - name: Select verb\n        id: select-verb\n        run: |\n          has_previous_draft=$(gh release view --json isDraft -q \".isDraft\" \"${{ steps.set-tag-name.outputs.tag-name }}\") || true\n\n          verb=create\n          if [ \"$has_previous_draft\" = \"true\" ]; then\n            verb=edit\n          fi\n\n          echo \"verb=$verb\" >> $GITHUB_OUTPUT\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Release to GitHub\n        run: |\n          gh release ${{ steps.select-verb.outputs.verb }} \"${{ steps.set-tag-name.outputs.tag-name }}\" \\\n            --draft \\\n            --title \"${{ steps.set-tag-name.outputs.tag-name }}\" \\\n            --notes \"$NOTES\"\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          NOTES: ${{ steps.generate-changelog.outputs.changelog }}\n"
  },
  {
    "path": ".github/workflows/health-check.yaml",
    "content": "name: health-check\n\non:\n  pull_request:\n    types:\n      - opened\n      - synchronize\n      - reopened\n      - labeled\n  schedule:\n    - cron: 0 12 * * *\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  label-check:\n    uses: autowarefoundation/autoware-github-actions/.github/workflows/make-sure-label-is-present.yaml@v1\n    with:\n      label: run:health-check\n\n  load-env:\n    needs: label-check\n    if: ${{ needs.label-check.outputs.result == 'true' ||\n      github.event_name == 'schedule' ||\n      github.event_name == 'workflow_dispatch' }}\n    uses: ./.github/workflows/load-env.yaml\n\n  docker-build:\n    needs: load-env\n    strategy:\n      fail-fast: false\n      matrix:\n        build-type: [main, nightly, main-arm64]\n        include:\n          - build-type: main\n            platform: amd64\n            runner: \"['self-hosted','Linux','X64']\"\n            lib-dir: x86_64\n            container: ubuntu:22.04\n          - build-type: nightly\n            platform: amd64\n            runner: \"['ubuntu-24.04']\"\n            lib-dir: x86_64\n          - build-type: main-arm64\n            platform: arm64\n            runner: \"['ubuntu-24.04-arm']\"\n            lib-dir: aarch64\n    runs-on: ${{ fromJson(matrix.runner) }}\n    steps:\n      - name: Clean up previous run artifacts\n        run: sudo rm -rf ${{ github.workspace }}/scenario_out\n      # https://github.com/actions/checkout/issues/211\n      - name: Change permission of workspace\n        run: |\n          sudo chown -R $USER:$USER ${{ github.workspace }}\n\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Set git config\n        uses: autowarefoundation/autoware-github-actions/set-git-config@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Get changed files\n        id: changed-files\n        uses: step-security/changed-files@v46\n        with:\n          files: |\n            *.env\n            repositories/*.repos\n            .github/actions/docker-build/action.yaml\n            .github/workflows/health-check.yaml\n            ansible-galaxy-requirements.yaml\n            ansible/**\n            docker/**\n            setup-dev-env.sh\n\n      - name: Show disk space\n        if: always()\n        run: |\n          df -h\n\n      - name: Free disk space\n        if: ${{ steps.changed-files.outputs.any_changed == 'true' &&\n          matrix.build-type != 'main' }}\n        uses: ./.github/actions/free-disk-space\n\n      - name: Build 'Autoware'\n        if: ${{ steps.changed-files.outputs.any_changed == 'true' ||\n          github.event_name == 'schedule' ||\n          github.event_name == 'workflow_dispatch' }}\n        uses: ./.github/actions/docker-build\n        with:\n          platform: ${{ matrix.platform }}\n          cache-tag-suffix: ${{ matrix.build-type }}\n          image-artifact-name: ${{ matrix.build-type == 'main' && 'autoware-image' || '' }}\n          additional-repos: ${{ matrix.build-type == 'nightly' && 'repositories/autoware-nightly.repos' || '' }}\n          build-args: |\n            ROS_DISTRO=${{ needs.load-env.outputs.rosdistro }}\n            AUTOWARE_BASE_IMAGE=${{ needs.load-env.outputs.autoware_base_image }}\n            AUTOWARE_BASE_CUDA_IMAGE=${{ needs.load-env.outputs.autoware_base_cuda_image }}\n            LIB_DIR=${{ matrix.lib-dir }}\n\n      - name: Show disk space\n        if: always()\n        run: |\n          df -h\n  scenario-test:\n    needs: docker-build\n    uses: ./.github/workflows/scenario-test-reusable.yaml\n    with:\n      autoware_container_image: autoware:health-check-${{ github.sha }}\n"
  },
  {
    "path": ".github/workflows/keep-build-cache-small.yaml",
    "content": "name: keep-build-cache-small\n\non:\n  workflow_dispatch:\n  schedule:\n    - cron: 0 6 * * *\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  keep-build-cache-small:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        include:\n          - image_tag: amd64-main\n            cache_threshold_gb: 7.0\n          - image_tag: arm64-main\n            cache_threshold_gb: 9.0\n\n    env:\n      IMAGE_NAME: autoware-buildcache\n\n    steps:\n      - name: Install dependencies\n        run: |\n          sudo apt-get update\n          sudo apt-get install -y skopeo jq bc\n\n      - name: Set up environment variables\n        run: |\n          echo \"CACHE_THRESHOLD_GB=${{ matrix.cache_threshold_gb }}\" >> \"$GITHUB_ENV\"\n          echo \"IMAGE_TAG=${{ matrix.image_tag }}\" >> \"$GITHUB_ENV\"\n          echo \"BUILD_CACHE_IMAGE=ghcr.io/autowarefoundation/${{ env.IMAGE_NAME }}:${{ matrix.image_tag }}\" >> \"$GITHUB_ENV\"\n\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          registry: ghcr.io\n          username: ${{ github.repository_owner }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Check if build cache image exists\n        id: check_image\n        run: |\n          echo \"🔍 Checking if build cache image exists...\"\n          if skopeo inspect --raw docker://${{ env.BUILD_CACHE_IMAGE }} > /dev/null 2>&1; then\n            echo \"✅ Build cache image found. Proceeding...\"\n            echo \"exists=true\" >> \"$GITHUB_OUTPUT\"\n          else\n            echo \"⚠️ Build cache image does not exist. Skipping remaining steps.\"\n            echo \"exists=false\" >> \"$GITHUB_OUTPUT\"\n          fi\n\n      - name: Calculate cache size\n        id: calc_size\n        if: steps.check_image.outputs.exists == 'true'\n        run: |\n          echo \"🔍 Inspecting build cache size for image: ${{ env.BUILD_CACHE_IMAGE }}...\"\n          SIZE_BYTES=$(skopeo inspect --raw docker://${{ env.BUILD_CACHE_IMAGE }} | jq '.layers | map(.size) | add')\n          SIZE_GB=$(echo \"scale=2; $SIZE_BYTES / (1024 * 1024 * 1024)\" | bc)\n          echo \"Cache size: ${SIZE_GB} GB\"\n          echo \"size_gb=${SIZE_GB}\" >> \"$GITHUB_OUTPUT\"\n\n      - name: Compare cache size with threshold\n        id: check_threshold\n        if: steps.check_image.outputs.exists == 'true'\n        run: |\n          echo \"📊 Checking cache size against threshold...\"\n          THRESHOLD_GB=${{ env.CACHE_THRESHOLD_GB }}\n          CACHE_SIZE_GB=${{ steps.calc_size.outputs.size_gb }}\n\n          if (( $(echo \"$CACHE_SIZE_GB > $THRESHOLD_GB\" | bc -l) )); then\n            echo \"❌ Cache size exceeds threshold. Action needed.\"\n            echo \"status=exceeded\" >> \"$GITHUB_OUTPUT\"\n          else\n            echo \"✅ Cache size is within threshold. No action needed.\"\n            echo \"status=ok\" >> \"$GITHUB_OUTPUT\"\n          fi\n\n      - name: Delete build cache if exceeded\n        uses: bots-house/ghcr-delete-image-action@v1.1.0\n        if: steps.check_threshold.outputs.status == 'exceeded'\n        with:\n          name: ${{ env.IMAGE_NAME }}\n          tag: ${{ matrix.image_tag }}\n          owner: ${{ github.repository_owner }}\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Verify cache deletion\n        if: steps.check_threshold.outputs.status == 'exceeded'\n        id: verify_deletion\n        run: |\n          echo \"🔍 Verifying if build cache image has been deleted...\"\n\n          if skopeo inspect --raw docker://${{ env.BUILD_CACHE_IMAGE }} > /dev/null 2>&1; then\n            echo \"❌ Build cache image still exists!\"\n            echo \"status=failed\" >> \"$GITHUB_OUTPUT\"\n            exit 1\n          else\n            echo \"✅ Build cache image successfully deleted.\"\n            echo \"status=success\" >> \"$GITHUB_OUTPUT\"\n          fi\n\n      - name: Generate workflow summary\n        if: always()\n        run: |\n          SUMMARY=\"# 📦 Build Cache Size Check\\n\"\n          SUMMARY+=\"- **Image**: \\`${{ env.BUILD_CACHE_IMAGE }}\\`\\n\"\n\n          if [[ \"${{ steps.check_image.outputs.exists }}\" == \"false\" ]]; then\n            SUMMARY+=\"⚠️ **Build cache image does not exist. Skipping checks.**\\n\"\n          else\n            SUMMARY+=\"- **Cache Size**: ${{ steps.calc_size.outputs.size_gb }} GB\\n\"\n            SUMMARY+=\"- **Threshold**: ${{ env.CACHE_THRESHOLD_GB }} GB\\n\"\n\n            if [[ \"${{ steps.check_threshold.outputs.status }}\" == \"exceeded\" ]]; then\n              if [[ \"${{ steps.verify_deletion.outputs.status }}\" != \"success\" ]]; then\n                SUMMARY+=\"❌ **Cache size exceeded, but deletion failed!**\\n\"\n              else\n                SUMMARY+=\"🗑️✅ **Cache size exceeded. Image deleted successfully!**\\n\"\n              fi\n            else\n              SUMMARY+=\"👌✅ **Cache size is within acceptable limits.**\\n\"\n            fi\n          fi\n\n          echo -e \"$SUMMARY\"\n          echo -e \"$SUMMARY\" >> $GITHUB_STEP_SUMMARY\n"
  },
  {
    "path": ".github/workflows/load-env.yaml",
    "content": "name: load-env\n\non:\n  workflow_call:\n    inputs:\n      env_file:\n        description: Specify the env file to load (e.g., amd64.env, amd64_jazzy.env)\n        required: false\n        type: string\n        default: \"\"\n    outputs:\n      rosdistro:\n        value: ${{ jobs.load-env.outputs.rosdistro }}\n      base_image:\n        value: ${{ jobs.load-env.outputs.base_image }}\n      autoware_base_image:\n        value: ${{ jobs.load-env.outputs.autoware_base_image }}\n      autoware_base_cuda_image:\n        value: ${{ jobs.load-env.outputs.autoware_base_cuda_image }}\n\njobs:\n  load-env:\n    runs-on: ubuntu-22.04\n    outputs:\n      rosdistro: ${{ steps.set-env.outputs.rosdistro }}\n      base_image: ${{ steps.set-env.outputs.base_image }}\n      autoware_base_image: ${{ steps.set-env.outputs.autoware_base_image }}\n      autoware_base_cuda_image: ${{ steps.set-env.outputs.autoware_base_cuda_image }}\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Load env\n        run: |\n          # Check if env_file is specified\n          if [ -n \"${{ inputs.env_file }}\" ]; then\n            # Use specified env file\n            echo \"Loading specified env file: ${{ inputs.env_file }}\"\n            cat ${{ inputs.env_file }} | sed -e \"s/^\\s*//\" -e \"/^#/d\" >> $GITHUB_ENV\n          else\n            # Auto-detect based on ROS_DISTRO\n            rosdistro=${ROS_DISTRO:-humble}\n            echo \"rosdistro=$rosdistro\" >> $GITHUB_ENV\n\n            # Determine which env file to use based on rosdistro\n            if [ \"$rosdistro\" = \"humble\" ]; then\n              echo \"Loading amd64.env for Humble\"\n              cat amd64.env | sed -e \"s/^\\s*//\" -e \"/^#/d\" >> $GITHUB_ENV\n            else\n              echo \"Loading amd64_jazzy.env for Jazzy\"\n              cat amd64_jazzy.env | sed -e \"s/^\\s*//\" -e \"/^#/d\" >> $GITHUB_ENV\n            fi\n          fi\n\n          # Load ARM64 specific env if on ARM64 architecture\n          if [ \"$(uname -m)\" = \"aarch64\" ]; then\n            echo \"Loading arm64.env for ARM64 architecture\"\n            cat arm64.env | sed -e \"s/^\\s*//\" -e \"/^#/d\" >> $GITHUB_ENV\n          fi\n\n      - name: Set env\n        id: set-env\n        run: |\n          echo \"rosdistro=${{ env.rosdistro }}\" >> $GITHUB_OUTPUT\n          echo \"base_image=${{ env.base_image }}\" >> $GITHUB_OUTPUT\n          echo \"autoware_base_image=${{ env.autoware_base_image }}\" >> $GITHUB_OUTPUT\n          echo \"autoware_base_cuda_image=${{ env.autoware_base_cuda_image }}\" >> $GITHUB_OUTPUT\n"
  },
  {
    "path": ".github/workflows/mirror-main-branch.yaml",
    "content": "name: mirror-main-branch\n\non:\n  push:\n    branches:\n      - main\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  mirror-main-branch:\n    runs-on: ubuntu-22.04\n    steps:\n      - uses: zofrex/mirror-branch@v1\n        with:\n          target-branch: humble\n"
  },
  {
    "path": ".github/workflows/pre-commit-ansible-autoupdate.yaml",
    "content": "name: pre-commit-ansible-autoupdate\n\non:\n  schedule:\n    - cron: 0 0 * * *\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  check-secret:\n    uses: autowarefoundation/autoware-github-actions/.github/workflows/check-secret.yaml@v1\n    secrets:\n      secret: ${{ secrets.APP_ID }}\n\n  pre-commit-ansible-autoupdate:\n    needs: check-secret\n    if: ${{ needs.check-secret.outputs.set == 'true' }}\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Generate token\n        id: generate-token\n        uses: tibdex/github-app-token@v2\n        with:\n          app_id: ${{ secrets.APP_ID }}\n          private_key: ${{ secrets.PRIVATE_KEY }}\n\n      - name: Run pre-commit-autoupdate\n        uses: autowarefoundation/autoware-github-actions/pre-commit-autoupdate@v1\n        with:\n          token: ${{ steps.generate-token.outputs.token }}\n          pre-commit-config: .pre-commit-config-ansible.yaml\n          pr-labels: |\n            tag:bot\n            tag:pre-commit-autoupdate\n          pr-branch: pre-commit-ansible-autoupdate\n          pr-title: \"ci(pre-commit-ansible): autoupdate\"\n          pr-commit-message: \"ci(pre-commit-ansible): autoupdate\"\n          auto-merge-method: squash\n"
  },
  {
    "path": ".github/workflows/pre-commit-ansible.yaml",
    "content": "name: pre-commit-ansible\n\non:\n  pull_request:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  pre-commit-ansible:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Set git config\n        uses: autowarefoundation/autoware-github-actions/set-git-config@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Install Ansible Galaxy depends for ansible-lint\n        run: |\n          ansible-galaxy collection install -f -r ansible-galaxy-requirements.yaml\n\n      - name: Run pre-commit\n        uses: autowarefoundation/autoware-github-actions/pre-commit@v1\n        with:\n          pre-commit-config: .pre-commit-config-ansible.yaml\n"
  },
  {
    "path": ".github/workflows/pre-commit-optional.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: pre-commit-optional\n\non:\n  pull_request:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  pre-commit-optional:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - name: Run pre-commit\n        uses: autowarefoundation/autoware-github-actions/pre-commit@v1\n        with:\n          pre-commit-config: .pre-commit-config-optional.yaml\n          base-branch: origin/${{ github.base_ref }}\n"
  },
  {
    "path": ".github/workflows/pre-commit.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: pre-commit\n\non:\n  pull_request:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  pre-commit:\n    if: ${{ github.event.repository.private }} # Use pre-commit.ci for public repositories\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Generate token\n        id: generate-token\n        uses: tibdex/github-app-token@v2\n        with:\n          app_id: ${{ secrets.APP_ID }}\n          private_key: ${{ secrets.PRIVATE_KEY }}\n\n      - name: Check out repository\n        uses: actions/checkout@v4\n        with:\n          ref: ${{ github.event.pull_request.head.ref }}\n\n      - name: Run pre-commit\n        uses: autowarefoundation/autoware-github-actions/pre-commit@v1\n        with:\n          pre-commit-config: .pre-commit-config.yaml\n          token: ${{ steps.generate-token.outputs.token }}\n"
  },
  {
    "path": ".github/workflows/scenario-test-reusable.yaml",
    "content": "name: scenario-test-reusable\n\non:\n  workflow_call:\n    inputs:\n      autoware_container_image:\n        type: string\n        required: true\n        description: Autoware docker image tag to use for the scenario test\n      runner:\n        type: string\n        default: \"['self-hosted', 'Linux', 'X64']\"\n        required: false\n      architecture-type:\n        type: string\n        default: awf/universe/20250130\n        required: false\n      sensor-model:\n        type: string\n        default: sample_sensor_kit\n        required: false\n      vehicle-model:\n        type: string\n        default: sample_vehicle\n        required: false\n\njobs:\n  scenario-test:\n    runs-on: ${{ fromJson(inputs.runner) }}\n    steps:\n      - name: Clean up previous run artifacts\n        run: |\n          sudo rm -rf ${{ github.workspace }}/scenario_out\n          sudo chown -R $USER:$USER ${{ github.workspace }}\n\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Download Docker image artifact\n        uses: actions/download-artifact@v4\n        with:\n          name: autoware-image\n          path: /tmp\n      - name: Load Docker image\n        run: docker load < /tmp/autoware-image.tar.gz\n      - name: Verify Docker image exists\n        env:\n          IMAGE_TAG: ${{ inputs.autoware_container_image }}\n        run: |\n          echo \"Checking for image in local Docker daemon...\"\n          if ! docker inspect \"$IMAGE_TAG\" > /dev/null 2>&1; then\n            echo \"::error::Image $IMAGE_TAG not found!\"\n            exit 1\n          fi\n          docker images \"$IMAGE_TAG\"\n          df -h\n\n      - name: Run scenario test in built Docker image\n        env:\n          IMAGE_TAG: ${{ inputs.autoware_container_image }}\n          SENSOR_MODEL: ${{ inputs.sensor-model }}\n          VEHICLE_MODEL: ${{ inputs.vehicle-model }}\n          ARCHITECTURE_TYPE: ${{ inputs.architecture-type }}\n        run: |\n          mkdir -p ${{ github.workspace }}/scenario_out\n\n          docker run --rm \\\n            -e SENSOR_MODEL \\\n            -e VEHICLE_MODEL \\\n            -e ARCHITECTURE_TYPE \\\n            -v \"${{ github.workspace }}:/workspace\" \\\n            -v \"${{ github.workspace }}/scenario_out:/out\" \\\n            \"$IMAGE_TAG\" \\\n            bash -c '\n              set -e\n\n              echo \"Installing test dependencies...\"\n              apt-get update && apt-get install -y python3-pip git unzip wget curl\n              pip3 install --upgrade gdown vcstool\n\n              echo \"Setting up simulator workspace...\"\n              cd /workspace\n              mkdir -p /autoware_ws/src\n              cd /autoware_ws\n              vcs import src < /workspace/repositories/simulator.repos\n\n              echo \"Sourcing Autoware environment...\"\n              source /opt/ros/humble/setup.bash\n              source /opt/autoware/setup.bash\n\n              echo \"Installing simulator dependencies...\"\n              rosdep update\n              rosdep install --from-paths src --ignore-src -r -y || true\n\n              echo \"Downgrading xmlschema for compatibility...\"\n              pip3 install --user xmlschema==3.4.5\n\n              echo \"Building scenario_test_runner...\"\n              export CMAKE_DISABLE_PRECOMPILE_HEADERS=ON\n              colcon build --symlink-install \\\n                --cmake-args -DCMAKE_BUILD_TYPE=Release \\\n                --executor sequential\n\n              echo \"Sourcing the built workspace...\"\n              source /autoware_ws/install/setup.bash\n\n              echo \"Downloading test data...\"\n              cd /out\n              # cspell: ignore Uownh Ietur\n              gdown --id 1Tq7snfDPsuPHPtl50aL5fJY6paiC-HxV -O sample-scenario.yaml\n              mkdir -p /out/autoware_map\n              gdown --id 1499_nsbUbIeturZaDj7jhUownh5fvXHd -O sample-map-planning.zip\n\n              if [ -f sample-map-planning.zip ]; then\n                unzip -q sample-map-planning.zip -d /out/autoware_map\n              fi\n\n              echo \"Fixing paths in scenario file...\"\n              sed -i \"s@/home/user/@/out/@g\" sample-scenario.yaml\n\n              echo \"Running scenario test...\"\n              export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n              mkdir -p /out/results\n\n              ros2 launch scenario_test_runner scenario_test_runner.launch.py \\\n                architecture_type:=$ARCHITECTURE_TYPE \\\n                record:=true \\\n                scenario:=\"/out/sample-scenario.yaml\" \\\n                sensor_model:=$SENSOR_MODEL \\\n                vehicle_model:=$VEHICLE_MODEL \\\n                initialize_duration:=300 \\\n                output_directory:=/out/results \\\n                simulate_localization:=true \\\n                initial_pose:=\"[0.0, 0.0, 0.0]\" \\\n                launch_rviz:=false \\\n                frame_rate:=1 \\\n                disable_lanelet_pose_validation:=true 2>&1 | tee /out/scenario_output.log || true\n\n              echo \"Cleaning up processes...\"\n              pkill -9 -f ros2 || true\n              pkill -9 -f scenario_test_runner || true\n              pkill -9 -f openscenario_interpreter_node || true\n            '\n\n      - name: Check for test failures\n        run: |\n          RESULT_FILE=\"${{ github.workspace }}/scenario_out/results/scenario_test_runner/result.junit.xml\"\n\n          if [ ! -f \"$RESULT_FILE\" ]; then\n            echo \"::error::Result file not found! Simulation likely crashed.\"\n            exit 1\n          fi\n\n          echo \"Checking for failures in $RESULT_FILE...\"\n\n          if grep -q -E '<failure|<error' \"$RESULT_FILE\"; then\n            echo \"::error::Test failures or errors detected.\"\n            cat \"$RESULT_FILE\"\n            exit 1\n          else\n            echo \"Test successfully passed.\"\n          fi\n\n      - name: Upload scenario test results\n        if: always()\n        uses: actions/upload-artifact@v4\n        with:\n          name: scenario-test-results\n          path: |\n            ${{ github.workspace }}/scenario_out/results/\n            ${{ github.workspace }}/scenario_out/scenario_output.log\n\n      - name: Show final disk space\n        if: always()\n        run: df -h\n      - name: Clean up Docker images\n        if: always()\n        env:\n          IMAGE_TAG: ${{ inputs.autoware_container_image }}\n        run: |\n          rm -f /tmp/autoware-image.tar.gz\n          docker rmi \"$IMAGE_TAG\" || true\n"
  },
  {
    "path": ".github/workflows/scenario-test.yaml",
    "content": "name: scenario-test\non:\n  schedule:\n    - cron: 0 12 * * *\n  workflow_dispatch:\n  push:\n    branches:\n      - main\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  scenario-test:\n    runs-on: ubuntu-24.04\n    container:\n      image: ghcr.io/autowarefoundation/autoware:universe-devel\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n      - name: Install required packages\n        shell: bash\n        run: |\n          apt-get update\n          apt-get install -y \\\n            unzip \\\n            zip \\\n            curl \\\n            gnupg2 \\\n            lsb-release \\\n            python3-pip \\\n            git\n          pip install --upgrade gdown vcs2l\n      - name: Show memory info\n        shell: bash\n        run: free -h\n      - name: Clone Autoware and Import simulator.repos\n        shell: bash\n        run: |\n          git clone https://github.com/autowarefoundation/autoware.git ~/autoware_ws\n          cd ~/autoware_ws\n          mkdir -p src\n          vcs import src < repositories/simulator.repos\n      - name: Install ROS dependencies\n        shell: bash\n        run: |\n          cd ~/autoware_ws\n          source /opt/ros/humble/setup.bash\n          source /opt/autoware/setup.bash\n          rosdep update\n          rosdep install --from-paths src --ignore-src -r -y\n      - name: Downgrade xmlschema\n        shell: bash\n        run: |\n          pip3 install --user xmlschema==3.4.5\n      - name: Build Autoware Workspace\n        shell: bash\n        run: |\n          cd ~/autoware_ws\n          # Clean the workspace before building to prevent errors from old files\n          rm -rf build install log\n          source /opt/ros/humble/setup.bash\n          source /opt/autoware/setup.bash\n          # For Disable precompiled headers to reduce memory\n          export CMAKE_DISABLE_PRECOMPILE_HEADERS=ON\n          # Build all with sequential executor to reduce RAM spikes\n          colcon build --symlink-install \\\n            --cmake-args -DCMAKE_BUILD_TYPE=Release \\\n            --executor sequential\n      - name: Check Autoware installation\n        shell: bash\n        run: |\n          source ~/autoware_ws/install/setup.bash\n          ros2 pkg list | grep autoware\n      - name: Download scenario file\n        shell: bash\n        run: |\n          gdown --id 1Tq7snfDPsuPHPtl50aL5fJY6paiC-HxV -O sample-scenario.yaml\n      - name: Download sample-map-planning maps\n        shell: bash\n        # cspell: ignore 1499_nsbUbIeturZaDj7jhUownh5fvXHd\n        run: |\n          mkdir -p $HOME/autoware_map\n          gdown --id 1499_nsbUbIeturZaDj7jhUownh5fvXHd -O sample-map-planning.zip\n          unzip sample-map-planning.zip -d $HOME/autoware_map\n      - name: Fix paths in sample-scenario.yaml\n        shell: bash\n        run: |\n          # I Replace hardcoded user paths with the dynamic $HOME variable\n          sed -i \"s@/home/user/@$HOME/@g\" sample-scenario.yaml\n      - name: Launch scenario_test_runner with diagnostics\n        shell: bash\n        run: |\n          # a stable DDS implementation for CI to prevent crashes that happen before\n          export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n          SCENARIO_FILE=\"./sample-scenario.yaml\"\n          source ~/autoware_ws/install/setup.bash\n          if [ -f \"$SCENARIO_FILE\" ]; then\n            echo \"Launching scenario_test_runner...\"\n            mkdir -p ./results\n            ros2 launch scenario_test_runner scenario_test_runner.launch.py \\\n              architecture_type:=awf/universe/20250130 \\\n              record:=true \\\n              scenario:=\"$SCENARIO_FILE\" \\\n              sensor_model:=sample_sensor_kit \\\n              vehicle_model:=sample_vehicle \\\n              initialize_duration:=300 \\\n              output_directory:=./results \\\n              simulate_localization:=true \\\n              initial_pose:=\"[0.0, 0.0, 0.0]\" \\\n              launch_rviz:=false \\\n              frame_rate:=1 \\\n              disable_lanelet_pose_validation:=true 2>&1 | tee scenario_output.log || true\n          else\n            echo \"ERROR: sample-scenario.yaml is missing!\"\n            exit 1\n          fi\n      - name: Check for Test Failures\n        shell: bash\n        run: |\n          RESULT_FILE=\"./results/scenario_test_runner/result.junit.xml\"\n          if [ ! -f \"$RESULT_FILE\" ]; then\n            echo \"::error::Result file not found! Simulation likely crashed.\"\n            exit 1\n          fi\n          echo \"Checking for failures in $RESULT_FILE...\"\n          # Check for failure or error tags in the JUnit XML\n          if grep -q -E '<failure|<error' \"$RESULT_FILE\"; then\n            echo \"::error::Test failures or errors detected.\"\n            # Print the contents of the result file for easier debugging in the Actions UI\n            cat \"$RESULT_FILE\"\n            exit 1\n          else\n            echo \"Test successfully passed.\"\n          fi\n      - name: Upload Artifacts\n        if: always()\n        uses: actions/upload-artifact@v4\n        with:\n          name: scenario-test-results-and-logs\n          path: |\n            ./results/\n            ./scenario_output.log\n            ~/.ros/log/\n      - name: Kill lingering ROS nodes (cleanup)\n        if: always()\n        shell: bash\n        run: |\n          echo \"Killing lingering ROS processes...\"\n          pkill -9 -f ros2 || true\n          pkill -9 -f scenario_test_runner || true\n          pkill -9 -f openscenario_interpreter_node || true\n          pkill -9 -f python || true\n"
  },
  {
    "path": ".github/workflows/semantic-pull-request.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: semantic-pull-request\n\non:\n  pull_request_target:\n    types:\n      - opened\n      - edited\n      - synchronize\n\njobs:\n  semantic-pull-request:\n    uses: autowarefoundation/autoware-github-actions/.github/workflows/semantic-pull-request.yaml@v1\n"
  },
  {
    "path": ".github/workflows/setup-docker.yaml",
    "content": "name: setup-docker\n\non:\n  pull_request:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  setup-docker:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Run setup script\n        run: |\n          ./setup-dev-env.sh -y -v docker\n"
  },
  {
    "path": ".github/workflows/setup-universe.yaml",
    "content": "name: setup-universe\n\non:\n  pull_request:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  setup-universe:\n    runs-on: [self-hosted, Linux, X64]\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - image: ubuntu:22.04\n            ros_distro: humble\n          - image: ubuntu:24.04\n            ros_distro: jazzy\n    container:\n      image: ${{ matrix.image }}\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v6\n\n      - name: Show disk space\n        if: always()\n        run: |\n          df -h\n\n      - name: Install dependencies\n        run: |\n          apt-get update\n          apt-get install -y git sudo curl ca-certificates apt-utils\n\n      - name: Install tzdata non-interactively\n        run: |\n          DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata\n\n      - name: Set git config\n        uses: autowarefoundation/autoware-github-actions/set-git-config@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Run setup script\n        run: |\n          ./setup-dev-env.sh --ros-distro ${{ matrix.ros_distro }} -y -v universe\n"
  },
  {
    "path": ".github/workflows/spell-check-daily.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: spell-check-daily\n\non:\n  schedule:\n    - cron: 0 0 * * *\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  spell-check-daily:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Run spell-check\n        uses: autowarefoundation/autoware-github-actions/spell-check@v1\n        with:\n          incremental-files-only: false\n          cspell-json-url: https://raw.githubusercontent.com/autowarefoundation/autoware-spell-check-dict/main/.cspell.json\n          dict-packages: |\n            https://github.com/autowarefoundation/autoware-spell-check-dict\n            https://github.com/tier4/cspell-dicts\n"
  },
  {
    "path": ".github/workflows/spell-check-differential.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: spell-check-differential\n\non:\n  pull_request:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  spell-check-differential:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v4\n\n      - name: Run spell-check\n        uses: autowarefoundation/autoware-github-actions/spell-check@v1\n        with:\n          cspell-json-url: https://raw.githubusercontent.com/autowarefoundation/autoware-spell-check-dict/main/.cspell.json\n          dict-packages: |\n            https://github.com/autowarefoundation/autoware-spell-check-dict\n            https://github.com/tier4/cspell-dicts\n"
  },
  {
    "path": ".github/workflows/sync-files.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nname: sync-files\n\non:\n  schedule:\n    - cron: 0 0 * * *\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  sync-files:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Generate token\n        id: generate-token\n        uses: tibdex/github-app-token@v2\n        with:\n          app_id: ${{ secrets.APP_ID }}\n          private_key: ${{ secrets.PRIVATE_KEY }}\n\n      - name: Run sync-files\n        uses: autowarefoundation/autoware-github-actions/sync-files@v1\n        with:\n          token: ${{ steps.generate-token.outputs.token }}\n          pr-labels: |\n            tag:bot\n            tag:sync-files\n          auto-merge-method: squash\n"
  },
  {
    "path": ".gitignore",
    "content": "# Vim\n*.swp\n*.swo\n\n# Visual Studio Code\n.vscode/\n*.code-workspace\n\n# colcon\nbuild/\ninstall/\nlog/\n\n# Python\n*.pyc\n\n# Jetbrains\n.idea/\n\n# rviz Screen Capture\ncapture/\n\n# CodeChecker\n.codechecker/\n\n# Node.js\nnode_modules/\n"
  },
  {
    "path": ".hadolint.yaml",
    "content": "ignored:\n  - DL3008 # Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`\n  - DL3013 # Pin versions in pip. Instead of `pip install <package>`, use `pip install <package>==<version>`\n  - DL3015 # Avoid additional packages by specifying `--no-install-recommends`\n  - DL3009 # Delete the apt-get lists after installing something\n"
  },
  {
    "path": ".markdown-link-check.json",
    "content": "{\n  \"aliveStatusCodes\": [200, 206, 403],\n  \"ignorePatterns\": [\n    {\n      \"pattern\": \"^http://localhost\"\n    },\n    {\n      \"pattern\": \"^http://127\\\\.0\\\\.0\\\\.1\"\n    },\n    {\n      \"pattern\": \"^https://github.com/.*/discussions/new\"\n    }\n  ],\n  \"retryOn429\": true,\n  \"retryCount\": 10\n}\n"
  },
  {
    "path": ".markdownlint.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\n# See https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md for all rules.\ndefault: true\nMD013: false\nMD024:\n  siblings_only: true\nMD029:\n  style: ordered\nMD033: false\nMD041: false\nMD045: false\nMD046: false\nMD049: false\nMD059: false\n"
  },
  {
    "path": ".pre-commit-config-ansible.yaml",
    "content": "repos:\n  - repo: https://github.com/ansible/ansible-lint.git\n    rev: v25.8.2\n    hooks:\n      - id: ansible-lint\n        args:\n          - ansible/\n        additional_dependencies:\n          - ansible\n"
  },
  {
    "path": ".pre-commit-config-optional.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\n# https://pre-commit.ci/#configuration\nci:\n  autofix_commit_msg: \"style(pre-commit-optional): autofix\"\n  autoupdate_schedule: quarterly\n  autoupdate_commit_msg: \"ci(pre-commit-optional): quarterly autoupdate\"\n\nrepos:\n  - repo: https://github.com/tcort/markdown-link-check\n    rev: v3.14.2\n    hooks:\n      - id: markdown-link-check\n        args: [--quiet, --config=.markdown-link-check.json]\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\n# https://pre-commit.ci/#configuration\nci:\n  autofix_commit_msg: \"style(pre-commit): autofix\"\n  autoupdate_schedule: quarterly\n  autoupdate_commit_msg: \"ci(pre-commit): quarterly autoupdate\"\n\nrepos:\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v6.0.0\n    hooks:\n      - id: check-json\n      - id: check-merge-conflict\n      - id: check-toml\n      - id: check-xml\n      - id: check-yaml\n        args: [--unsafe]\n      - id: detect-private-key\n      - id: end-of-file-fixer\n      - id: mixed-line-ending\n      - id: trailing-whitespace\n        args: [--markdown-linebreak-ext=md]\n\n  - repo: https://github.com/igorshubovych/markdownlint-cli\n    rev: v0.47.0\n    hooks:\n      - id: markdownlint\n        args: [-c, .markdownlint.yaml, --fix]\n\n  - repo: https://github.com/pre-commit/mirrors-prettier\n    rev: v4.0.0-alpha.8\n    hooks:\n      - id: prettier\n        args: [--no-error-on-unmatched-pattern]\n\n  - repo: https://github.com/adrienverge/yamllint\n    rev: v1.37.1\n    hooks:\n      - id: yamllint\n\n  - repo: https://github.com/autowarefoundation/autoware-guideline-check\n    rev: 0.2.0\n    hooks:\n      - id: check-package-depends\n\n  - repo: https://github.com/tier4/pre-commit-hooks-ros\n    rev: v0.10.0\n    hooks:\n      - id: flake8-ros\n      - id: prettier-xacro\n      - id: prettier-launch-xml\n      - id: prettier-package-xml\n      - id: ros-include-guard\n      - id: sort-package-xml\n\n  - repo: https://github.com/shellcheck-py/shellcheck-py\n    rev: v0.11.0.1\n    hooks:\n      - id: shellcheck\n\n  - repo: https://github.com/scop/pre-commit-shfmt\n    rev: v3.12.0-2\n    hooks:\n      - id: shfmt\n        args: [-w, -s, -i=4]\n\n  - repo: https://github.com/pycqa/isort\n    rev: 7.0.0\n    hooks:\n      - id: isort\n        args: [--profile=black, --line-length=100]\n\n  - repo: https://github.com/psf/black-pre-commit-mirror\n    rev: 25.12.0\n    hooks:\n      - id: black\n        args: [--line-length=100]\n\n  - repo: https://github.com/pre-commit/mirrors-clang-format\n    rev: v21.1.8\n    hooks:\n      - id: clang-format\n        types_or: [c++, c, cuda]\n\n  - repo: https://github.com/cpplint/cpplint\n    rev: 2.0.2\n    hooks:\n      - id: cpplint\n        args: [--quiet]\n        exclude: .cu\n\n  - repo: https://github.com/python-jsonschema/check-jsonschema\n    rev: 0.36.0\n    hooks:\n      - id: check-metaschema\n        files: ^.+/schema/.*schema\\.json$\n\n  - repo: local\n    hooks:\n      - id: prettier-svg\n        name: prettier svg\n        description: Apply Prettier with plugin-xml to svg.\n        entry: prettier --write --list-different --ignore-unknown --print-width 200 --xml-self-closing-space false --xml-whitespace-sensitivity ignore\n        language: node\n        files: .svg$\n        additional_dependencies: [prettier@2.7.1, \"@prettier/plugin-xml@2.2.0\"]\n\n  - repo: https://github.com/AleksaC/hadolint-py\n    rev: v2.14.0\n    hooks:\n      - id: hadolint\n        exclude: .svg$\n"
  },
  {
    "path": ".prettierignore",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\n*.param.yaml\n*.rviz\n"
  },
  {
    "path": ".prettierrc.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nprintWidth: 100\ntabWidth: 2\noverrides:\n  - files: package.xml\n    options:\n      printWidth: 1000\n      xmlSelfClosingSpace: false\n      xmlWhitespaceSensitivity: ignore\n\n  - files: \"*.launch.xml\"\n    options:\n      printWidth: 200\n      xmlSelfClosingSpace: false\n      xmlWhitespaceSensitivity: ignore\n\n  - files: \"*.xacro\"\n    options:\n      printWidth: 200\n      xmlSelfClosingSpace: false\n      xmlWhitespaceSensitivity: ignore\n"
  },
  {
    "path": ".rgignore",
    "content": "!/src/\n"
  },
  {
    "path": ".shellcheckrc",
    "content": "external-sources=true\n"
  },
  {
    "path": ".webauto-ci/main/autoware-build/run.sh",
    "content": "#!/bin/bash -e\n\n: \"${WEBAUTO_CI_SOURCE_PATH:?is not set}\"\n: \"${WEBAUTO_CI_DEBUG_BUILD:?is not set}\"\n\n: \"${AUTOWARE_PATH:?is not set}\"\n: \"${CCACHE_DIR:=}\"\n: \"${CCACHE_SIZE:=1G}\"\n: \"${PARALLEL_WORKERS:=4}\"\n\nsudo mkdir \"$AUTOWARE_PATH\"\nsudo chown \"$(whoami)\": \"$AUTOWARE_PATH\"\ncd \"$WEBAUTO_CI_SOURCE_PATH\"\ncp -r src .webauto-ci.* \"$AUTOWARE_PATH\"\ncd \"$AUTOWARE_PATH\"\n\nif [ -n \"$CCACHE_DIR\" ]; then\n    mkdir -p \"$CCACHE_DIR\"\n    export USE_CCACHE=1\n    export CCACHE_DIR=\"$CCACHE_DIR\"\n    export CC=\"/usr/lib/ccache/gcc\"\n    export CXX=\"/usr/lib/ccache/g++\"\n    ccache -M \"$CCACHE_SIZE\"\nfi\n\n# install xmlschema<4.0.0 before rosdep install as workaround for scenario_simulator_v2\nsudo pip3 install xmlschema==3.4.5\n\nsudo -E apt-get -y update\n\n# shellcheck disable=SC2012\nROS_DISTRO=$(ls -1 /opt/ros | head -1)\n# shellcheck disable=SC1090\nsource \"/opt/ros/$ROS_DISTRO/setup.bash\"\nrosdep update\nrosdep install -y --from-paths src --ignore-src --rosdistro \"$ROS_DISTRO\"\n\n[[ $WEBAUTO_CI_DEBUG_BUILD == \"true\" ]] && build_type=\"RelWithDebInfo\" || build_type=\"Release\"\n\ncolcon build \\\n    --cmake-args -DCMAKE_BUILD_TYPE=\"$build_type\" -DBUILD_TESTING=off -Wno-dev --no-warn-unused-cli \\\n    --symlink-install \\\n    --catkin-skip-building-tests \\\n    --executor parallel \\\n    --parallel-workers \"$PARALLEL_WORKERS\"\n\nsudo -E apt-get -y autoremove\n"
  },
  {
    "path": ".webauto-ci/main/autoware-setup/run.sh",
    "content": "#!/bin/bash -e\n\nansible_args=()\nansible_args+=(\"--extra-vars\" \"prompt_install_nvidia=y\")\nansible_args+=(\"--extra-vars\" \"prompt_download_artifacts=y\")\nansible_args+=(\"--extra-vars\" \"data_dir=$HOME/autoware_data\")\nansible_args+=(\"--extra-vars\" \"ros2_installation_type=ros-base\")\nansible_args+=(\"--extra-vars\" \"install_devel=false\")\n\n# read amd64 env file and expand ansible arguments\nsource 'amd64.env'\nwhile read -r env_name; do\n    ansible_args+=(\"--extra-vars\" \"${env_name}=${!env_name}\")\ndone < <(\n    grep -v '^\\s*#' amd64.env |\n        grep -v '^\\s*$' |\n        sed 's/#.*//' | # remove trailing comments\n        sed 's/=.*//'   # extract variable name\n)\n\nansible-galaxy collection install -f -r \"ansible-galaxy-requirements.yaml\"\nansible-playbook \"ansible/playbooks/universe.yaml\" \\\n    \"${ansible_args[@]}\" \\\n    -e WORKSPACE_ROOT=\"$(pwd)\" \\\n    --skip-tags vcs\n"
  },
  {
    "path": ".webauto-ci/main/environment-setup/run.sh",
    "content": "#!/bin/bash -e\n\napt-get update\n\napt-get -y install sudo curl wget unzip gnupg lsb-release ccache python3-apt python3-pip apt-utils software-properties-common jq\nadd-apt-repository universe\n\npip install --no-cache-dir 'ansible==10.*'\n\nuser=autoware\nuseradd -m \"$user\" -s /bin/bash\necho \"$user:$user\" | chpasswd\necho \"$user ALL=(ALL) NOPASSWD:ALL\" >>/etc/sudoers\ngpasswd -a \"$user\" sudo\n"
  },
  {
    "path": ".webauto-ci.yaml",
    "content": "# The configuration file for Web.Auto CI/CD tool.\n# https://docs.web.auto/user-manuals/evaluator/configuration/reference/introduction\n\nversion: 2\n\nartifacts:\n  - name: main\n    metadata:\n      play-ondemand.ci.web.auto/buildspec: Autoware-Humble_v0.29.0\n    build:\n      type: custom\n      runtime:\n        type: standard1/amd64/large\n      source:\n        vcstool:\n          repositories_files:\n            - repositories/autoware.repos\n            - repositories/simulator.repos\n          import_path: src\n      environment_variables:\n        AUTOWARE_PATH: /opt/autoware\n        DEBIAN_FRONTEND: noninteractive\n        LANG: C.UTF-8\n      linux_parameters:\n        kernel_version: 5.19.0-50-generic\n      phases:\n        - name: environment-setup\n          user: root\n          exec: ./.webauto-ci/main/environment-setup/run.sh\n          caches:\n            - name: apt-lists\n              mountpoint: /var/lib/apt/lists\n            - name: apt-archives\n              mountpoint: /var/cache/apt/archives\n          build_result_reuse:\n            key_files:\n              - .webauto-ci/main/environment-setup/**/*\n        - name: autoware-setup\n          user: autoware\n          exec: ./.webauto-ci/main/autoware-setup/run.sh\n          caches:\n            - name: apt-lists\n              mountpoint: /var/lib/apt/lists\n            - name: apt-archives\n              mountpoint: /var/cache/apt/archives\n          build_result_reuse:\n            key_files:\n              - .webauto-ci/main/autoware-setup/**/*\n              - ansible/**/*\n              - ansible-galaxy-requirements.yaml\n              - amd64.env\n          incremental_build:\n            enabled: true\n        - name: autoware-build\n          user: autoware\n          exec: ./.webauto-ci/main/autoware-build/run.sh\n          environment_variables:\n            PARALLEL_WORKERS: \"32\"\n            CCACHE_DIR: /tmp/build/cache/ccache\n          caches:\n            - name: apt-lists\n              mountpoint: /var/lib/apt/lists\n            - name: apt-archives\n              mountpoint: /var/cache/apt/archives\n            - name: ccache\n              mountpoint: /tmp/build/cache/ccache\n          build_result_reuse:\n            key_files:\n              - .webauto-ci/main/autoware-build/**/*\n              - src/**/*\n      base_container_image:\n        from: ubuntu:22.04\n      output_container_image:\n        from: autoware-build\n        workdir: /opt/autoware\n        user: autoware\n\nsimulations:\n  - name: lexus_planning_sim\n    type: planning_sim_v2\n    simulator:\n      deployment:\n        type: container\n        artifact: main\n      runtime:\n        type: standard1/amd64/medium\n      parameters:\n        launch_autoware: \"true\"\n        autoware_launch_package: autoware_launch\n        autoware_launch_file: planning_simulator.launch.xml\n        architecture_type: awf/universe/20250130\n        vehicle_model: sample_vehicle\n        sensor_model: sample_sensor_kit\n        initialize_duration: \"90\"\n        launch_visualization: \"false\"\n\nrelease:\n  components:\n    - name: planning\n      deployment:\n        type: container\n        artifact: main\n    - name: perception\n      deployment:\n        type: container\n        artifact: main\n"
  },
  {
    "path": ".yamllint.yaml",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\nextends: default\n\nignore: |\n  *.param.yaml\n\nrules:\n  braces:\n    level: error\n    max-spaces-inside: 1 # To format with Prettier\n  comments:\n    level: error\n    min-spaces-from-content: 1 # To be compatible with C++ and Python\n  document-start:\n    level: error\n    present: false # Don't need document start markers\n  line-length: disable # Delegate to Prettier\n  truthy:\n    level: error\n    check-keys: false # To allow 'on' of GitHub Actions\n  quoted-strings:\n    level: error\n    required: only-when-needed # To keep consistent style\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, caste, color, religion, or sexual\nidentity and orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.\n\n## Our Standards\n\nExamples of behavior that contributes to a positive environment for our\ncommunity include:\n\n- Demonstrating empathy and kindness toward other people\n- Being respectful of differing opinions, viewpoints, and experiences\n- Giving and gracefully accepting constructive feedback\n- Accepting responsibility and apologizing to those affected by our mistakes,\n  and learning from the experience\n- Focusing on what is best not just for us as individuals, but for the overall\n  community\n\nExamples of unacceptable behavior include:\n\n- The use of sexualized language or imagery, and sexual attention or advances of\n  any kind\n- Trolling, insulting or derogatory comments, and personal or political attacks\n- Public or private harassment\n- Publishing others' private information, such as a physical or email address,\n  without their explicit permission\n- Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Enforcement Responsibilities\n\nCommunity leaders are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nCommunity leaders have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for moderation\ndecisions when appropriate.\n\n## Scope\n\nThis Code of Conduct applies within all community spaces, and also applies when\nan individual is officially representing the community in public spaces.\nExamples of representing our community include using an official e-mail address,\nposting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported to the community leaders responsible for enforcement at\n<conduct@autoware.org>.\nAll complaints will be reviewed and investigated promptly and fairly.\n\nAll community leaders are obligated to respect the privacy and security of the\nreporter of any incident.\n\n## Enforcement Guidelines\n\nCommunity leaders will follow these Community Impact Guidelines in determining\nthe consequences for any action they deem in violation of this Code of Conduct:\n\n### 1. Correction\n\n**Community Impact**: Use of inappropriate language or other behavior deemed\nunprofessional or unwelcome in the community.\n\n**Consequence**: A private, written warning from community leaders, providing\nclarity around the nature of the violation and an explanation of why the\nbehavior was inappropriate. A public apology may be requested.\n\n### 2. Warning\n\n**Community Impact**: A violation through a single incident or series of\nactions.\n\n**Consequence**: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or permanent\nban.\n\n### 3. Temporary Ban\n\n**Community Impact**: A serious violation of community standards, including\nsustained inappropriate behavior.\n\n**Consequence**: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.\n\n### 4. Permanent Ban\n\n**Community Impact**: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior, harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\n**Consequence**: A permanent ban from any sort of public interaction within the\ncommunity.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 2.1, available at\n[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].\n\nCommunity Impact Guidelines were inspired by\n[Mozilla's code of conduct enforcement ladder][mozilla coc].\n\nFor answers to common questions about this code of conduct, see the FAQ at\n[https://www.contributor-covenant.org/faq][faq]. Translations are available at\n[https://www.contributor-covenant.org/translations][translations].\n\n[homepage]: https://www.contributor-covenant.org\n[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html\n[mozilla coc]: https://github.com/mozilla/diversity\n[faq]: https://www.contributor-covenant.org/faq\n[translations]: https://www.contributor-covenant.org/translations\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nSee <https://autowarefoundation.github.io/autoware-documentation/main/contributing/>.\n"
  },
  {
    "path": "CPPLINT.cfg",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\n# Modified from https://github.com/ament/ament_lint/blob/ebd524bb9973d5ec1dc48a670ce54f958a5a0243/ament_cpplint/ament_cpplint/main.py#L64-L120\nset noparent\nlinelength=100\nincludeorder=standardcfirst\nfilter=-build/c++11               # we do allow C++11\nfilter=-build/c++17               # we allow <filesystem>\nfilter=-build/namespaces_literals # we allow using namespace for literals\nfilter=-runtime/references        # we consider passing non-const references to be ok\nfilter=-whitespace/braces         # we wrap open curly braces for namespaces, classes and functions\nfilter=-whitespace/indent         # we don't indent keywords like public, protected and private with one space\nfilter=-whitespace/newline        # we allow the developer to decide about newline at the end of file (it's clashing with clang-format)\nfilter=-whitespace/parens         # we allow closing parenthesis to be on the next line\nfilter=-whitespace/semicolon      # we allow the developer to decide about whitespace after a semicolon\nfilter=-build/header_guard        # we automatically fix the names of header guards using pre-commit\nfilter=-build/include_order       # we use the custom include order\nfilter=-build/include_subdir      # we allow the style of \"foo.hpp\"\n"
  },
  {
    "path": "DISCLAIMER.md",
    "content": "DISCLAIMER\n\n“Autoware” will be provided by The Autoware Foundation under the Apache License 2.0.\nThis “DISCLAIMER” will be applied to all users of Autoware (a “User” or “Users”) with\nthe Apache License 2.0 and Users shall hereby approve and acknowledge all the contents\nspecified in this disclaimer below and will be deemed to consent to this\ndisclaimer without any objection upon utilizing or downloading Autoware.\n\nDisclaimer and Waiver of Warranties\n\n1. AUTOWARE FOUNDATION MAKES NO REPRESENTATION OR WARRANTY OF ANY KIND,\n   EXPRESS OR IMPLIED, WITH RESPECT TO PROVIDING AUTOWARE (the “Service”)\n   including but not limited to any representation or warranty (i) of fitness or\n   suitability for a particular purpose contemplated by the Users, (ii) of the\n   expected functions, commercial value, accuracy, or usefulness of the Service,\n   (iii) that the use by the Users of the Service complies with the laws and\n   regulations applicable to the Users or any internal rules established by\n   industrial organizations, (iv) that the Service will be free of interruption or\n   defects, (v) of the non-infringement of any third party's right and (vi) the\n   accuracy of the content of the Services and the software itself.\n\n2. The Autoware Foundation shall not be liable for any damage incurred by the\n   User that are attributable to the Autoware Foundation for any reasons\n   whatsoever. UNDER NO CIRCUMSTANCES SHALL THE AUTOWARE FOUNDATION BE LIABLE FOR\n   INCIDENTAL, INDIRECT, SPECIAL OR FUTURE DAMAGES OR LOSS OF PROFITS.\n\n3. A User shall be entirely responsible for the content posted by the User and\n   its use of any content of the Service or the Website. If the User is held\n   responsible in a civil action such as a claim for damages or even in a criminal\n   case, the Autoware Foundation and member companies, governments and academic &\n   non-profit organizations and their directors, officers, employees and agents\n   (collectively, the “Indemnified Parties”) shall be completely discharged from\n   any rights or assertions the User may have against the Indemnified Parties, or\n   from any legal action, litigation or similar procedures.\n\nIndemnity\n\nA User shall indemnify and hold the Indemnified Parties harmless from any of\ntheir damages, losses, liabilities, costs or expenses (including attorneys'\nfees or criminal compensation), or any claims or demands made against the\nIndemnified Parties by any third party, due to or arising out of, or in\nconnection with utilizing Autoware (including the representations and\nwarranties), the violation of applicable Product Liability Law of each country\n(including criminal case) or violation of any applicable laws by the Users, or\nthe content posted by the User or its use of any content of the Service or the\nWebsite.\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "NOTICE",
    "content": "autowarefoundation/autoware\nCopyright 2021 The Autoware Foundation\n\nThis product includes software developed at\nThe Autoware Foundation (https://www.autoware.org/).\n\nThis product includes code developed by TIER IV.\nCopyright 2021 TIER IV, Inc.\n"
  },
  {
    "path": "README.md",
    "content": "# Autoware - the world's leading open-source software project for autonomous driving\n\n![Autoware_RViz](https://user-images.githubusercontent.com/63835446/158918717-58d6deaf-93fb-47f9-891d-e242b02cba7b.png)\n\n<!--- Contributors -->\n<p align=\"center\">\n    <a href=\"https://github.com/autowarefoundation/autoware_universe/graphs/contributors\">\n        <img src=\"https://img.shields.io/github/contributors/autowarefoundation/autoware_universe?style=flat&label=Autoware%20Universe%20Contributors\"\n            alt=\"Autoware Universe Contributors\" /></a>\n    <a href=\"https://github.com/autowarefoundation/autoware/graphs/contributors\">\n        <img src=\"https://img.shields.io/github/contributors/autowarefoundation/autoware?style=flat&label=Autoware%20Contributors\"\n            alt=\"Autoware Contributors\" /></a>\n</p>\n\n<!--- Commit Activity -->\n<p align=\"center\">\n    <a href=\"https://github.com/autowarefoundation/autoware_universe/pulse\">\n        <img src=\"https://img.shields.io/github/commit-activity/m/autowarefoundation/autoware_universe?style=flat&label=Autoware%20Universe%20Commit%20Activity\"\n            alt=\"Autoware Universe Activity\" /></a>\n    <a href=\"https://github.com/autowarefoundation/autoware/pulse\">\n        <img src=\"https://img.shields.io/github/commit-activity/m/autowarefoundation/autoware?style=flat&label=Autoware%20Commit%20Activity\"\n            alt=\"Autoware Activity\" /></a>\n</p>\n\n<!--- License -->\n<p align=\"center\">\n    <a href=\"https://github.com/autowarefoundation/autoware/blob/main/LICENSE\">\n        <img src=\"https://img.shields.io/github/license/autowarefoundation/autoware?style=flat&label=License\"\n            alt=\"License\" /></a>\n</p>\n\n<!--- CI Reports -->\n<p align=\"center\">\n    <a href=\"https://github.com/autowarefoundation/autoware/actions/workflows/health-check.yaml?query=branch%3Amain\">\n        <img src=\"https://img.shields.io/github/actions/workflow/status/autowarefoundation/autoware/health-check.yaml?style=flat&label=health-check\"\n            alt=\"health-check CI\" /></a>\n    <a href=\"https://app.codecov.io/gh/autowarefoundation/autoware_universe\">\n        <img src=\"https://img.shields.io/codecov/c/gh/autowarefoundation/autoware_universe?style=flat&label=Coverage&logo=codecov&logoColor=white\"\n            alt=\"Code Coverage\" /></a>\n</p>\n\n<!--- Social Media -->\n<p align=\"center\">\n    <a href=\"https://discord.gg/Q94UsPvReQ\">\n        <img src=\"https://img.shields.io/discord/953808765935816715?logo=discord&logoColor=white&style=flat&label=Autoware%20Discord\"\n            alt=\"Autoware Discord\"></a>\n    <a href=\"https://twitter.com/intent/follow?screen_name=AutowareFdn\">\n        <img src=\"https://img.shields.io/twitter/follow/AutowareFdn?logo=x&logoColor=white&style=flat\"\n            alt=\"Autoware Twitter / X\"></a>\n    <a href=\"https://www.linkedin.com/company/the-autoware-foundation/\">\n        <img src=\"https://img.shields.io/badge/Linkedin-Autoware%20Foundation-0a66c2?logo=linkedin&logoColor=white&style=flat\"\n            alt=\"Autoware Linkedin\"></a>\n</p>\n\nAutoware is an open-source software stack for self-driving vehicles, built on the [Robot Operating System (ROS)](https://www.ros.org/). It includes all of the necessary functions to drive an autonomous vehicles from localization and object detection to route planning and control, and was created with the aim of enabling as many individuals and organizations as possible to contribute to open innovations in autonomous driving technology.\n\n![Autoware architecture](https://static.wixstatic.com/media/984e93_552e338be28543c7949717053cc3f11f~mv2.png/v1/crop/x_0,y_1,w_1500,h_879/fill/w_863,h_506,al_c,usm_0.66_1.00_0.01,enc_auto/Autoware-GFX_edited.png)\n\n## Documentation\n\nTo learn more about using or developing Autoware, refer to the [Autoware documentation site](https://autowarefoundation.github.io/autoware-documentation/main/). You can find the source for the documentation in [autowarefoundation/autoware-documentation](https://github.com/autowarefoundation/autoware-documentation).\n\n## Repository overview\n\n- [autowarefoundation/autoware](https://github.com/autowarefoundation/autoware)\n  - Meta-repository containing `.repos` files to construct an Autoware workspace.\n  - It is anticipated that this repository will be frequently forked by users, and so it contains minimal information to avoid unnecessary differences.\n- [autowarefoundation/autoware_core](https://github.com/autowarefoundation/autoware_core)\n  - Main repository for high-quality, stable ROS packages for Autonomous Driving.\n  - Based on [Autoware.Auto](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto) and [Autoware.Universe](https://github.com/autowarefoundation/autoware_universe).\n- [autowarefoundation/autoware_universe](https://github.com/autowarefoundation/autoware_universe)\n  - Repository for experimental, cutting-edge ROS packages for Autonomous Driving.\n  - Autoware Universe was created to make it easier for researchers and developers to extend the functionality of Autoware Core\n- [autowarefoundation/autoware_launch](https://github.com/autowarefoundation/autoware_launch)\n  - Launch configuration repository containing node configurations and their parameters.\n- [autowarefoundation/autoware-github-actions](https://github.com/autowarefoundation/autoware-github-actions)\n  - Contains [reusable GitHub Actions workflows](https://docs.github.com/ja/actions/learn-github-actions/reusing-workflows) used by multiple repositories for CI.\n  - Utilizes the [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) concept.\n- [autowarefoundation/autoware-documentation](https://github.com/autowarefoundation/autoware-documentation)\n  - Documentation repository for Autoware users and developers.\n  - Since Autoware Core/Universe has multiple repositories, a central documentation repository is important to make information accessible from a single place.\n\n## Using Autoware.AI\n\nIf you wish to use Autoware.AI, the previous version of Autoware based on ROS 1, switch to [autoware-ai](https://github.com/autowarefoundation/autoware_ai) repository. However, be aware that Autoware.AI has reached the end-of-life as of 2022, and we strongly recommend transitioning to Autoware Core/Universe for future use.\n\n## Contributing\n\n- [There is no formal process to become a contributor](https://github.com/autowarefoundation/autoware-projects/wiki#contributors) - you can comment on any [existing issues](https://github.com/autowarefoundation/autoware_universe/issues) or make a pull request on any Autoware repository!\n  - Make sure to follow the [Contribution Guidelines](https://autowarefoundation.github.io/autoware-documentation/main/contributing/).\n  - Take a look at Autoware's [various working groups](https://github.com/autowarefoundation/autoware-projects/wiki#working-group-list) to gain an understanding of any work in progress and to see how projects are managed.\n- If you have any technical questions, you can start a discussion in the [Q&A category](https://github.com/autowarefoundation/autoware/discussions/categories/q-a) to request help and confirm if a potential issue is a bug or not.\n\n## Useful resources\n\n- [Autoware Foundation homepage](https://www.autoware.org/)\n- [Support guidelines](https://autowarefoundation.github.io/autoware-documentation/main/support/support-guidelines/)\n- [CI metrics](https://autowarefoundation.github.io/autoware-ci-metrics/)\n"
  },
  {
    "path": "amd64.env",
    "content": "# ROS distribution (humble)\nrosdistro=humble\nrmw_implementation=rmw_cyclonedds_cpp\n\n# Base image selection for Humble\nbase_image=ros:humble-ros-base-jammy\nautoware_base_image=ghcr.io/autowarefoundation/autoware-base:latest\nautoware_base_cuda_image=ghcr.io/autowarefoundation/autoware-base:cuda-latest\n\ncuda_version=12.8\ntensorrt_version=10.8.0.43-1+cuda12.8\ncumm_version=0.5.3\nspconv_version=2.3.8\n"
  },
  {
    "path": "amd64_jazzy.env",
    "content": "# ROS distribution (jazzy)\nrosdistro=jazzy\nrmw_implementation=rmw_cyclonedds_cpp\n\n# Jazzy-specific overrides (will be set by build.sh)\nbase_image=ros:jazzy-ros-base-noble\nautoware_base_image=ghcr.io/autowarefoundation/autoware-base:latest-jazzy\nautoware_base_cuda_image=ghcr.io/autowarefoundation/autoware-base:cuda-latest-jazzy\n\ncuda_version=12.8\ntensorrt_version=10.8.0.43-1+cuda12.8\ncumm_version=0.5.3\nspconv_version=2.3.8\n"
  },
  {
    "path": "ansible/.gitignore",
    "content": "*.retry\n"
  },
  {
    "path": "ansible/COLCON_IGNORE",
    "content": ""
  },
  {
    "path": "ansible/README.md",
    "content": "# Ansible Collection - autoware.dev_env\n\nThis collection contains the playbooks to set up the development environment for Autoware.\n\n## Set up a development environment\n\n### Ansible installation\n\n```bash\n# Remove apt installed ansible (In Ubuntu 22.04, ansible the version is old)\nsudo apt-get purge ansible\n\n# Install pipx\nsudo apt-get -y update\nsudo apt-get -y install pipx\n\n# Add pipx to the system PATH\npython3 -m pipx ensurepath\n\n# Install ansible\npipx install --include-deps --force \"ansible==10.*\"\n```\n\n### Install ansible collections\n\nThis step should be repeated when a new playbook is added.\n\n```bash\ncd ~/autoware # The root directory of the cloned repository\nansible-galaxy collection install -f -r \"ansible-galaxy-requirements.yaml\"\n```\n"
  },
  {
    "path": "ansible/galaxy.yml",
    "content": "# Required\nnamespace: autoware\nname: dev_env\nversion: 0.1.0\nreadme: README.md\nauthors:\n  - Kenji Miyake <kenji.miyake@tier4.jp>\n\n# Optional\ndescription: Set up development environment for Autoware\nlicense:\n  - Apache-2.0\ntags:\n  - autoware\ndependencies: {}\nrepository: https://github.com/autowarefoundation/autoware\ndocumentation: https://autowarefoundation.github.io/autoware-documentation\nhomepage: https://www.autoware.org/\nissues: https://github.com/autowarefoundation/autoware/issues\nbuild_ignore: []\n"
  },
  {
    "path": "ansible/playbooks/docker.yaml",
    "content": "- name: Set up Docker development environments for Autoware\n  hosts: localhost\n  connection: local\n  vars_prompt:\n    - name: prompt_install_nvidia\n      prompt: |-\n        [Warning] Some Autoware components depend on the CUDA, and TensorRT NVIDIA libraries which have end-user license agreements that should be reviewed before installation.\n        Install NVIDIA libraries? [y/N]\n      private: false\n  pre_tasks:\n    - name: Print args\n      ansible.builtin.debug:\n        msg:\n          - cuda_version: \"{{ cuda_version }}\"\n    - name: Show a warning if the NVIDIA libraries will not be installed\n      ansible.builtin.pause:\n        seconds: 10\n        prompt: |\n          [Warning] Skipping installation of NVIDIA libraries. Please manually install them if you plan to use any dependent components.\n      when: prompt_install_nvidia != 'y'\n  roles:\n    - role: autoware.dev_env.cuda\n      when: prompt_install_nvidia == 'y'\n    - role: autoware.dev_env.docker_engine\n    - role: autoware.dev_env.nvidia_container_toolkit\n"
  },
  {
    "path": "ansible/playbooks/download_artifacts.yaml",
    "content": "- name: Download Autoware artifacts\n  hosts: localhost\n  roles:\n    - autoware.dev_env.artifacts\n"
  },
  {
    "path": "ansible/playbooks/install_rviz_theme.yaml",
    "content": "- name: Install RViz theme\n  hosts: localhost\n  roles:\n    - autoware.dev_env.qt5ct_setup\n"
  },
  {
    "path": "ansible/playbooks/install_spconv.yaml",
    "content": "- name: Download and install the cumm and spconv packages\n  hosts: localhost\n  roles:\n    - autoware.dev_env.spconv\n"
  },
  {
    "path": "ansible/playbooks/openadkit.yaml",
    "content": "- name: Set up source development environments for Autoware Universe\n  hosts: localhost\n  connection: local\n  pre_tasks:\n    - name: Verify OS\n      ansible.builtin.fail:\n        msg: Only Ubuntu 22.04 and 24.04 are supported for this branch. Please refer to https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/source-installation/.\n      when: ansible_distribution != 'Ubuntu' or (ansible_distribution_version != '22.04' and ansible_distribution_version != '24.04')\n\n    - name: Print args\n      ansible.builtin.debug:\n        msg:\n          - module: \"{{ module }}\"\n          - rosdistro: \"{{ rosdistro }}\"\n          - rmw_implementation: \"{{ rmw_implementation }}\"\n          - cuda_version: \"{{ cuda_version }}\"\n          - tensorrt_version: \"{{ tensorrt_version }}\"\n  roles:\n    # Autoware base dependencies\n    - role: autoware.dev_env.rmw_implementation\n      when: module == 'base'\n      vars:\n        rmw_implementation__rosdistro: \"{{ rosdistro }}\"\n        rmw_implementation__name: \"{{ rmw_implementation }}\"\n    - role: autoware.dev_env.gdown\n      when: module == 'base'\n    - role: autoware.dev_env.kisak_mesa\n      when: module == 'base' and rosdistro != 'jazzy'\n    - role: autoware.dev_env.build_tools\n      when: module == 'all' and install_devel=='y'\n\n    # Module specific dependencies\n    - role: autoware.dev_env.acados\n      when: module == 'all'\n    - role: autoware.dev_env.geographiclib\n      when: module == 'perception-localization' or module == 'all'\n    - role: autoware.dev_env.cuda\n      when: (module == 'base' or module == 'perception-localization' or module == 'all') and prompt_install_nvidia=='y'\n    - role: autoware.dev_env.tensorrt\n      when: (module == 'base' or module == 'perception-localization' or module == 'all') and prompt_install_nvidia=='y'\n    - role: autoware.dev_env.spconv\n      when: (module == 'base' or module == 'perception-localization' or module == 'all') and prompt_install_nvidia=='y'\n\n    # Development environment\n    - role: autoware.dev_env.dev_tools\n      when: module == 'dev-tools'\n    - role: autoware.dev_env.ros2_dev_tools\n      when: module == 'dev-tools'\n\n    # ONNX files and other artifacts\n    - role: autoware.dev_env.artifacts\n      when: prompt_download_artifacts == 'y'\n"
  },
  {
    "path": "ansible/playbooks/role_rmw_implementation.yaml",
    "content": "- name: Install RMW implementation\n  hosts: localhost\n  roles:\n    - role: autoware.dev_env.rmw_implementation\n      vars:\n        rmw_implementation__rosdistro: \"{{ rosdistro }}\"\n        rmw_implementation__name: \"{{ rmw_implementation }}\"\n"
  },
  {
    "path": "ansible/playbooks/setup_acados.yaml",
    "content": "- name: Setup acados\n  hosts: localhost\n  connection: local\n  roles:\n    - role: autoware.dev_env.acados\n"
  },
  {
    "path": "ansible/playbooks/telegraf.yaml",
    "content": "- name: Set up Telegraf and InfluxDB v2\n  hosts: localhost\n  roles:\n    - autoware.dev_env.telegraf\n"
  },
  {
    "path": "ansible/playbooks/universe.yaml",
    "content": "- name: Set up source development environments for Autoware Universe\n  hosts: localhost\n  connection: local\n  vars_prompt:\n    - name: prompt_install_nvidia\n      prompt: |-\n        [Warning] Some Autoware components depend on the CUDA, and TensorRT NVIDIA libraries which have end-user license agreements that should be reviewed before installation.\n        Install NVIDIA libraries? [y/N]\n      private: false\n    - name: prompt_download_artifacts\n      prompt: |-\n        [Warning] Should the ONNX model files and other artifacts be downloaded alongside setting up the development environment.\n        Download artifacts? [y/N]\n      private: false\n    - name: install_devel\n      prompt: |-\n        [Warning] Do you want to install recommended development tools for Autoware? [y/N]\n      private: false\n      default: y\n  pre_tasks:\n    - name: Verify OS\n      ansible.builtin.fail:\n        msg: Only Ubuntu 22.04 and 24.04 are supported for this branch. Please refer to https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/source-installation/.\n      when: ansible_distribution_version not in ['22.04', '24.04']\n\n    - name: Print args\n      ansible.builtin.debug:\n        msg:\n          - rosdistro: \"{{ rosdistro }}\"\n          - rmw_implementation: \"{{ rmw_implementation }}\"\n          - cuda_version: \"{{ cuda_version }}\"\n          - tensorrt_version: \"{{ tensorrt_version }}\"\n\n    - name: Show a warning if the NVIDIA libraries will not be installed\n      ansible.builtin.pause:\n        seconds: 10\n        prompt: |\n          [Warning] Skipping installation of NVIDIA libraries. Please manually install them if you plan to use any dependent components.\n      when: prompt_install_nvidia != 'y'\n  roles:\n    # Autoware base dependencies\n    - role: autoware.dev_env.ros2\n    - role: autoware.dev_env.ros2_dev_tools\n    - role: autoware.dev_env.rmw_implementation\n      vars:\n        rmw_implementation__rosdistro: \"{{ rosdistro }}\"\n        rmw_implementation__name: \"{{ rmw_implementation }}\"\n    - role: autoware.dev_env.gdown\n    - role: autoware.dev_env.build_tools\n    - role: autoware.dev_env.agnocast\n      when: rosdistro == 'humble'\n\n    # Autoware module dependencies\n    - role: autoware.dev_env.acados\n    - role: autoware.dev_env.geographiclib\n    - role: autoware.dev_env.cuda\n      when: prompt_install_nvidia == 'y'\n    - role: autoware.dev_env.tensorrt\n      when: prompt_install_nvidia == 'y'\n    - role: autoware.dev_env.spconv\n      when: prompt_install_nvidia == 'y'\n\n    # Autoware devel dependencies\n    - role: autoware.dev_env.dev_tools\n      when: install_devel == 'y'\n\n    # ONNX files and other artifacts\n    - role: autoware.dev_env.artifacts\n      when: prompt_download_artifacts == 'y'\n\n    # Qt5ct setup (RViz theme)\n    - role: autoware.dev_env.qt5ct_setup\n"
  },
  {
    "path": "ansible/roles/acados/README.md",
    "content": "# Setup acados\n\nInstalls [acados](https://github.com/acados/acados), a fast and embedded solver for nonlinear optimal control, from source.\n\n## What it does\n\n1. Clones the acados repository (shallow) to `/opt/acados`\n2. Initializes submodules (shallow)\n3. Builds and installs acados in-tree with `QPOASES` and position-independent code enabled\n4. Downloads the [tera renderer](https://github.com/acados/tera_renderer) binary to `/opt/acados/bin/t_renderer` (supports `x86_64` and `aarch64`)\n5. Creates a Python virtual environment at `/opt/acados/.venv`\n6. Installs `casadi`, `sympy`, and `acados_template` (editable) in the venv\n7. Adds `CMAKE_PREFIX_PATH`, `ACADOS_SOURCE_DIR`, and `LD_LIBRARY_PATH` to the user's `.bashrc`\n\n## Installation ⭐\n\nInstall ansible following the instructions in the [ansible installation guide](../../README.md#ansible-installation).\n\n```bash\ncd ~/autoware # The root directory of the cloned repository\nansible-galaxy collection install -f -r \"ansible-galaxy-requirements.yaml\"\n```\n\nThis step should be repeated when the ansible directory is updated.\n\n```bash\nansible-playbook autoware.dev_env.setup_acados --ask-become-pass\n```\n\n## Directory layout\n\nAfter running, `/opt/acados` contains both the source tree and installed artifacts:\n\n```text\n/opt/acados/\n├── .venv/            # Python virtual environment\n├── bin/t_renderer    # tera renderer binary\n├── build/            # cmake build directory\n├── cmake/            # acadosConfig.cmake (used by find_package)\n├── lib/              # built shared libraries\n├── include/          # headers\n├── interfaces/       # acados_template Python package (installed to .venv)\n├── external/         # submodules (qpoases, etc.)\n└── ...               # remaining source tree\n```\n\n## Usage in CMake\n\nAfter provisioning, any CMake project can use acados with:\n\n```cmake\nfind_package(acados REQUIRED)\ntarget_link_libraries(your_target PRIVATE acados)\n```\n\nNo additional path configuration is needed, `CMAKE_PREFIX_PATH` is set via `.bashrc`.\n\n## Using the Python interface during `colcon build`\n\nIf your ROS 2 package generates acados C code at build time (e.g. via a Python script that uses `acados_template` and `casadi`), you need to source the venv so the code-generation script can find the installed packages.\n\nThe Ansible role already exports `ACADOS_SOURCE_DIR` and `LD_LIBRARY_PATH` in `.bashrc`, so those are available to `colcon build` as long as you've sourced your shell. The only extra step is pointing CMake at the venv Python so `casadi`, `sympy`, and `acados_template` are importable:\n\n```cmake\nfind_program(ACADOS_PYTHON NAMES python3 PATHS $ENV{ACADOS_SOURCE_DIR}/.venv/bin NO_DEFAULT_PATH)\n\nadd_custom_command(\n  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/acados_solver.c\n  COMMAND ${ACADOS_PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_solver.py\n    --output-dir ${CMAKE_CURRENT_BINARY_DIR}/generated\n  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_solver.py\n  COMMENT \"Generating acados solver C code\"\n)\n```\n\nThe generated C code is then compiled as part of your normal CMake target, no Python dependency at runtime.\n\n## Requirements\n\n- CMake\n- A C compiler (gcc/clang)\n- `make`\n- `git`\n- `python3` with `venv` module (`python3-venv` on Ubuntu)\n\n## Idempotency\n\nThe role is safe to run multiple times. The git clone resets any local modifications, and the build steps re-run on each invocation to ensure correctness when the version is changed. The `.bashrc` entries use `lineinfile` with regex matching to avoid duplication. The venv creation is skipped if it already exists (`creates` guard).\n"
  },
  {
    "path": "ansible/roles/acados/defaults/main.yaml",
    "content": "acados_version: v0.5.3\nacados_tera_renderer_version: v0.2.0\nacados_pip_packages:\n  - casadi\n  - sympy\n"
  },
  {
    "path": "ansible/roles/acados/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/acados/tasks/main.yaml",
    "content": "- name: Clone acados repository (shallow) with submodules\n  become: true\n  ansible.builtin.git:\n    repo: https://github.com/acados/acados.git\n    dest: /opt/acados\n    version: \"{{ acados_version }}\"\n    depth: 1\n    force: true\n    recursive: true\n\n- name: Create build directory\n  become: true\n  ansible.builtin.file:\n    path: /opt/acados/build\n    state: directory\n    mode: \"0755\"\n\n# cspell:ignore DACADOS\n- name: Configure acados with CMake\n  become: true\n  ansible.builtin.command:\n    cmd: >\n      cmake\n      -DACADOS_WITH_QPOASES=ON\n      -DCMAKE_POSITION_INDEPENDENT_CODE=ON\n      ..\n    chdir: /opt/acados/build\n  changed_when: false\n\n- name: Build and install acados\n  become: true\n  ansible.builtin.command:\n    cmd: make install -j{{ ansible_processor_vcpus }}\n    chdir: /opt/acados/build\n  changed_when: false\n\n- name: Create acados bin directory\n  become: true\n  ansible.builtin.file:\n    path: /opt/acados/bin\n    state: directory\n    mode: \"0755\"\n\n- name: Set tera renderer architecture\n  ansible.builtin.set_fact:\n    acados_tera_arch: \"{{ {'x86_64': 'amd64', 'aarch64': 'arm64'}[ansible_architecture] }}\"\n\n- name: Download tera renderer\n  become: true\n  ansible.builtin.get_url:\n    url: https://github.com/acados/tera_renderer/releases/download/{{ acados_tera_renderer_version }}/t_renderer-{{ acados_tera_renderer_version }}-linux-{{ acados_tera_arch }}\n    dest: /opt/acados/bin/t_renderer\n    mode: \"0755\"\n\n# ---------- Python virtual environment ----------\n\n- name: Create acados Python virtual environment\n  become: true\n  ansible.builtin.command:\n    cmd: python3 -m venv /opt/acados/.venv\n    creates: /opt/acados/.venv/bin/activate\n\n- name: Upgrade pip inside the virtual environment\n  become: true\n  ansible.builtin.command:\n    cmd: /opt/acados/.venv/bin/pip install --upgrade pip\n  changed_when: false\n\n- name: Install Python packages in acados venv\n  become: true\n  ansible.builtin.command:\n    cmd: /opt/acados/.venv/bin/pip install {{ acados_pip_packages | join(' ') }}\n  changed_when: false\n\n- name: Install acados_template (editable) in acados venv\n  become: true\n  ansible.builtin.command:\n    cmd: /opt/acados/.venv/bin/pip install -e /opt/acados/interfaces/acados_template\n  changed_when: false\n\n# ---------- Environment (.bashrc) ----------\n\n- name: Add acados CMAKE_PREFIX_PATH to .bashrc\n  become: true\n  ansible.builtin.lineinfile:\n    path: \"{{ item }}\"\n    line: export CMAKE_PREFIX_PATH=\"/opt/acados:${CMAKE_PREFIX_PATH}\"\n    regexp: CMAKE_PREFIX_PATH.*acados\n    state: present\n  loop:\n    - \"{{ ansible_env.HOME }}/.bashrc\"\n    - /etc/skel/.bashrc\n\n- name: Add ACADOS_SOURCE_DIR to .bashrc\n  become: true\n  ansible.builtin.lineinfile:\n    path: \"{{ item }}\"\n    line: export ACADOS_SOURCE_DIR=\"/opt/acados\"\n    regexp: ACADOS_SOURCE_DIR\n    state: present\n  loop:\n    - \"{{ ansible_env.HOME }}/.bashrc\"\n    - /etc/skel/.bashrc\n\n- name: Add acados LD_LIBRARY_PATH to .bashrc\n  become: true\n  ansible.builtin.lineinfile:\n    path: \"{{ item }}\"\n    line: export LD_LIBRARY_PATH=\"/opt/acados/lib:${LD_LIBRARY_PATH}\"\n    regexp: LD_LIBRARY_PATH.*acados\n    state: present\n  loop:\n    - \"{{ ansible_env.HOME }}/.bashrc\"\n    - /etc/skel/.bashrc\n"
  },
  {
    "path": "ansible/roles/agnocast/README.md",
    "content": "# agnocast\n\nThis role installs [Agnocast](https://github.com/tier4/agnocast), true zero-copy communication middleware for all ROS 2 message types.\n\n## Inputs\n\nNone.\n\n## Manual Installation\n\n```bash\nagnocast_version=\"2.1.2\"\nagnocast_heaphook_package=\"agnocast-heaphook-v${agnocast_version}\"\nagnocast_kmod_package=\"agnocast-kmod-v${agnocast_version}\"\n\nsudo add-apt-repository -y ppa:t4-system-software/agnocast\nsudo apt update\nsudo apt install -y \"${agnocast_heaphook_package}\"\n\nif dkms status | grep agnocast | grep -q \"{agnocast_version}\"; then\n    echo \"agnocast-kmod-v${agnocast_version} is already registered in dkms. Skipping purge and install.\"\nelse\n    sudo apt purge -y \"${agnocast_kmod_package}\"\n    sudo apt install -y \"${agnocast_kmod_package}\"\nfi\n\n```\n"
  },
  {
    "path": "ansible/roles/agnocast/defaults/main.yaml",
    "content": "agnocast_version: 2.3.1\nagnocast_heaphook_package: agnocast-heaphook-v{{ agnocast_version }}\nagnocast_kmod_package: agnocast-kmod-v{{ agnocast_version }}\n"
  },
  {
    "path": "ansible/roles/agnocast/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/agnocast/tasks/main.yaml",
    "content": "# Remove legacy agnocast PPA configuration (if exists)\n- name: Remove legacy agnocast PPA via add-apt-repository\n  ansible.builtin.command: add-apt-repository --remove ppa:t4-system-software/agnocast -y\n  register: agnocast_legacy_ppa_remove\n  failed_when: false\n  changed_when: agnocast_legacy_ppa_remove.rc == 0\n  become: true\n\n- name: Remove legacy agnocast sources.list files\n  ansible.builtin.shell: rm -f /etc/apt/sources.list.d/*agnocast*.list\n  args:\n    executable: /bin/bash\n  register: agnocast_legacy_sources_remove\n  changed_when: false\n  become: true\n\n- name: Remove legacy agnocast GPG keys from trusted.gpg.d\n  ansible.builtin.shell: rm -f /etc/apt/trusted.gpg.d/*agnocast*.gpg\n  args:\n    executable: /bin/bash\n  register: agnocast_legacy_gpg_remove\n  changed_when: false\n  become: true\n\n# TODO(rej55, sykwer): IPv6 support\n- name: Save current IPv6 settings\n  ansible.builtin.shell: |\n    sysctl net.ipv6.conf.all.disable_ipv6\n    sysctl net.ipv6.conf.default.disable_ipv6\n  register: agnocast_ipv6_settings\n  changed_when: false\n  become: true\n\n- name: Temporarily disable IPv6\n  ansible.posix.sysctl:\n    name: \"{{ item.name }}\"\n    value: 1\n    sysctl_set: true\n    state: present\n  loop:\n    - { name: net.ipv6.conf.all.disable_ipv6 }\n    - { name: net.ipv6.conf.default.disable_ipv6 }\n  become: true\n\n- name: Create /etc/apt/keyrings directory\n  ansible.builtin.file:\n    path: /etc/apt/keyrings\n    state: directory\n    mode: \"0755\"\n  become: true\n\n- name: Download agnocast PPA GPG key while IPv6 is disabled\n  ansible.builtin.get_url:\n    url: https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xCFDB1950382092423DF37D3E075CD8B5C91E5ACA\n    dest: /tmp/agnocast-ppa.asc\n    mode: \"0644\"\n  become: true\n  register: agnocast_gpg_key_download\n\n- name: Convert GPG key to binary format and install\n  ansible.builtin.shell: |\n    gpg --dearmor < /tmp/agnocast-ppa.asc > /etc/apt/keyrings/agnocast-ppa.gpg\n    chmod 0644 /etc/apt/keyrings/agnocast-ppa.gpg\n  args:\n    creates: /etc/apt/keyrings/agnocast-ppa.gpg\n  become: true\n\n- name: Remove temporary GPG key file\n  ansible.builtin.file:\n    path: /tmp/agnocast-ppa.asc\n    state: absent\n  become: true\n\n- name: Verify GPG key fingerprint\n  ansible.builtin.shell: |\n    set -o pipefail\n    gpg --show-keys /etc/apt/keyrings/agnocast-ppa.gpg | grep -q 'CFDB1950382092423DF37D3E075CD8B5C91E5ACA'\n  args:\n    executable: /bin/bash\n  register: agnocast_gpg_verify\n  failed_when: agnocast_gpg_verify.rc != 0\n  changed_when: false\n\n- name: Display GPG key verification success\n  ansible.builtin.debug:\n    msg: \"GPG key fingerprint verified successfully: CFDB1950382092423DF37D3E075CD8B5C91E5ACA\"\n\n- name: Add agnocast repository\n  ansible.builtin.copy:\n    dest: /etc/apt/sources.list.d/agnocast.sources\n    content: |\n      Types: deb\n      URIs: http://ppa.launchpad.net/t4-system-software/agnocast/ubuntu\n      Suites: jammy\n      Components: main\n      Signed-By: /etc/apt/keyrings/agnocast-ppa.gpg\n    mode: \"0644\"\n  become: true\n\n- name: Restore original IPv6 settings # noqa: no-changed-when\n  ansible.posix.sysctl:\n    name: \"{{ item.split('=')[0] | trim }}\"\n    value: 0\n    sysctl_set: true\n    state: present\n  loop: \"{{ agnocast_ipv6_settings.stdout_lines }}\"\n  when: item is search('=\\\\s*0')\n  become: true\n\n- name: Update apt cache\n  ansible.builtin.apt:\n    update_cache: true\n  become: true\n\n- name: Install {{ agnocast_heaphook_package }}\n  ansible.builtin.apt:\n    name: \"{{ agnocast_heaphook_package }}\"\n    state: present\n  become: true\n\n# Detect container environment\n- name: Check if running in a container using systemd-detect-virt\n  ansible.builtin.command: systemd-detect-virt -c\n  register: agnocast_container_detection\n  failed_when: false\n  changed_when: false\n\n- name: Set container environment fact\n  ansible.builtin.set_fact:\n    agnocast_is_container: \"{{ agnocast_container_detection.rc == 0 }}\"\n\n- name: Display environment detection result\n  ansible.builtin.debug:\n    msg: \"Running in container: {{ agnocast_is_container }} (detected: {{ agnocast_container_detection.stdout | default('none') }})\"\n\n- name: Display info when skipping agnocast-kmod in container\n  ansible.builtin.debug:\n    msg: \"WARNING: Running in container environment. Skipping agnocast-kmod installation. Please ensure agnocast-kmod is installed on the host system for proper functionality of agnocast.\"\n  when: agnocast_is_container\n\n- name: Handle kernel-related tasks (headers + kmod, non-container only)\n  when: not agnocast_is_container\n  block:\n    - name: Check if linux-headers package is available\n      ansible.builtin.shell: |\n        set -o pipefail\n        apt-cache search ^linux-headers-{{ ansible_kernel }}$ | grep -q linux-headers-{{ ansible_kernel }}\n      args:\n        executable: /bin/bash\n      register: agnocast_linux_headers_available\n      failed_when: false\n      changed_when: false\n      become: true\n\n    - name: Display warning if linux-headers is not available\n      ansible.builtin.debug:\n        msg: \"WARNING: linux-headers-{{ ansible_kernel }} package not found. The agnocast-kmod installation may fail. Please manually install the kernel headers and re-run this role.\"\n      when: agnocast_linux_headers_available.rc != 0\n\n    - name: Install linux headers for the running kernel\n      ansible.builtin.apt:\n        name: linux-headers-{{ ansible_kernel }}\n        state: present\n      register: agnocast_linux_headers_install\n      ignore_errors: true\n      become: true\n      when: agnocast_linux_headers_available.rc == 0\n\n    - name: Display warning if linux-headers installation failed\n      ansible.builtin.debug:\n        msg: \"WARNING: linux-headers-{{ ansible_kernel }} installation failed. DKMS installation may also fail.\"\n      when:\n        - agnocast_linux_headers_available.rc == 0\n        - agnocast_linux_headers_install.failed | default(false)\n\n    - name: Check if agnocast-kmod is installed in dkms with version v{{ agnocast_version }} # noqa: risky-shell-pipe\n      ansible.builtin.shell: dkms status agnocast/{{ agnocast_version }} | grep -q 'installed'\n      register: agnocast_dkms_status\n      failed_when: false\n      changed_when: false\n\n    - name: Purge agnocast-kmod if not found in dkms for version v{{ agnocast_version }}\n      ansible.builtin.apt:\n        name: \"{{ agnocast_kmod_package }}\"\n        state: absent\n      become: true\n      when: agnocast_dkms_status.rc != 0\n\n    - name: Install agnocast-kmod if not found in dkms for version v{{ agnocast_version }}\n      ansible.builtin.apt:\n        name: \"{{ agnocast_kmod_package }}\"\n        state: present\n      register: agnocast_kmod_install\n      ignore_errors: true\n      become: true\n      when: agnocast_dkms_status.rc != 0\n\n    - name: Display warning if agnocast-kmod installation failed\n      ansible.builtin.debug:\n        msg: \"WARNING: agnocast-kmod installation failed. To use agnocast, please manually download the Linux kernel headers and re-run this script.\"\n      when:\n        - agnocast_dkms_status.rc != 0\n        - agnocast_kmod_install.failed | default(false)\n\n    - name: Ensure agnocast module is loaded at boot via modules-load.d\n      ansible.builtin.copy:\n        dest: /etc/modules-load.d/agnocast.conf\n        content: \"agnocast\\n\"\n        owner: root\n        group: root\n        mode: \"0644\"\n      become: true\n"
  },
  {
    "path": "ansible/roles/artifacts/README.md",
    "content": "# Autoware artifacts\n\nThe Autoware perception stack uses models for inference. These models are automatically downloaded as part of the `setup-dev-env.sh` script.\n\nThe models are hosted by Web.Auto.\n\nDefault `data_dir` location is `~/autoware_data`.\n\n## Download instructions\n\n### Check out to the correct commit hash if necessary\n\nFirst check this chart if you need to change your current commit hash.\n\n```mermaid\ngraph TD\n    cond1{{What is your current commit hash?}}\n    --> option_release_branch(A release tag)\n    cond1 --> opt2(main branch)\n    opt2 --> cond2{{Did you pull `autoware-nightly.repos`?}}\n    --> option_nightly(Yes)\n    cond2 --> option_autoware_main(No, I only pulled the `autoware.repos`.)\n\n    option_release_branch --> final_normal(((No need to change the commit hash, keep following the rest of the instructions. ✅)))\n    option_nightly --> final_normal\n    option_autoware_main --> final_change(((Switch to the latest release tag. 🔄)))\n\n    %% Define styles\n    classDef conditional fill:#FFF3CD,stroke:#FFB100,stroke-width:2px,color:#000,font-weight:bold;\n    classDef final_normal fill:#D4EDDA,stroke:#28A745,stroke-width:2px,color:#000,font-weight:bold;\n    classDef final_change fill:#F8D7DA,stroke:#DC3545,stroke-width:2px,color:#000,font-weight:bold;\n    classDef neutral fill:#F0F0F0,stroke:#B0B0B0,stroke-width:2px,color:#000,font-weight:normal;\n\n    %% Apply classes\n    class cond1,cond2 conditional;\n    class final_normal final_normal;\n    class final_change final_change;\n    class option_release_branch,opt2,option_nightly,option_autoware_main neutral;\n```\n\nIf you need to switch to the latest tag, run the following commands:\n\n```bash\ncd ~/autoware\ngit fetch --tags && git checkout $(git describe --tags $(git rev-list --tags --max-count=1))\n```\n\nOnce you've downloaded the artifacts, you can switch back to your desired branch or commit hash.\n\n### Requirements\n\nInstall ansible following the instructions in the [ansible installation guide](../../README.md#ansible-installation).\n\n### Download artifacts\n\n#### Install ansible collections\n\n```bash\ncd ~/autoware # The root directory of the cloned repository\nansible-galaxy collection install -f -r \"ansible-galaxy-requirements.yaml\"\n```\n\nThis step should be repeated when a new playbook is added.\n\n#### Run the playbook\n\n```bash\nansible-playbook autoware.dev_env.download_artifacts -e \"data_dir=$HOME/autoware_data\" --ask-become-pass\n```\n\nThis will download and extract the artifacts to the specified directory and validate the checksums.\n"
  },
  {
    "path": "ansible/roles/artifacts/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/artifacts/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/artifacts/tasks/main.yaml",
    "content": "# yabloc_pose_initializer\n- name: Create yabloc_pose_initializer directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/yabloc_pose_initializer\"\n    mode: \"755\"\n    state: directory\n\n- name: Download yabloc_pose_initializer/resources.tar.gz\n  become: true\n  ansible.builtin.get_url:\n    url: https://s3.ap-northeast-2.wasabisys.com/pinto-model-zoo/136_road-segmentation-adas-0001/resources.tar.gz\n    dest: \"{{ data_dir }}/yabloc_pose_initializer/resources.tar.gz\"\n    mode: \"644\"\n    checksum: sha256:1f660e15f95074bade32b1f80dbf618e9cee1f0b9f76d3f4671cb9be7f56eb3a\n\n- name: Extract yabloc_pose_initializer/resources.tar.gz\n  ansible.builtin.unarchive:\n    src: \"{{ data_dir }}/yabloc_pose_initializer/resources.tar.gz\"\n    dest: \"{{ data_dir }}/yabloc_pose_initializer/\"\n\n# bevfusion\n- name: Create bevfusion directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/bevfusion\"\n    mode: \"755\"\n    state: directory\n\n- name: Download bevfusion/bevfusion_lidar.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/bevfusion_lidar.onnx\n    dest: \"{{ data_dir }}/bevfusion/bevfusion_lidar.onnx\"\n    mode: \"644\"\n    checksum: sha256:5c29087963bf2c4dc02bf45c29d459303be602d63f9b6adff22a75c9cfb459a6\n\n- name: Download bevfusion/bevfusion_camera_lidar.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/bevfusion_camera_lidar.onnx\n    dest: \"{{ data_dir }}/bevfusion/bevfusion_camera_lidar.onnx\"\n    mode: \"644\"\n    checksum: sha256:aa78d2f219146cb1423287643bbef81666d429ddcde4432a2e51db3f212a7c68\n\n- name: Download bevfusion/bevfusion_image_backbone.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/bevfusion_image_backbone.onnx\n    dest: \"{{ data_dir }}/bevfusion/bevfusion_image_backbone.onnx\"\n    mode: \"644\"\n    checksum: sha256:799af1e486b5c1245c8e2783bc77522d49e4a6535320ae77eba1b0f829385797\n\n- name: Download bevfusion/ml_package_bevfusion_lidar.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/ml_package_bevfusion_lidar.param.yaml\n    dest: \"{{ data_dir }}/bevfusion/ml_package_bevfusion_lidar.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:866265b9f0fc8c17805c0974339d3c7c4e601c1aa212818971fc650d71782181\n\n- name: Download bevfusion/ml_package_bevfusion_camera_lidar.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/ml_package_bevfusion_camera_lidar.param.yaml\n    dest: \"{{ data_dir }}/bevfusion/ml_package_bevfusion_camera_lidar.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:50707efcbb7fa80527d0a2effe677557d0be5df5cd72276f9af152399f27c719\n\n- name: Download bevfusion/detection_class_remapper.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/detection_class_remapper.param.yaml\n    dest: \"{{ data_dir }}/bevfusion/detection_class_remapper.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:928f9eb14ac042d725909f12b2be1532c16b09a683485c5936cf04fb04728520\n\n# streampetr\n- name: Create camera_streampetr directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/camera_streampetr\"\n    mode: \"755\"\n    state: directory\n\n- name: Download camera_streampetr/simplify_pts_head_memory.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/streampetr/v1/simplify_pts_head_memory.onnx\n    dest: \"{{ data_dir }}/camera_streampetr/simplify_pts_head_memory.onnx\"\n    mode: \"644\"\n    checksum: sha256:49b038bd280a1a4ee4f9e244d6e7315eb9c6f7b6f93e27717d9c21cb4d374015\n\n- name: Download camera_streampetr/simplify_position_embedding.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/streampetr/v1/simplify_position_embedding.onnx\n    dest: \"{{ data_dir }}/camera_streampetr/simplify_position_embedding.onnx\"\n    mode: \"644\"\n    checksum: sha256:629f14820cb8288659598f6c056c2f6cebe8df3758f1567e74fd1fb3c0f67163\n\n- name: Download camera_streampetr/simplify_extract_img_feat.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/streampetr/v1/simplify_extract_img_feat.onnx\n    dest: \"{{ data_dir }}/camera_streampetr/simplify_extract_img_feat.onnx\"\n    mode: \"644\"\n    checksum: sha256:322c2f426f9a01c43d28456f50b33f0fa2039535cf50db7329483097cd363efd\n\n- name: Download camera_streampetr/ml_package_camera_streampetr.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/streampetr/v1/ml_package_camera_streampetr.param.yaml\n    dest: \"{{ data_dir }}/camera_streampetr/ml_package_camera_streampetr.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:f539407f0b3aee65f7d6d30401dd0052dfed86fa7beefef86c79061362615218\n\n# bevdet\n- name: Create tensorrt_bevdet directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/tensorrt_bevdet\"\n    mode: \"755\"\n    state: directory\n\n- name: Download tensorrt_bevdet/tensorrt_bevdet.tar.gz\n  become: true\n  ansible.builtin.get_url:\n    url: https://autoware-files.s3.us-west-2.amazonaws.com/models/tensorrt_bevdet.tar.gz\n    dest: \"{{ data_dir }}/tensorrt_bevdet/tensorrt_bevdet.tar.gz\"\n    mode: \"644\"\n    checksum: sha256:c7d16ad395e949e7a654ab511fb3294135553f92c50f2595e63a1b3e0d142c6a\n\n- name: Extract tensorrt_bevdet/tensorrt_bevdet.tar.gz\n  ansible.builtin.unarchive:\n    src: \"{{ data_dir }}/tensorrt_bevdet/tensorrt_bevdet.tar.gz\"\n    dest: \"{{ data_dir }}/tensorrt_bevdet/\"\n\n# image_projection_based_fusion\n- name: Create image_projection_based_fusion directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/image_projection_based_fusion\"\n    mode: \"755\"\n    state: directory\n\n- name: Download image_projection_based_fusion/pts_voxel_encoder_pointpainting.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/pointpainting/v5/pts_voxel_encoder_pointpainting.onnx\n    dest: \"{{ data_dir }}/image_projection_based_fusion/pts_voxel_encoder_pointpainting.onnx\"\n    mode: \"644\"\n    checksum: sha256:3ca452ea5ca9467bf782955f75704ba8466841e275e8b8acd991b9911d53249e\n\n- name: Download image_projection_based_fusion/pts_backbone_neck_head_pointpainting.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/pointpainting/v5/pts_backbone_neck_head_pointpainting.onnx\n    dest: \"{{ data_dir }}/image_projection_based_fusion/pts_backbone_neck_head_pointpainting.onnx\"\n    mode: \"644\"\n    checksum: sha256:7fe62fcebe0e0f62a000d06aa94d779feb444d933671a4a3189fe01be8c19a00\n- name: Download image_projection_based_fusion/detection_class_remapper.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/pointpainting/v5/detection_class_remapper.param.yaml\n    dest: \"{{ data_dir }}/image_projection_based_fusion/detection_class_remapper.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:c711f8875ece9b527dfe31ffc75f8c0de2e77945ef67860a959a4e04c36772d5\n- name: Download image_projection_based_fusion/pointpainting_ml_package.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/pointpainting/v5/pointpainting_ml_package.param.yaml\n    dest: \"{{ data_dir }}/image_projection_based_fusion/pointpainting_ml_package.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:a70f8a01d592aa4e85d481d44377f37ea35ea5271c064723d6d0db7d375990a3\n# lidar_apollo_instance_segmentation\n- name: Create lidar_apollo_instance_segmentation directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/lidar_apollo_instance_segmentation\"\n    mode: \"755\"\n    state: directory\n\n- name: Download lidar_apollo_instance_segmentation/vlp-16.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/lidar_apollo_instance_segmentation/vlp-16.onnx\n    dest: \"{{ data_dir }}/lidar_apollo_instance_segmentation/vlp-16.onnx\"\n    mode: \"644\"\n    checksum: sha256:eec521ebad7553d0ea2c90472a293aecb7499ab592632f0e100481c8196eb421\n\n- name: Download lidar_apollo_instance_segmentation/hdl-64.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/lidar_apollo_instance_segmentation/hdl-64.onnx\n    dest: \"{{ data_dir }}/lidar_apollo_instance_segmentation/hdl-64.onnx\"\n    mode: \"644\"\n    checksum: sha256:86348d8c4bced750f54288b01cc471c0d4f1ec9c693466169ef19413731e6ecc\n\n- name: Download lidar_apollo_instance_segmentation/vls-128.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/lidar_apollo_instance_segmentation/vls-128.onnx\n    dest: \"{{ data_dir }}/lidar_apollo_instance_segmentation/vls-128.onnx\"\n    mode: \"644\"\n    checksum: sha256:95ef950bb694bd6de91b7e47f5d191d557e92a7f5e2a6bdf655a8b5eed4075cc\n\n# lidar_centerpoint\n- name: Create lidar_centerpoint directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/lidar_centerpoint\"\n    mode: \"755\"\n    state: directory\n\n- name: Download lidar_centerpoint/pts_voxel_encoder_centerpoint.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/pts_voxel_encoder_centerpoint.onnx\n    dest: \"{{ data_dir }}/lidar_centerpoint/pts_voxel_encoder_centerpoint.onnx\"\n    mode: \"644\"\n    checksum: sha256:dc1a876580d86ee7a341d543f8ade2ede7f43bd032dc5b44155b1f0175405764\n\n- name: Download lidar_centerpoint/pts_backbone_neck_head_centerpoint.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/pts_backbone_neck_head_centerpoint.onnx\n    dest: \"{{ data_dir }}/lidar_centerpoint/pts_backbone_neck_head_centerpoint.onnx\"\n    mode: \"644\"\n    checksum: sha256:3fe7e128955646740c41a25be0c8f141d5a94594fe79d7405fe2a859e391542e\n\n- name: Download lidar_centerpoint/pts_voxel_encoder_centerpoint_tiny.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/pts_voxel_encoder_centerpoint_tiny.onnx\n    dest: \"{{ data_dir }}/lidar_centerpoint/pts_voxel_encoder_centerpoint_tiny.onnx\"\n    mode: \"644\"\n    checksum: sha256:2c53465715c1fd2e9dc5727ef3fca74f4cdf0538f74286b0946e219d0ca5693b\n\n- name: Download lidar_centerpoint/pts_backbone_neck_head_centerpoint_tiny.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/pts_backbone_neck_head_centerpoint_tiny.onnx\n    dest: \"{{ data_dir }}/lidar_centerpoint/pts_backbone_neck_head_centerpoint_tiny.onnx\"\n    mode: \"644\"\n    checksum: sha256:9bb0b634f3664bd098ce7d6a3d8a9fb7cc8d9b8252b27f302c71e43316bab551\n- name: Download lidar_centerpoint/centerpoint_ml_package.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/centerpoint_ml_package.param.yaml\n    dest: \"{{ data_dir }}/lidar_centerpoint/centerpoint_ml_package.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:9bbc16e521dd87c91cbadf1cb89c8b81393d1f8e1069af385aaba677576f0e27\n- name: Download lidar_centerpoint/centerpoint_tiny_ml_package.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/centerpoint_tiny_ml_package.param.yaml\n    dest: \"{{ data_dir }}/lidar_centerpoint/centerpoint_tiny_ml_package.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:e0846b08fbd023d6a7c085f5389d0ccaef8ad9cd2c5e1eb7dbc6583618e38424\n- name: Download lidar_centerpoint/centerpoint_sigma_ml_package.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/centerpoint_sigma_ml_package.param.yaml\n    dest: \"{{ data_dir }}/lidar_centerpoint/centerpoint_sigma_ml_package.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:9bbc16e521dd87c91cbadf1cb89c8b81393d1f8e1069af385aaba677576f0e27\n- name: Download lidar_centerpoint/detection_class_remapper.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/detection_class_remapper.param.yaml\n    dest: \"{{ data_dir }}/lidar_centerpoint/detection_class_remapper.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:c711f8875ece9b527dfe31ffc75f8c0de2e77945ef67860a959a4e04c36772d5\n- name: Download lidar_centerpoint/deploy_metadata.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/deploy_metadata.yaml\n    dest: \"{{ data_dir }}/lidar_centerpoint/deploy_metadata.yaml\"\n    mode: \"644\"\n    checksum: sha256:152536f053c3750b60d349800e1b983b418029d6dadf087614a00c661942a178\n\n# lidar_transfusion\n- name: Create lidar_transfusion directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/lidar_transfusion\"\n    mode: \"755\"\n    state: directory\n\n- name: Download lidar_transfusion/transfusion.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/transfusion/t4xx1_90m/v2.1/transfusion.onnx\n    dest: \"{{ data_dir }}/lidar_transfusion/transfusion.onnx\"\n    mode: \"644\"\n    checksum: sha256:1d8f0ee6d59ccc3cca914f9892f6ac8f0a9e35082abb91da183c00e3e2c2718a\n\n- name: Download lidar_transfusion/transfusion_ml_package.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/transfusion/t4xx1_90m/v2.1/transfusion_ml_package.param.yaml\n    dest: \"{{ data_dir }}/lidar_transfusion/transfusion_ml_package.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:476f7727adc17a823962f2e09ba23d40f3116c50be48361d98179d054cd131b6\n\n- name: Download lidar_transfusion/detection_class_remapper.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/transfusion/t4xx1_90m/v2.1/detection_class_remapper.param.yaml\n    dest: \"{{ data_dir }}/lidar_transfusion/detection_class_remapper.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:c711f8875ece9b527dfe31ffc75f8c0de2e77945ef67860a959a4e04c36772d5\n\n# tensorrt_yolox\n- name: Create tensorrt_yolox directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/tensorrt_yolox\"\n    mode: \"755\"\n    state: directory\n\n- name: Download tensorrt_yolox/yolox-tiny.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/yolox-tiny.onnx\n    dest: \"{{ data_dir }}/tensorrt_yolox/yolox-tiny.onnx\"\n    mode: \"644\"\n    checksum: sha256:471a665f4243e654dff62578394e508db22ee29fe65d9e389dfc3b0f2dee1255\n\n- name: Download tensorrt_yolox/yolox-sPlus-opt.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/yolox-sPlus-opt.onnx\n    dest: \"{{ data_dir }}/tensorrt_yolox/yolox-sPlus-opt.onnx\"\n    mode: \"644\"\n    checksum: sha256:36b0832177b01e6b278e00c7369f1de71e616c36261cbae50f0753d41289da01\n\n- name: Download tensorrt_yolox/yolox-sPlus-opt.EntropyV2-calibration.table\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/yolox-sPlus-opt.EntropyV2-calibration.table\n    dest: \"{{ data_dir }}/tensorrt_yolox/yolox-sPlus-opt.EntropyV2-calibration.table\"\n    mode: \"644\"\n    checksum: sha256:b9e9d7da33342262ccaea4469b4d02b8abb32b6d7bf737f9e0883fece1b8f580\n\n- name: Download tensorrt_yolox/yolox-sPlus-T4-960x960-pseudo-finetune.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/object_detection_yolox_s/v1/yolox-sPlus-T4-960x960-pseudo-finetune.onnx\n    dest: \"{{ data_dir }}/tensorrt_yolox/yolox-sPlus-T4-960x960-pseudo-finetune.onnx\"\n    mode: \"644\"\n    checksum: sha256:f5054e8a890c3be86dc1b4b89a5a36fb2279d4f6110b0159e793be062641bf65\n\n- name: Download tensorrt_yolox/yolox-sPlus-T4-960x960-pseudo-finetune.EntropyV2-calibration.table\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/object_detection_yolox_s/v1/yolox-sPlus-T4-960x960-pseudo-finetune.EntropyV2-calibration.table\n    dest: \"{{ data_dir }}/tensorrt_yolox/yolox-sPlus-T4-960x960-pseudo-finetune.EntropyV2-calibration.table\"\n    mode: \"644\"\n    checksum: sha256:cc378d327db5616b0b3a4d077bf37100c25a50ecd22d2b542f54098da100f34c\n\n- name: Download tensorrt_yolox/label.txt\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/label.txt\n    dest: \"{{ data_dir }}/tensorrt_yolox/label.txt\"\n    mode: \"644\"\n    checksum: sha256:3540a365bfd6d8afb1b5d8df4ec47f82cb984760d3270c9b41dbbb3422d09a0c\n\n# cspell: ignore semseg\n- name: Download tensorrt_yolox/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/object_detection_semseg_yolox_s/v1/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.onnx\n    dest: \"{{ data_dir }}/tensorrt_yolox/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.onnx\"\n    mode: \"644\"\n    checksum: sha256:73b3812432cedf65cebf02ca4cb630542fc3b1671c4c0fbf7cee50fa38e416a8\n\n- name: Download tensorrt_yolox/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.EntropyV2-calibration.table\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/object_detection_semseg_yolox_s/v1/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.EntropyV2-calibration.table\n    dest: \"{{ data_dir }}/tensorrt_yolox/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.EntropyV2-calibration.table\"\n    mode: \"644\"\n    checksum: sha256:28cd6524d4bcdb2809592a225d28330433e58dc02c92169ea555b44c1a51a584\n\n- name: Download tensorrt_yolox/semseg_color_map.csv\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/object_detection_semseg_yolox_s/v1/semseg_color_map.csv\n    dest: \"{{ data_dir }}/tensorrt_yolox/semseg_color_map.csv\"\n    mode: \"644\"\n    checksum: sha256:3d93ca05f31b63424d7d7246a01a2365953705a0ed3323ba5b6fddd744a4bfea\n\n# tensorrt_rtmdet\n- name: Create tensorrt_rtmdet directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/tensorrt_rtmdet\"\n    mode: \"755\"\n    state: directory\n\n- name: Download tensorrt_rtmdet_onnx_models.tar.gz\n  become: true\n  ansible.builtin.get_url:\n    url: https://autoware-files.s3.us-west-2.amazonaws.com/models/tensorrt_rtmdet_onnx_models.tar.gz\n    dest: \"{{ data_dir }}/tensorrt_rtmdet/tensorrt_rtmdet_onnx_models.tar.gz\"\n    mode: \"644\"\n    checksum: sha256:eaf6fe9caf1b4a0211dc3b0f4068b1fd6c1d35fe1582cc2aed95b8ed9468c598\n\n- name: Extract tensorrt_rtmdet_onnx_models.tar.gz\n  ansible.builtin.unarchive:\n    src: \"{{ data_dir }}/tensorrt_rtmdet/tensorrt_rtmdet_onnx_models.tar.gz\"\n    dest: \"{{ data_dir }}/tensorrt_rtmdet/\"\n    extra_opts:\n      - --strip-components=1 # Removes the top-level folder during extraction\n\n# tensorrt_yolox for whole_image_traffic_light_detector\n- name: Download tensorrt_yolox/yolox_s_car_ped_tl_detector_960_960_batch_1.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/tl_detector_yolox_s/v1/yolox_s_car_ped_tl_detector_960_960_batch_1.onnx\n    dest: \"{{ data_dir }}/tensorrt_yolox/yolox_s_car_ped_tl_detector_960_960_batch_1.onnx\"\n    mode: \"644\"\n    checksum: sha256:0b8478553f2f0374a1236e65f669f11335b1fea7756ca7bcdfcf9646657ed594\n\n- name: Download tensorrt_yolox/yolox_s_car_ped_tl_detector_960_960_batch_1.EntropyV2-calibration.table\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/tl_detector_yolox_s/v1/yolox_s_car_ped_tl_detector_960_960_batch_1.EntropyV2-calibration.table\n    dest: \"{{ data_dir }}/tensorrt_yolox/yolox_s_car_ped_tl_detector_960_960_batch_1.EntropyV2-calibration.table\"\n    mode: \"644\"\n    checksum: sha256:690cff409519aca26f4ec0fc56ed35d9aa23ee1c18d6205c43469ae06e2f4e02\n\n- name: Download tensorrt/car_ped_tl_detector_labels.txt\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/tl_detector_yolox_s/v1/car_ped_tl_detector_labels.txt\n    dest: \"{{ data_dir }}/tensorrt_yolox/car_ped_tl_detector_labels.txt\"\n    mode: \"644\"\n    checksum: sha256:a2a91f5fe9c2e68e3e3647a272bb9bb25cd07631a1990a3fb15efddce7691131\n\n# traffic_light_classifier\n- name: Create traffic_light_classifier directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/traffic_light_classifier\"\n    mode: \"755\"\n    state: directory\n\n- name: Download traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_1.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_mobilenetv2_batch_1.onnx\n    dest: \"{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_1.onnx\"\n    mode: \"644\"\n    checksum: sha256:455b71b3b20d3a96aa0e49f32714ba50421f668a2f9b9907c30b1346ac8a3703\n\n- name: Download traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_4.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_mobilenetv2_batch_4.onnx\n    dest: \"{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_4.onnx\"\n    mode: \"644\"\n    checksum: sha256:41bb79a23a4ac57956adb8e9cb3904420db1b0cd032e97b670cc4f8b174ae3fe\n\n- name: Download traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_6.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_mobilenetv2_batch_6.onnx\n    dest: \"{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_6.onnx\"\n    mode: \"644\"\n    checksum: sha256:e4792eed6a46fdbd02be2f3a4f1ce91f36fa77698493caf3102e445178c0f058\n\n- name: Download traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_1.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_efficientNet_b1_batch_1.onnx\n    dest: \"{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_1.onnx\"\n    mode: \"644\"\n    checksum: sha256:55ebb0d117a5e8943f8d1c6769f1d856b533079d4d871d8e923255cc992ad48a\n\n- name: Download traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_4.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_efficientNet_b1_batch_4.onnx\n    dest: \"{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_4.onnx\"\n    mode: \"644\"\n    checksum: sha256:684e29843e3128eadb774018730644b3ab9b0a06dc4cdaeed579c2f3fa5d5265\n\n- name: Download traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_6.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_efficientNet_b1_batch_6.onnx\n    dest: \"{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_6.onnx\"\n    mode: \"644\"\n    checksum: sha256:44d94540fa8b89dfb39cd9a8523cf010ddfb10ea2f1f9b53bf3618ce7f4912ad\n\n- name: Download traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_1.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v3/ped_traffic_light_classifier_mobilenetv2_batch_1.onnx\n    dest: \"{{ data_dir }}/traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_1.onnx\"\n    mode: \"644\"\n    checksum: sha256:b52632fee96d1bc99922e743335ebfd49d6a0645c8a04e615f156e38661add24\n\n- name: Download traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_4.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v3/ped_traffic_light_classifier_mobilenetv2_batch_4.onnx\n    dest: \"{{ data_dir }}/traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_4.onnx\"\n    mode: \"644\"\n    checksum: sha256:ef0a3052857cdc6f380da524560548b40e9e46f876cccf3cd0cb40ccddae9892\n\n- name: Download traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_6.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v3/ped_traffic_light_classifier_mobilenetv2_batch_6.onnx\n    dest: \"{{ data_dir }}/traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_6.onnx\"\n    mode: \"644\"\n    checksum: sha256:b56700551254afa985916d03b74372ebc675f2d9b76ee0e39c46e88c37744a4f\n\n- name: Download traffic_light_classifier/lamp_labels.txt\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/lamp_labels.txt\n    dest: \"{{ data_dir }}/traffic_light_classifier/lamp_labels.txt\"\n    mode: \"644\"\n    checksum: sha256:1a5a49eeec5593963eab8d70f48b8a01bfb07e753e9688eb1510ad26e803579d\n\n- name: Download traffic_light_classifier/lamp_labels_ped.txt\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v3/lamp_labels_ped.txt\n    dest: \"{{ data_dir }}/traffic_light_classifier/lamp_labels_ped.txt\"\n    mode: \"644\"\n    checksum: sha256:5427e1b7c2e33acd9565ede29e77992c38137bcf7d7074c73ebbc38080c6bcac\n\n# diffusion_planner\n- name: Create diffusion_planner directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/diffusion_planner\"\n    mode: \"755\"\n    state: directory\n\n- name: Create diffusion_planner v2.0 directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/diffusion_planner/v2.0\"\n    mode: \"755\"\n    state: directory\n\n- name: Download diffusion_planner/v2.0/diffusion_planner.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v2.0/diffusion_planner.onnx\n    dest: \"{{ data_dir }}/diffusion_planner/v2.0/diffusion_planner.onnx\"\n    mode: \"644\"\n    checksum: sha256:622c2c2f21115900c712f80b58560b5a6425be5f70d5aa82a96ef0b13af8c24b\n\n- name: Download diffusion_planner/v2.0/diffusion_planner.param.json\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v2.0/diffusion_planner.param.json\n    dest: \"{{ data_dir }}/diffusion_planner/v2.0/diffusion_planner.param.json\"\n    mode: \"644\"\n    checksum: sha256:bf41f12d85b31e363acf84f46d6a9e4e28da6c2ccce0e3fcf91ee4910f4b8453\n\n- name: Create diffusion_planner v3.0 directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/diffusion_planner/v3.0\"\n    mode: \"755\"\n    state: directory\n\n- name: Download diffusion_planner/v3.0/diffusion_planner.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v3.0/diffusion_planner.onnx\n    dest: \"{{ data_dir }}/diffusion_planner/v3.0/diffusion_planner.onnx\"\n    mode: \"644\"\n    checksum: sha256:3026918b55869b02ea561c1e1b9fed05c34092294c035d743f1d1cb756f4abcc\n\n- name: Download diffusion_planner/v3.0/diffusion_planner.param.json\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v3.0/diffusion_planner.param.json\n    dest: \"{{ data_dir }}/diffusion_planner/v3.0/diffusion_planner.param.json\"\n    mode: \"644\"\n    checksum: sha256:d726ce7b257ddaf39da8a7dfbd016512e866843c26a9622fdec8a59b45da3e04\n\n- name: Create diffusion_planner/v3.1 directory\n  become: true\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/diffusion_planner/v3.1\"\n    mode: \"755\"\n    state: directory\n\n- name: Download diffusion_planner/v3.1/diffusion_planner.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v3.1/diffusion_planner.onnx\n    dest: \"{{ data_dir }}/diffusion_planner/v3.1/diffusion_planner.onnx\"\n    mode: \"644\"\n    checksum: sha256:a063d323af20d962048315dc0969e4d3cad46e81a20299f39d74a470d58b148b\n\n- name: Download diffusion_planner/v3.1/diffusion_planner.param.json\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v3.1/diffusion_planner.param.json\n    dest: \"{{ data_dir }}/diffusion_planner/v3.1/diffusion_planner.param.json\"\n    mode: \"644\"\n    checksum: sha256:d726ce7b257ddaf39da8a7dfbd016512e866843c26a9622fdec8a59b45da3e04\n\n# tensorrt_vad\n- name: Create tensorrt_vad directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/vad\"\n    mode: \"755\"\n    state: directory\n\n- name: Create tensorrt_vad v0.1 directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/vad/v0.1\"\n    mode: \"755\"\n    state: directory\n\n- name: Download tensorrt_vad/vad-carla-tiny_backbone.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/planning/models/tensorrt_vad/carla_tiny/v0.1/vad-carla-tiny_backbone.onnx\n    dest: \"{{ data_dir }}/vad/v0.1/vad-carla-tiny_backbone.onnx\"\n    mode: \"644\"\n    checksum: sha256:04b925f2750fd1c4adf16b5aae9c149d0baa39185e99d141232ebe20bddba4da\n\n- name: Download tensorrt_vad/vad-carla-tiny_head.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/planning/models/tensorrt_vad/carla_tiny/v0.1/vad-carla-tiny_head.onnx\n    dest: \"{{ data_dir }}/vad/v0.1/vad-carla-tiny_head.onnx\"\n    mode: \"644\"\n    checksum: sha256:31f49a592a764ce82bbe6e26d0bfc99dc8a9613628884dc73dd5e67521ff3e9e\n\n- name: Download tensorrt_vad/vad-carla-tiny_head_no_prev.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/planning/models/tensorrt_vad/carla_tiny/v0.1/vad-carla-tiny_head_no_prev.onnx\n    dest: \"{{ data_dir }}/vad/v0.1/vad-carla-tiny_head_no_prev.onnx\"\n    mode: \"644\"\n    checksum: sha256:6a89d479e0717b1e526f1aa3a1137c631a9ef854e810d0328a035aae11818c2a\n\n- name: Download tensorrt_vad/vad-carla-tiny.param.json\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/planning/models/tensorrt_vad/carla_tiny/v0.1/vad-carla-tiny.param.json\n    dest: \"{{ data_dir }}/vad/v0.1/vad-carla-tiny.param.json\"\n    mode: \"644\"\n    checksum: sha256:03d3187fed3c70f761456afc2e93e18c1765113b1c1580ffa78ab42b10dbd179\n\n# traffic_light_fine_detector\n- name: Create traffic_light_fine_detector directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/traffic_light_fine_detector\"\n    mode: \"755\"\n    state: directory\n\n- name: Download traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_1.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/tlr_yolox_s/v3/tlr_car_ped_yolox_s_batch_1.onnx\n    dest: \"{{ data_dir }}/traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_1.onnx\"\n    mode: \"644\"\n    checksum: sha256:1ad633066a1195006f4709f8fa07800dd65a74a814b3efb4c99bcc5a1a7962f6\n\n- name: Download traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_4.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/tlr_yolox_s/v3/tlr_car_ped_yolox_s_batch_4.onnx\n    dest: \"{{ data_dir }}/traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_4.onnx\"\n    mode: \"644\"\n    checksum: sha256:cf93eb1e1a97aefc6edd0c0c4d77c7f5fc2aa1e81e3c5c9cd49d976173d03a04\n\n- name: Download traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_6.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/tlr_yolox_s/v3/tlr_car_ped_yolox_s_batch_6.onnx\n    dest: \"{{ data_dir }}/traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_6.onnx\"\n    mode: \"644\"\n    checksum: sha256:0b05a89fb30f1f92c6ec687d48e8ceda4da6f81cbd82d8a102d168753a6cedb6\n\n- name: Download traffic_light_fine_detector/tlr_labels.txt\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/tlr_yolox_s/v3/tlr_labels.txt\n    dest: \"{{ data_dir }}/traffic_light_fine_detector/tlr_labels.txt\"\n    mode: \"644\"\n    checksum: sha256:a2a91f5fe9c2e68e3e3647a272bb9bb25cd07631a1990a3fb15efddce7691131\n\n# simpl_prediction\n- name: Create simpl_prediction directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/simpl_prediction\"\n    mode: \"755\"\n    state: directory\n\n- name: Download simpl_prediction/simpl.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/simpl/v0.1.0/simpl.onnx\n    dest: \"{{ data_dir }}/simpl_prediction/simpl.onnx\"\n    mode: \"644\"\n    checksum: sha256:ad5e03983193c4d188432f314334697d6a216e7ffc91fb651eee5d6e4c42f492\n\n# ptv3\n- name: Create ptv3 directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/ptv3\"\n    mode: \"755\"\n    state: directory\n\n- name: Download ptv3/ptv3.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/ptv3/v1/ptv3.onnx\n    dest: \"{{ data_dir }}/ptv3/ptv3.onnx\"\n    mode: \"644\"\n    checksum: sha256:b5d8f7f038599de46e66148d46182600155820c6f6f2fd37e787461f97d143ff\n\n- name: Download ptv3/ml_package_ptv3.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/ptv3/v1/ml_package_ptv3.param.yaml\n    dest: \"{{ data_dir }}/ptv3/ml_package_ptv3.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:9a3e35648d6eb46771b208a6534a2dcb19d26efca20a9d8df5abc05a9970d0ec\n\n# frnet\n- name: Create lidar_frnet directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/lidar_frnet\"\n    mode: \"755\"\n    state: directory\n\n- name: Download lidar_frnet/frnet.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/frnet/v1/frnet.onnx\n    dest: \"{{ data_dir }}/lidar_frnet/frnet.onnx\"\n    mode: \"644\"\n    checksum: sha256:acaaf0190e9dbf67e4987542fc57bcec4102a842a40ee24a9dc8fa1948bedf04\n\n- name: Download lidar_frnet/ml_package_frnet.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/perception/models/frnet/v1/ml_package_frnet.param.yaml\n    dest: \"{{ data_dir }}/lidar_frnet/ml_package_frnet.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:34577cc7902acd942a51f401bdcf560da91c3c80df8d553bfdc775f118b499b8\n\n# calibration_status_classifier\n- name: Create calibration_status_classifier directory inside {{ data_dir }}\n  ansible.builtin.file:\n    path: \"{{ data_dir }}/calibration_status_classifier\"\n    mode: \"755\"\n    state: directory\n\n- name: Download calibration_status_classifier/calibration_status_classifier.onnx\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/sensing/models/calibration_status_classifier/v2/calibration_status_classifier.onnx\n    dest: \"{{ data_dir }}/calibration_status_classifier/calibration_status_classifier.onnx\"\n    mode: \"644\"\n    checksum: sha256:13d6119e8dc73945ab0efe76b0c9492e2536187fdc7963ba62b8625900f54474\n\n- name: Download calibration_status_classifier/ml_package_calibration_status_classifier.param.yaml\n  become: true\n  ansible.builtin.get_url:\n    url: https://awf.ml.dev.web.auto/sensing/models/calibration_status_classifier/v2/ml_package_calibration_status_classifier.param.yaml\n    dest: \"{{ data_dir }}/calibration_status_classifier/ml_package_calibration_status_classifier.param.yaml\"\n    mode: \"644\"\n    checksum: sha256:39d99ce065eea608e2bea3e560eeb1bcee18b2636f988c28afed5219e3e69760\n"
  },
  {
    "path": "ansible/roles/build_tools/README.md",
    "content": "# Build Tools\n\nThis role installs build tools for building Autoware.\n\n## Tools\n\n- ccache\n\n## Inputs\n\n## Manual Installation\n\n```bash\nsudo apt-get update\nsudo apt-get install -y ccache\n```\n\n## Configuration (🆕 Recommended)\n\n> ℹ️ These steps differ slightly from the existing Ansible setup and represent the preferred configuration.  \n> The Ansible version will be updated to match the steps below.\n\n```bash\n# Make sure the ccache directory exists\nmkdir -p \"$HOME/.cache/ccache\"\n\n# Add the following lines to ~/.bashrc file\nexport CMAKE_C_COMPILER_LAUNCHER=ccache\nexport CMAKE_CXX_COMPILER_LAUNCHER=ccache\nexport CCACHE_DIR=\"$HOME/.cache/ccache/\"\nexport CCACHE_LOGFILE=/tmp/ccache.log\n```\n\nConfigure ccache maximum size:\n`gedit $HOME/.cache/ccache/ccache.conf`\n\nAdd the following lines and save the file:\n\n```bash\n# Set maximum cache size\nmax_size = 15G\n```\n\n**Also see:** [🔗 Autoware Documentation / Using ccache to speed up compilation](https://autowarefoundation.github.io/autoware-documentation/main/tutorials/others/advanced-usage-of-colcon/#using-ccache-to-speed-up-recompilation).\n"
  },
  {
    "path": "ansible/roles/build_tools/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/build_tools/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/build_tools/tasks/main.yaml",
    "content": "- name: Install ccache\n  become: true\n  ansible.builtin.apt:\n    name: ccache\n    state: latest\n    update_cache: true\n\n- name: Add CCACHE_DIR to .bashrc\n  ansible.builtin.lineinfile:\n    dest: ~/.bashrc\n    line: export CCACHE_DIR=\"$HOME/.ccache\"\n    state: present\n    create: true\n    mode: 0644\n\n- name: Add CCACHE_DIR to .bashrc of local user\n  become: true\n  ansible.builtin.lineinfile:\n    dest: /etc/skel/.bashrc\n    line: export CCACHE_DIR=\"$HOME/.ccache\"\n    state: present\n    create: true\n    mode: 0644\n\n- name: Export CC to ccache\n  ansible.builtin.lineinfile:\n    dest: ~/.bashrc\n    line: export CC=\"/usr/lib/ccache/gcc\"\n    state: present\n    create: true\n    mode: 0644\n\n- name: Export CXX to ccache\n  ansible.builtin.lineinfile:\n    dest: ~/.bashrc\n    line: export CXX=\"/usr/lib/ccache/g++\"\n    state: present\n    create: true\n    mode: 0644\n\n- name: Source .bashrc\n  ansible.builtin.shell: source ~/.bashrc\n  args:\n    executable: /bin/bash\n  changed_when: false\n"
  },
  {
    "path": "ansible/roles/cuda/README.md",
    "content": "# cuda\n\nThis role installs [CUDA Toolkit](https://developer.nvidia.com/cuda-toolkit) following [this page](https://developer.nvidia.com/cuda-12-8-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_network) and [this page](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions).\n\nThis role also registers Vulkan, OpenGL, and OpenCL GPU vendors for future use.\n\n## Inputs\n\n| Name                 | Required | Description                      |\n| -------------------- | -------- | -------------------------------- |\n| cuda_version         | true     | The version of CUDA Toolkit.     |\n| cuda_install_drivers | false    | Whether to install cuda-drivers. |\n\n## Manual Installation\n\n### Version compatibility\n\n- CUDA version `12.8`.\n- NVIDIA driver version `570` or **newer**.\n\n#### 🛠️ For Advanced Users\n\n⚠️ **Proceed with caution**: Avoid removing essential system components.\n\nTo prevent conflicts during NVIDIA installation, we recommend completely removing old NVIDIA Drivers and CUDA by following this guide: [How can I uninstall a NVIDIA driver completely?](https://askubuntu.com/a/206289/761440).\n\n- **Important**: If you remove the previous NVIDIA drivers, ensure you install the recommended versions listed below **before restarting your system**.\n\nOnce the drivers are installed correctly, you may safely restart your system.\n\n### CUDA Toolkit and Driver\n\nFollow these instructions to download and install the CUDA Toolkit.\n\nFrom: <https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#network-repo-installation-for-ubuntu>\n\n```bash\nwget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && source /tmp/amd64.env\n\nos=ubuntu2204\narch_dir=$(\n  case \"$(dpkg --print-architecture)\" in\n    amd64) echo x86_64 ;;\n    aarch64) echo arm64 ;;\n    *) echo \"$(dpkg --print-architecture)\";;\n  esac\n)\n\nwget \"https://developer.download.nvidia.com/compute/cuda/repos/${os}/${arch_dir}/cuda-keyring_1.1-1_all.deb\"\nsudo dpkg -i cuda-keyring_1.1-1_all.deb\nsudo apt-get update\ncuda_version_dashed=$(eval sed -e \"s/[.]/-/g\" <<< \"${cuda_version}\")\nsudo apt-get -y install cuda-toolkit-${cuda_version_dashed}\n```\n\n```bash\n# ⚠️ this is the minimum version\nsudo apt-get install -y cuda-drivers-570\n\n# ✅ latest version is OK\napt search '^nvidia-driver-[0-9]+'\nsudo apt install nvidia-driver-580  # or whichever is latest\n```\n\nPerform the post installation actions:\n\n```bash\n# Taken from: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions\necho 'export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}' >> ~/.bashrc\necho 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc\n```\n\n### GPU Vendors\n\nRegister Vulkan, OpenGL, and OpenCL GPU vendors following the instructions below.\n\n```bash\n# Create Vulkan directory\nsudo mkdir -p /etc/vulkan/icd.d\nsudo chmod 0755 /etc/vulkan/icd.d\n\n# Create OpenGL directory\nsudo mkdir -p /etc/glvnd/egl_vendor.d\nsudo chmod 0755 /etc/glvnd/egl_vendor.d\n\n# Create OpenCL directory\nsudo mkdir -p /etc/OpenCL/vendors\nsudo chmod 0755 /etc/OpenCL/vendors\n\n# Download and set permissions for Vulkan GPU vendors JSON\nsudo wget https://gitlab.com/nvidia/container-images/vulkan/raw/dc389b0445c788901fda1d85be96fd1cb9410164/nvidia_icd.json -O /etc/vulkan/icd.d/nvidia_icd.json\nsudo chmod 0644 /etc/vulkan/icd.d/nvidia_icd.json\n\n# Download and set permissions for OpenGL GPU vendors JSON\nsudo wget https://gitlab.com/nvidia/container-images/opengl/raw/5191cf205d3e4bb1150091f9464499b076104354/glvnd/runtime/10_nvidia.json -O /etc/glvnd/egl_vendor.d/10_nvidia.json\nsudo chmod 0644 /etc/glvnd/egl_vendor.d/10_nvidia.json\n\n# Register and set permissions for OpenCL GPU vendors\nsudo touch /etc/OpenCL/vendors/nvidia.icd\necho \"libnvidia-opencl.so.1\" | sudo tee /etc/OpenCL/vendors/nvidia.icd > /dev/null\nsudo chmod 0644 /etc/OpenCL/vendors/nvidia.icd\n```\n"
  },
  {
    "path": "ansible/roles/cuda/defaults/main.yaml",
    "content": "cuda_install_drivers: true\n"
  },
  {
    "path": "ansible/roles/cuda/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/cuda/tasks/main.yaml",
    "content": "# cspell:ignore libnvjpeg\n- name: Get CUDA architecture name\n  ansible.builtin.shell: |\n    if [ \"$(uname -m)\" = \"x86_64\" ]; then\n      echo \"x86_64\"\n    else\n      echo \"sbsa\"\n    fi\n  register: cuda_architecture\n  changed_when: false\n\n- name: Remove old /etc/apt/sources.list.d/cuda.list\n  become: true\n  ansible.builtin.file:\n    path: /etc/apt/sources.list.d/cuda.list\n    state: absent\n\n- name: Install CUDA keyring\n  become: true\n  ansible.builtin.apt:\n    deb: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/{{ cuda_architecture.stdout }}/cuda-keyring_1.1-1_all.deb\n    update_cache: true\n\n- name: Get dash-case name of cuda_version\n  ansible.builtin.shell: bash -c 'sed -e \"s/\\./-/g\" <<< $(echo {{ cuda_version }})'\n  register: cuda__dash_case_cuda_version\n  changed_when: false\n\n- name: Install CUDA devel libraries except for cuda-drivers\n  become: true\n  ansible.builtin.apt:\n    name:\n      - cuda-command-line-tools-{{ cuda__dash_case_cuda_version.stdout }}\n      - cuda-minimal-build-{{ cuda__dash_case_cuda_version.stdout }}\n      - libcusparse-dev-{{ cuda__dash_case_cuda_version.stdout }}\n      - libcublas-dev-{{ cuda__dash_case_cuda_version.stdout }}\n      - libcurand-dev-{{ cuda__dash_case_cuda_version.stdout }}\n      - cuda-nvml-dev-{{ cuda__dash_case_cuda_version.stdout }}\n      - cuda-nvrtc-dev-{{ cuda__dash_case_cuda_version.stdout }}\n      - libnpp-dev-{{ cuda__dash_case_cuda_version.stdout }}\n      - libnvjpeg-dev-{{ cuda__dash_case_cuda_version.stdout }}\n    update_cache: true\n  when: install_devel == 'y'\n\n- name: Install CUDA libraries except for cuda-drivers\n  become: true\n  ansible.builtin.apt:\n    name:\n      - cuda-minimal-build-{{ cuda__dash_case_cuda_version.stdout }}\n      - libcusparse-{{ cuda__dash_case_cuda_version.stdout }}\n      - libcublas-{{ cuda__dash_case_cuda_version.stdout }}\n      - libcurand-{{ cuda__dash_case_cuda_version.stdout }}\n      - libnpp-{{ cuda__dash_case_cuda_version.stdout }}\n      - libnvjpeg-{{ cuda__dash_case_cuda_version.stdout }}\n    update_cache: true\n  when: install_devel == 'N'\n\n- name: Install extra CUDA libraries for x86_64\n  become: true\n  ansible.builtin.apt:\n    name:\n      - cuda-nvprof-{{ cuda__dash_case_cuda_version.stdout }}\n    update_cache: true\n  when: cuda_architecture.stdout == \"x86_64\"\n\n- name: Install cuda-drivers\n  become: true\n  ansible.builtin.apt:\n    name:\n      - nvidia-open\n    update_cache: true\n  when: cuda_install_drivers | bool\n\n- name: Add PATH to .bashrc\n  become: true\n  ansible.builtin.lineinfile:\n    dest: \"{{ item }}\"\n    line: export PATH=\"/usr/local/cuda/bin:$PATH\"\n    state: present\n    create: true\n    mode: 0644\n  loop:\n    - ~/.bashrc\n    - /etc/skel/.bashrc\n\n- name: Add LD_LIBRARY_PATH to bashrc\n  become: true\n  ansible.builtin.lineinfile:\n    dest: \"{{ item }}\"\n    line: export LD_LIBRARY_PATH=\"/usr/local/cuda/lib64:$LD_LIBRARY_PATH\"\n    state: present\n    create: true\n    mode: 0644\n  loop:\n    - ~/.bashrc\n    - /etc/skel/.bashrc\n\n- name: Create Vulkan directory\n  become: true\n  ansible.builtin.file:\n    path: /etc/vulkan/icd.d\n    state: directory\n    mode: \"0755\"\n\n- name: Create OpenGL directory\n  become: true\n  ansible.builtin.file:\n    path: /etc/glvnd/egl_vendor.d\n    state: directory\n    mode: \"0755\"\n\n- name: Create OpenCL directory\n  become: true\n  ansible.builtin.file:\n    path: /etc/OpenCL/vendors\n    state: directory\n    mode: \"0755\"\n\n- name: Register Vulkan GPU vendors\n  become: true\n  ansible.builtin.get_url:\n    url: https://gitlab.com/nvidia/container-images/vulkan/raw/dc389b0445c788901fda1d85be96fd1cb9410164/nvidia_icd.json\n    dest: /etc/vulkan/icd.d/nvidia_icd.json\n    mode: \"0644\"\n\n- name: Set permissions for Vulkan GPU vendors\n  become: true\n  ansible.builtin.file:\n    path: /etc/vulkan/icd.d/nvidia_icd.json\n    mode: \"0644\"\n\n- name: Register OpenGL GPU vendors\n  become: true\n  ansible.builtin.get_url:\n    url: https://gitlab.com/nvidia/container-images/opengl/raw/5191cf205d3e4bb1150091f9464499b076104354/glvnd/runtime/10_nvidia.json\n    dest: /etc/glvnd/egl_vendor.d/10_nvidia.json\n    mode: \"0644\"\n\n- name: Set permissions for OpenGL GPU vendors\n  become: true\n  ansible.builtin.file:\n    path: /etc/glvnd/egl_vendor.d/10_nvidia.json\n    mode: \"0644\"\n\n- name: Register OpenCL GPU vendors\n  become: true\n  ansible.builtin.file:\n    path: /etc/OpenCL/vendors/nvidia.icd\n    state: touch\n    mode: \"0644\"\n\n- name: Set permissions for OpenCL GPU vendors\n  become: true\n  ansible.builtin.lineinfile:\n    path: /etc/OpenCL/vendors/nvidia.icd\n    line: libnvidia-opencl.so.1\n    create: true\n    mode: \"0644\"\n"
  },
  {
    "path": "ansible/roles/dev_tools/README.md",
    "content": "# devel\n\nThis role installs optional development tools for Autoware.\n\n## Tools\n\n- pipx\n- Go\n- PlotJuggler\n- Git LFS\n- pre-commit\n- clang-format\n\n## Inputs\n\n| Name      | Required | Description           |\n| --------- | -------- | --------------------- |\n| rosdistro | true     | The ROS distribution. |\n\n## Manual Installation\n\n## Set up the environment variables\n\nChoose **one** ROS distribution and run the corresponding command.\n\n### ROS 2 Humble\n\n```bash\nwget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && \\\nsource /tmp/amd64.env\n```\n\n### ROS 2 Jazzy\n\n```bash\nwget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64_jazzy.env && \\\nsource /tmp/amd64.env\n```\n\n## Install the tools\n\n```bash\nsudo apt-get update\n\nsudo apt install pipx\n\nsudo apt install -y golang\nsudo apt install -y ros-${rosdistro}-plotjuggler-ros\nsudo apt install -y git-lfs\n\n# Setup Git LFS\ngit lfs install\n\npipx install pre-commit\npipx install clang-format\n```\n"
  },
  {
    "path": "ansible/roles/dev_tools/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/dev_tools/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/dev_tools/tasks/main.yaml",
    "content": "# https://github.com/git-lfs/git-lfs/wiki/Installation#debian-and-ubuntu\n- name: Install Git LFS\n  become: true\n  ansible.builtin.apt:\n    name: git-lfs\n    state: present\n    update_cache: true\n\n- name: Setup Git LFS for current user\n  ansible.builtin.command: git lfs install\n  changed_when: false\n\n- name: Install pipx\n  become: true\n  ansible.builtin.apt:\n    name: pipx\n    state: latest\n    update_cache: true\n\n- name: Install pre-commit\n  community.general.pipx:\n    name: pre-commit\n    executable: /usr/bin/pipx\n\n- name: Install clang-format\n  community.general.pipx:\n    name: clang-format\n    executable: /usr/bin/pipx\n\n- name: Install Go\n  become: true\n  ansible.builtin.apt:\n    name: golang\n    state: latest\n    update_cache: true\n\n- name: Hold check of ros-{{ rosdistro + '-plotjuggler' }}\n  ansible.builtin.command: apt-mark showhold\n  register: dev_tools__held_ros_packages\n  changed_when: false\n\n- name: Install plotjuggler\n  become: true\n  ansible.builtin.apt:\n    name:\n      - ros-{{ rosdistro }}-plotjuggler\n    state: latest\n    update_cache: true\n  when: \"'ros-' + rosdistro + '-plotjuggler' not in dev_tools__held_ros_packages.stdout\"\n  register: dev_tools__install_result\n  failed_when: false\n\n- name: Display warning if plotjuggler package is held\n  ansible.builtin.debug:\n    msg: ROS package 'ros-{{ rosdistro }}-plotjuggler' is apt-mark hold. Skipping installation.\n  when: not dev_tools__install_result.changed\n"
  },
  {
    "path": "ansible/roles/docker_engine/README.md",
    "content": "# docker_engine\n\nThis role installs [Docker Engine](https://docs.docker.com/engine/) following the [Official Installation Guide](https://docs.docker.com/engine/install/ubuntu/).\nThen it sets up execution from non-root users following the [Official Post Installation Steps](https://docs.docker.com/engine/install/linux-postinstall).\n\n## Inputs\n\nNone.\n\n## Manual installation (Recommended)\n\n> ℹ️ The steps below may differ from the role implementation.  \n> They reflect the **most up-to-date and preferred procedure** for manual installation.  \n> The role will be updated to align with these steps.\n\n### Install Docker Engine\n\n```bash\n# Taken from: https://docs.docker.com/engine/install/ubuntu/\n# And: https://docs.docker.com/engine/install/linux-postinstall\n\n# Uninstall old versions\nsudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)\n\n# Add Docker's official GPG key:\nsudo apt update\nsudo apt install ca-certificates curl\nsudo install -m 0755 -d /etc/apt/keyrings\nsudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc\nsudo chmod a+r /etc/apt/keyrings/docker.asc\n\n# Add the repository to Apt sources:\nsudo tee /etc/apt/sources.list.d/docker.sources <<EOF\nTypes: deb\nURIs: https://download.docker.com/linux/ubuntu\nSuites: $(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\")\nComponents: stable\nSigned-By: /etc/apt/keyrings/docker.asc\nEOF\n\nsudo apt update\nsudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n\n# Verify that Docker Engine is installed correctly by running the hello-world image.\nsudo docker run hello-world\n# Note: This command downloads a test image and runs it in a container. When the container runs, it prints a message and exits.\n```\n\n### Post-Installation setup (non-root usage)\n\n```bash\n# Post-installation steps for Linux\n\n# Create the docker group.\nsudo groupadd docker\n\n# Add your user to the docker group.\nsudo usermod -aG docker $USER\n\n# Log out and log back in so that your group membership is re-evaluated.\n\n# Verify that you can run docker commands without sudo\ndocker run hello-world\n# Note: This command downloads a test image and runs it in a container. When the container runs, it prints a message and exits.\n```\n"
  },
  {
    "path": "ansible/roles/docker_engine/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/docker_engine/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/docker_engine/tasks/main.yaml",
    "content": "- name: Uninstall old versions\n  become: true\n  ansible.builtin.apt:\n    name:\n      - docker\n      - docker-engine\n      - docker.io\n      - containerd\n      - runc\n    state: absent\n    update_cache: true\n\n- name: Install dependencies for setting up apt sources\n  become: true\n  ansible.builtin.apt:\n    name:\n      - ca-certificates\n      - curl\n      - gnupg\n      - lsb-release\n    update_cache: true\n\n# sudo mkdir -p /etc/apt/keyrings\n- name: Create the directory for keyrings\n  become: true\n  ansible.builtin.file:\n    state: directory\n    path: /etc/apt/keyrings\n    mode: 0755\n\n# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n- name: Authorize Docker GPG key\n  become: true\n  ansible.builtin.apt_key:\n    url: https://download.docker.com/linux/ubuntu/gpg\n    keyring: /etc/apt/keyrings/docker.gpg\n\n- name: Save result of 'dpkg --print-architecture'\n  ansible.builtin.command: dpkg --print-architecture\n  register: docker_engine__deb_architecture\n  changed_when: false\n\n- name: Save result of 'lsb_release -cs'\n  ansible.builtin.command: lsb_release -cs\n  register: docker_engine__lsb_release_cs\n  changed_when: false\n\n- name: Save result of 'lsb_release -is'\n  ansible.builtin.command: lsb_release -is\n  register: docker_engine__lsb_release_is\n  changed_when: false\n\n# echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]') $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n- name: Add Docker apt repository to source list\n  become: true\n  ansible.builtin.apt_repository:\n    repo: deb [arch={{ docker_engine__deb_architecture.stdout }} signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/{{ docker_engine__lsb_release_is.stdout | lower }} {{ docker_engine__lsb_release_cs.stdout }} stable\n    filename: docker\n    state: present\n    update_cache: true\n\n- name: Install Docker Engine\n  become: true\n  ansible.builtin.apt:\n    name:\n      - docker-ce\n      - docker-ce-cli\n      - containerd.io\n      - docker-compose-plugin\n    update_cache: true\n\n# sudo groupadd docker\n- name: Add docker group\n  become: true\n  ansible.builtin.group:\n    name: docker\n    state: present\n\n# sudo usermod -aG docker $USER\n- name: Add user to docker group\n  become: true\n  ansible.builtin.user:\n    name: \"{{ ansible_user_id }}\"\n    groups: docker\n    append: true\n"
  },
  {
    "path": "ansible/roles/gdown/README.md",
    "content": "# Role: gdown\n\nThis role installs gdown to download files from CMakeLists.txt.\n\n## Inputs\n\nNone.\n\n## Manual Installation\n\n```bash\npipx install gdown\n```\n"
  },
  {
    "path": "ansible/roles/gdown/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/gdown/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/gdown/tasks/main.yaml",
    "content": "- name: Install pipx\n  become: true\n  ansible.builtin.apt:\n    name: pipx\n    state: latest\n    update_cache: true\n\n- name: Install gdown to download files from CMakeLists.txt\n  community.general.pipx:\n    name: gdown\n    executable: /usr/bin/pipx\n"
  },
  {
    "path": "ansible/roles/geographiclib/README.md",
    "content": "# geographiclib\n\n## Inputs\n\nNone.\n\n## Manual Installation\n\n```bash\nsudo apt update\nsudo apt install -y geographiclib-tools\n\n# Add EGM2008 geoid grid to geographiclib\nsudo geographiclib-get-geoids egm2008-1\n```\n"
  },
  {
    "path": "ansible/roles/geographiclib/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/geographiclib/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/geographiclib/tasks/main.yaml",
    "content": "- name: Install geographiclib-tools\n  become: true\n  ansible.builtin.apt:\n    name: geographiclib-tools\n    state: latest\n    update_cache: true\n\n- name: Install egm2008-1\n  become: true\n  ansible.builtin.command:\n    cmd: geographiclib-get-geoids egm2008-1\n    creates: /usr/share/GeographicLib/geoids/egm2008-1.pgm\n"
  },
  {
    "path": "ansible/roles/kisak_mesa/README.md",
    "content": "# Kisak Mesa Fix for Ubuntu 22.04 for Rviz2 (Not mandatory)\n\nIf you are using Ubuntu 22.04 and Rviz2 (especially inside a container), you may encounter black-screen error on Rviz2: <https://github.com/ros2/rviz/issues/948>\n\nThis role will install the Kisak Mesa fix for Ubuntu 22.04 for Rviz2.\n\n## Inputs\n\nNone\n\n## Manual Installation\n\n```bash\n#!/bin/bash\n\n# Update the package list and install software-properties-common\nsudo apt-get update\nsudo apt-get install -y software-properties-common\n\n# Add the Kisak Mesa PPA\nsudo add-apt-repository -y ppa:kisak/kisak-mesa\n\n# Update the package list after adding the new repository\nsudo apt-get update\n\n# Install Mesa libraries\nsudo apt-get install -y \\\nlibegl-mesa0 \\\nlibegl1-mesa-dev \\\nlibgbm-dev \\\nlibgbm1 \\\nlibgl1-mesa-dev \\\nlibgl1-mesa-dri \\\nlibglapi-mesa \\\nlibglx-mesa0\n```\n"
  },
  {
    "path": "ansible/roles/kisak_mesa/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/kisak_mesa/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/kisak_mesa/tasks/main.yaml",
    "content": "- name: Install additional dependencies\n  become: true\n  ansible.builtin.apt:\n    name: software-properties-common\n    state: present\n\n- name: Add Kisak Mesa PPA\n  become: true\n  ansible.builtin.apt_repository:\n    repo: ppa:kisak/kisak-mesa\n\n- name: Install Mesa libraries\n  become: true\n  ansible.builtin.apt:\n    name:\n      - libegl-mesa0\n      - libegl1-mesa-dev\n      - libgbm-dev\n      - libgbm1\n      - libgl1-mesa-dev\n      - libgl1-mesa-dri\n      - libglapi-mesa\n      - libglx-mesa0\n    state: present\n"
  },
  {
    "path": "ansible/roles/nvidia_container_toolkit/README.md",
    "content": "# nvidia_container_toolkit\n\nThis role installs [NVIDIA Container Toolkit](https://github.com/NVIDIA/nvidia-container-toolkit) following the [installation guide](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html).\n\n## Inputs\n\nNone.\n\n## Manual Installation (Recommended)\n\n> ℹ️ The steps below may differ from the role implementation.  \n> They reflect the **most up-to-date and preferred procedure** for manual installation.  \n> The role will be updated to align with these steps.\n\n<!-- cspell:ignore Disp, Uncorr -->\n\n```bash\n# Install the prerequisites for the instructions below:\nsudo apt-get update && sudo apt-get install -y --no-install-recommends \\\n   curl \\\n   gnupg2\n\n# Configure the production repository:\ncurl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \\\n  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \\\n    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \\\n    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list\n\n# Update the packages list from the repository:\nsudo apt-get update\n\n# Install NVIDIA Container Toolkit\nsudo apt-get install -y nvidia-container-toolkit\n\n# Add NVIDIA runtime support to docker engine\nsudo nvidia-ctk runtime configure --runtime=docker\n\n# Restart docker daemon\nsudo systemctl restart docker\n\n# At this point, a working setup can be tested by running a base CUDA container:\nsudo docker run --rm --gpus all nvcr.io/nvidia/cuda:12.8.1-runtime-ubuntu24.04 nvidia-smi\n\n# ==========\n# == CUDA ==\n# ==========\n#\n# CUDA Version 12.8.1\n#\n# Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# This container image and its contents are governed by the NVIDIA Deep Learning Container License.\n# By pulling and using the container, you accept the terms and conditions of this license:\n# https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license\n#\n# A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.\n#\n# Thu Jan 15 19:48:46 2026\n# +-----------------------------------------------------------------------------------------+\n# | NVIDIA-SMI 580.126.09             Driver Version: 580.126.09     CUDA Version: 13.0     |\n# +-----------------------------------------+------------------------+----------------------+\n# | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |\n# | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |\n# |                                         |                        |               MIG M. |\n# |=========================================+========================+======================|\n# |   0  NVIDIA GeForce RTX 3090        On  |   00000000:2B:00.0  On |                  N/A |\n# |  0%   52C    P8             41W /  350W |     369MiB /  24576MiB |     31%      Default |\n# |                                         |                        |                  N/A |\n# +-----------------------------------------+------------------------+----------------------+\n#\n# +-----------------------------------------------------------------------------------------+\n# | Processes:                                                                              |\n# |  GPU   GI   CI              PID   Type   Process name                        GPU Memory |\n# |        ID   ID                                                               Usage      |\n# |=========================================================================================|\n# |  No running processes found                                                             |\n# +-----------------------------------------------------------------------------------------+\n```\n"
  },
  {
    "path": "ansible/roles/nvidia_container_toolkit/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/nvidia_container_toolkit/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/nvidia_container_toolkit/tasks/main.yaml",
    "content": "- name: Add NVIDIA container toolkit GPG key\n  become: true\n  ansible.builtin.apt_key:\n    url: https://nvidia.github.io/libnvidia-container/gpgkey\n    state: present\n    keyring: /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg\n\n- name: Add NVIDIA container toolkit repository\n  become: true\n  ansible.builtin.apt_repository:\n    repo: deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) /\n    state: present\n    filename: nvidia-container-toolkit\n    update_cache: true\n\n- name: Install NVIDIA Container Toolkit\n  become: true\n  ansible.builtin.apt:\n    name:\n      - nvidia-container-toolkit\n    update_cache: true\n\n- name: Add NVIDIA runtime support to docker engine\n  become: true\n  ansible.builtin.shell: |\n    nvidia-ctk runtime configure --runtime=docker\n  changed_when: true\n\n- name: Restart docker daemon\n  become: true\n  ansible.builtin.systemd:\n    name: docker\n    state: restarted\n  changed_when: true\n"
  },
  {
    "path": "ansible/roles/qt5ct_setup/README.md",
    "content": "# qt5ct_setup Ansible role\n\n## Overview\n\nThe `qt5ct_setup` Ansible role automates the configuration of the `qt5ct` environment for Autoware.\nIt won't affect the system-wide configuration.\n\n## Installation\n\nFollow the instructions below to **install** or **update** the custom theme for `RViz2` in Autoware.\n\n> **Important:** Both commands must be run when you want to update the theme.\n\n```bash\ncd ~/autoware # The root directory of the cloned repository\nansible-galaxy collection install -f -r \"ansible-galaxy-requirements.yaml\"\nansible-playbook autoware.dev_env.install_rviz_theme  --ask-become-pass\n```\n\n## How to use the custom theme in RViz2\n\nTo apply a custom theme to RViz2, you can use the `qt5ct` platform theme. Follow these steps to ensure that the `QT_QPA_PLATFORMTHEME` environment variable is set correctly for your RViz2 instance when used with Autoware.\n\n### Manual setup for running RViz2\n\nBefore running RViz2 manually, set the `QT_QPA_PLATFORMTHEME` environment variable to `qt5ct`.\nThis ensures that the custom theme settings are applied.\n\n```bash\nexport QT_QPA_PLATFORMTHEME=qt5ct\n```\n\nThen, start RViz2 as usual.\n\n```bash\nrviz2\n```\n\n### Automatic setup in Autoware\n\nIn Autoware, the `QT_QPA_PLATFORMTHEME` environment variable is automatically set within the main [autoware.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/launch/autoware.launch.xml) file.\nTherefore, you do not need to manually set this environment variable when launching Autoware.\n\nIn the `autoware.launch.xml` file, RViz2 is configured with the following `<node>` element:\n\n```xml\n<node\n  pkg=\"rviz2\"\n  exec=\"rviz2\"\n  name=\"rviz2\"\n  output=\"screen\"\n  args=\"-d $(var rviz_config) -s $(find-pkg-share autoware_launch)/rviz/image/autoware.png\"\n  if=\"$(var rviz)\"\n  respawn=\"$(var rviz_respawn)\">\n  <env name=\"QT_QPA_PLATFORMTHEME\" value=\"qt5ct\"/>\n</node>\n```\n\nThis configuration automatically sets the `QT_QPA_PLATFORMTHEME` to `qt5ct` when RViz2 is launched as part of Autoware.\nIt also includes additional options such as respawn behavior and custom RViz2 configurations.\n"
  },
  {
    "path": "ansible/roles/qt5ct_setup/defaults/main.yml",
    "content": "# defaults file for qt5ct_setup\n"
  },
  {
    "path": "ansible/roles/qt5ct_setup/files/autoware.qss",
    "content": "/*  ------------------------------------------------------------------------  */\n/* QtMaterial - https://github.com/UN-GCPDS/qt-material\n/* By Yeison Cardona - GCPDS\n/*  ------------------------------------------------------------------------  */\n\n* {\n  color: #ffffff;\n  font-family: Roboto, sans-serif;\n  font-size: 13px;\n  line-height: 13px;\n  selection-color: #0f1417;\n}\n\n*:focus {\n  outline: none;\n}\n\n/*  Basic widgets  */\n\nQWidget {\n  background-color: #0f1417;\n}\n\nQGroupBox,\nQFrame {\n  background-color: #0f1417;\n}\n\nQGroupBox.fill_background,\nQFrame.fill_background {\n  background-color: #0f1417;\n}\n\nQSplitter {\n  background-color: transparent;\n  border: none;\n}\n\nQStatusBar {\n  color: #ffffff;\n  background-color: #0f1417;\n  border-radius: 0px;\n}\n\nQScrollArea,\nQStackedWidget,\nQWidget > QToolBox,\nQToolBox > QWidget,\nQTabWidget > QWidget {\n  border: none;\n}\n\nQTabWidget::pane {\n  border: none;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  Inputs  */\n\nQDateEdit,\nQDateTimeEdit,\nQSpinBox,\nQDoubleSpinBox,\nQComboBox,\nQLineEdit {\n  color: #ffffff;\n  padding-left: 16px;\n  border-radius: 0px;\n  height: 24px;\n  background-color: #0f1417;\n}\n\nQListView {\n  color: #ffffff;\n  height: 24px;\n  background-color: #1b2023;\n  selection-background-color: #303538;\n  selection-color: #ffffff;\n}\n\nQPlainTextEdit {\n  padding: 8px 0px;\n  background-color: #0f1417;\n  border: 2px solid #0f1417;\n}\n\nQTextEdit {\n  padding: 8px 0px;\n  background-color: #0f1417;\n}\n\nQSpinBox,\nQDoubleSpinBox {\n  color: #ffffff;\n  background-color: #292d30;\n  height: 24px;\n  border-bottom: 1px solid #DFE3E7;\n  selection-background-color: #84c2e6;\n}\n\nQAbstractSpinBox {\n  padding: 2px;\n}\n\nQDateEdit:disabled,\nQDateTimeEdit:disabled,\nQSpinBox:disabled,\nQDoubleSpinBox:disabled,\nQTextEdit:disabled,\nQLineEdit:disabled {\n  color: rgba(255, 255, 255, 0.2);\n  background-color: rgba(35, 38, 41, 0.3);\n  border: 2px solid #232629;\n  border-width: 0 0 2px 0;\n  padding: 0px 16px;\n  border-radius: 0px;\n  height: 24px;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QComboBox  */\n\nQDateEdit,\nQComboBox {\n  color: #ffffff;\n  height: 24px;\n  background-color: #292d30;\n  border-bottom: 1px solid #DFE3E7;\n}\n\nQDateEdit:disabled,\nQComboBox:disabled {\n  color: rgba(255, 255, 255, 0.2);\n  background-color: rgba(35, 38, 41, 0.3);\n  border-bottom: 2px solid #232629;\n}\n\nQDateEdit::drop-down,\nQComboBox::drop-down {\n  border: none;\n}\n\nQDateEdit::down-arrow,\nQComboBox::down-arrow {\n  image: url(\"/icons_path/active/downarrow.svg\");\n}\n\nQDateEdit::down-arrow:focus,\nQComboBox::down-arrow:focus {\n  image: url(\"/icons_path/primary/downarrow.svg\");\n}\n\nQDateEdit::down-arrow:disabled,\nQComboBox::down-arrow:disabled {\n  image: url(\"/icons_path/disabled/downarrow.svg\");\n}\n\nQDateEdit QAbstractItemView,\nQComboBox QAbstractItemView {\n  background-color: #0f1417;\n  padding: 4px;\n}\n\nQDateEdit[frame=\"false\"],\nQComboBox[frame=\"false\"] {\n  color: #ffffff;\n  background-color: transparent;\n  border: 1px solid transparent;\n}\n\nQDateEdit[frame=\"false\"]:disabled,\nQComboBox[frame=\"false\"]:disabled {\n  color: rgba(255, 255, 255, 0.2);\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  Spin buttons  */\n\nQDateTimeEdit::up-button,\nQDoubleSpinBox::up-button,\nQSpinBox::up-button {\n  subcontrol-origin: border;\n  subcontrol-position: top right;\n  width: 20px;\n  image: url(\"/icons_path/active/uparrow.svg\");\n  border-width: 0px;\n  margin-top: 5px;\n}\n\nQTreeView QDateTimeEdit::up-button,\nQTreeView QDoubleSpinBox::up-button,\nQTreeView QSpinBox::up-button {\n  margin-top: 0px;\n}\n\nQDateTimeEdit::up-button:disabled,\nQDoubleSpinBox::up-button:disabled,\nQSpinBox::up-button:disabled {\n  image: url(\"/icons_path/disabled/uparrow.svg\");\n}\n\nQDateTimeEdit::down-button,\nQDoubleSpinBox::down-button,\nQSpinBox::down-button {\n  subcontrol-origin: border;\n  subcontrol-position: bottom right;\n  width: 20px;\n  image: url(\"/icons_path/active/downarrow.svg\");\n  border-width: 0px;\n  border-top-width: 0;\n  margin-bottom: 5px;\n}\n\nQTreeView QDateTimeEdit::down-button,\nQTreeView QDoubleSpinBox::down-button,\nQTreeView QSpinBox::down-button {\n  margin-bottom: 0px;\n}\n\nQDateTimeEdit::down-button:disabled,\nQDoubleSpinBox::down-button:disabled,\nQSpinBox::down-button:disabled {\n  image: url(\"/icons_path/disabled/downarrow.svg\");\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QPushButton  */\n\nQPushButton {\n  text-transform: capitalize;\n  margin: 0px;\n  padding: 0px 16px;\n  height: 24px;\n  font-weight: bold;\n  color: #003546;\n  border: 2px solid rgba(255, 255, 255, 0);\n  border-radius: 14px;\n  background-color: #8bd0f0;\n}\n\nQPushButton:checked,\nQPushButton:pressed {\n  color: #003546;\n  background-color: #84c2e6;\n}\n\nQPushButton:hover {\n  background-color: #84c2e6;\n  color: #003546;\n  border: 2px solid rgba(255, 255, 255, 0);\n}\n\nQPushButton:flat {\n  margin: 0px;\n  color: #84c2e6;\n  border: none;\n  background-color: transparent;\n}\n\nQPushButton:flat:hover {\n  background-color: #84c2e6;\n}\n\nQPushButton:flat:pressed,\nQPushButton:flat:checked {\n  background-color: #699bb8;\n}\n\nQPushButton:disabled {\n  color: #6e7276;\n  background-color: #292d30;\n  border: 2px solid rgba(255, 255, 255, 0);\n}\n\nQPushButton:flat:disabled {\n  color: #6e7276;\n  background-color: #292d30;\n  border: none;\n}\n\nQPushButton:checked:disabled {\n  color: #6e7276;\n  background-color: #0f1417;\n  border: 2px solid rgba(255, 255, 255, 0);\n}\n\nQToolButton:focus,\nQPushButton:focus {\n  background-color: #84c2e6;\n}\n\nQPushButton:checked:focus,\nQPushButton:pressed:focus {\n  background-color: #699bb8;\n}\n\nQPushButton:flat:focus {\n  border: none;\n  background-color: #84c2e6;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QTabBar  */\n\nQTabBar {\n  text-transform: capitalize;\n  font-weight: bold;\n}\n\nQTabBar::tab {\n  color: #ffffff;\n  border-top: 2px solid rgba(255, 255, 255, 0);\n}\n\nQTabBar::tab:bottom,\nQTabBar::tab:top {\n  padding: 0 16px;\n  height: 28px;\n}\n\nQTabBar::tab:left,\nQTabBar::tab:right {\n  padding: 16px 0;\n  width: 28px;\n}\n\nQTabBar::tab:top:selected,\nQTabBar::tab:top:hover {\n  border-bottom: 2px solid #8bd0f0;\n}\n\nQTabBar::tab:bottom:selected,\nQTabBar::tab:bottom:hover {\n  border-top: 2px solid #8bd0f0;\n}\n\nQTabBar::tab:right:selected,\nQTabBar::tab:right:hover {\n  border-left: 2px solid #8bd0f0;\n}\n\nQTabBar::tab:left:selected,\nQTabBar::tab:left:hover {\n  border-right: 2px solid #8bd0f0;\n}\n\nQTabBar::tab:hover {\n  color: #fff;\n  background-color: #303538;\n}\n\nQTabBar::tab:selected {\n  color: #fff;\n  background-color: #292d30;\n}\n\n/* pressed state */\nQTabBar::tab:pressed {\n  color: #fff;\n  background-color: #383b3f;\n}\n\nQTabBar QToolButton:hover,\nQTabBar QToolButton {\n  border: 0px;\n  background-color: #232629;\n}\n\nQTabBar QToolButton::up-arrow {\n  image: url(\"/icons_path/primary/uparrow.svg\");\n  width: 28px;\n}\n\nQTabBar QToolButton::down-arrow {\n  image: url(\"/icons_path/primary/downarrow.svg\");\n  width: 28px;\n}\n\nQTabBar QToolButton::right-arrow {\n  image: url(\"/icons_path/disabled/rightarrow.svg\");\n  height: 28px;\n}\n\nQTabBar QToolButton::left-arrow {\n  image: url(\"/icons_path/disabled/leftarrow.svg\");\n  height: 28px;\n}\n\nQTabBar::close-button {\n  image: url(\"/icons_path/primary/tab_close.svg\");\n}\n\nQTabBar::close-button:hover {\n  image: url(\"/icons_path/primary/tab_close.svg\");\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QGroupBox  */\n\nQGroupBox {\n  padding: 16px;\n  padding-top: 36px;\n  text-transform: capitalize;\n}\n\nQGroupBox::title {\n  color: #dfe3e7;\n  subcontrol-origin: margin;\n  subcontrol-position: top left;\n  padding: 16px;\n  background-color: transparent;\n  height: 36px;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QRadioButton and QCheckBox labels  */\n\nQRadioButton,\nQCheckBox {\n  color: #84c2e6;\n  line-height: 12px;\n  height: 24px;\n  background-color: transparent;\n  spacing: 5px;\n}\n\nQRadioButton:disabled,\nQCheckBox:disabled {\n  color: #8bd0f0;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QRadioButton Indicator  */\n\nQRadioButton::indicator:checked {\n  image: url(\"/icons_path/primary/radiobutton_checked.svg\");\n}\n\nQRadioButton::indicator:unchecked {\n  image: url(\"/icons_path/primary/radiobutton_unchecked.svg\");\n}\n\nQRadioButton::indicator:checked:disabled {\n  image: url(\"/icons_path/disabled/radiobutton_checked.svg\");\n}\n\nQRadioButton::indicator:unchecked:disabled {\n  image: url(\"/icons_path/disabled/radiobutton_unchecked.svg\");\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QDockWidget  */\n\nQDockWidget {\n  color: #ffffff;\n  text-transform: capitalize;\n  border: 2px solid #232629;\n  titlebar-close-icon: url(\"/icons_path/primary/close.svg\");\n  titlebar-normal-icon: url(\"/icons_path/primary/float.svg\");\n  border-radius: 4px;\n}\n\nQDockWidget::title {\n  text-align: left;\n  padding-left: 36px;\n  padding: 3px;\n  margin-top: 4px;\n}\n\n/*  ------------------------------------------------------------------------  */\n/* QMenu */\n\nQMenu {\n  background-color: #1b2023;\n  margin: 10px;\n}\n\nQMenu::item {\n  height: 14px;\n  margin: 4px;\n  padding: 0px;\n  color: #ffffff;\n}\n\nQMenu::item:selected {\n  background-color: #303538;\n  margin-top: 0px;\n  margin-bottom: 0px;\n}\n\nQMenu::item:disabled {\n  color: rgba(255, 255, 255, 0.3);\n}\n\nQMenu::separator {\n  height: 1px;\n  margin: 2px;\n  background-color:#40484C;\n}\n\nQMenu::right-arrow {\n  image: url(\"/icons_path/primary/rightarrow.svg\");\n  width: 16px;\n  height: 16px;\n}\n\nQMenu::right-arrow:selected {\n  image: url(\"/icons_path/disabled/rightarrow.svg\");\n}\n\n/* QMenu Checkboxes */\n\nQMenu::indicator:non-exclusive:unchecked {\n  image: url(\"/icons_path/primary/checkbox_unchecked_enabled.svg\");\n}\n\nQMenu::indicator:non-exclusive:unchecked:selected {\n  image: url(\"/icons_path/primary/checkbox_unchecked_hovered.svg\");\n}\n\nQMenu::indicator:non-exclusive:checked {\n  image: url(\"/icons_path/primary/checkbox_checked_enabled.svg\");\n}\n\nQMenu::indicator:non-exclusive:checked:selected {\n  image: url(\"/icons_path/primary/checkbox_checked_hovered.svg\");\n}\n\n/* QMenu Radiobuttons */\n\nQMenu::indicator:exclusive:unchecked {\n  image: url(\"/icons_path/primary/radiobutton_unchecked.svg\");\n}\n\nQMenu::indicator:exclusive:unchecked:selected {\n  image: url(\"/icons_path/primary/radiobutton_unchecked_invert.svg\");\n}\n\nQMenu::indicator:exclusive:checked {\n  image: url(\"/icons_path/primary/radiobutton_checked.svg\");\n}\n\nQMenu::indicator:exclusive:checked:selected {\n  image: url(\"/icons_path/primary/radiobutton_checked_invert.svg\");\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QMenuBar  */\n\nQMenuBar {\n  background-color: #0f1417;\n  color: #ffffff;\n  border-bottom: 2px solid rgba(255, 255, 255, 0);\n}\n\nQMenuBar::item {\n  /* height: 32px; */\n  padding: 4px;\n  background-color: transparent;\n  color: #ffffff;\n}\n\nQMenuBar::item:selected,\nQMenuBar::item:pressed {\n  color: #ffffff;\n  background-color: #303538;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QToolBox  */\n\nQToolBox::tab {\n  background-color: #0f1417;\n  color: #ffffff;\n  text-transform: capitalize;\n  border-radius: 4px;\n  padding-left: 15px;\n}\n\nQToolBox::tab:selected,\nQToolBox::tab:hover {\n  background-color: #84c2e6;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QProgressBar  */\n\nQProgressBar {\n  border-radius: 0;\n  background-color: #0f1417;\n  text-align: center;\n  color: transparent;\n}\n\nQProgressBar::chunk {\n  background-color: #84c2e6;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QScrollBar  */\n\nQScrollBar {\n  border: 0;\n  background: rgba(255, 255, 255, 0.15);\n  border-radius: 5px;\n}\n\nQScrollBar:horizontal {\n  height: 10px;\n}\n\nQScrollBar:vertical {\n  width: 10px;\n}\n\nQScrollBar::handle {\n  background: #8bd0f0;\n  border-radius: 5px;\n}\n\nQScrollBar::handle:horizontal {\n  min-width: 24px;\n}\n\nQScrollBar::handle:vertical {\n  min-height: 24px;\n}\n\nQScrollBar::handle:hover {\n  background-color: #84c2e6;\n}\n\nQScrollBar::handle:pressed {\n  background-color: #699bb8;\n}\n\nQScrollBar::add-line:vertical,\nQScrollBar::sub-line:vertical,\nQScrollBar::add-line:horizontal,\nQScrollBar::sub-line:horizontal {\n  border: 0;\n  background: transparent;\n  width: 0px;\n  height: 0px;\n}\n\nQScrollBar::sub-page:horizontal,\nQScrollBar::add-page:horizontal,\nQScrollBar::sub-page:vertical,\nQScrollBar::add-page:vertical {\n  background: transparent;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QScrollBar-Big  */\n\nQScrollBar.big:horizontal {\n  border: 0;\n  background: #232629;\n  height: 36px;\n}\n\nQScrollBar.big:vertical {\n  border: 0;\n  background: #232629;\n  width: 36px;\n}\n\nQScrollBar.big::handle,\nQScrollBar.big::handle:vertical:hover,\nQScrollBar.big::handle:horizontal:hover {\n  background: #84c2e6;\n}\n\nQScrollBar.big::handle:horizontal {\n  min-width: 24px;\n}\n\nQScrollBar.big::handle:vertical {\n  min-height: 24px;\n}\n\nQScrollBar.big::add-line:vertical,\nQScrollBar.big::sub-line:vertical,\nQScrollBar.big::add-line:horizontal,\nQScrollBar.big::sub-line:horizontal {\n  border: 0;\n  background: transparent;\n  width: 0px;\n  height: 0px;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QSlider  */\nQSlider {\n  min-height: 20px;\n  min-width: 20px;\n}\n\nQSlider:horizontal {\n  min-height: 30px;\n  min-width: 30px;\n}\n\nQSlider:vertical {\n}\n\nQSlider::groove:horizontal {\n  border: 1px solid #262626;\n  height: 4px;\n  background: #0f1417;\n  margin: 0;\n}\n\nQSlider::groove:vertical {\n  width: 4px;\n  background: #0f1417;\n  margin: 12px 0;\n}\n\nQSlider::handle:horizontal {\n  width: 22px;\n  height: 18px;\n  margin: -9px -9px;\n}\n\nQSlider::handle:vertical {\n  background: #84c2e6;\n  width: 9px;\n  height: 9px;\n  min-height: 0px;\n  margin: -9px -18px;\n}\n\nQSlider::add-page {\n  background: #5e5e5e;\n}\n\nQSlider::sub-page {\n  background: #84c2e6;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QLabel  */\n\nQLabel {\n  border: none;\n  background: transparent;\n  color: #ffffff;\n}\n\nQLabel:disabled {\n  color: rgba(255, 255, 255, 0.2);\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  VLines and HLinex  */\n\nQFrame[frameShape=\"4\"] {\n  border-width: 1px 0 0 0;\n  background: none;\n}\n\nQFrame[frameShape=\"5\"] {\n  border-width: 0 1px 0 0;\n  background: none;\n}\n\nQFrame[frameShape=\"4\"],\nQFrame[frameShape=\"5\"] {\n  border-color: #0f1417;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QToolBar  */\n\nQToolBar {\n  background: #0f1417;\n  border: 0px solid;\n}\n\nQToolBar:horizontal {\n  /* border-bottom: 1px solid rgba(132, 194, 230, 0.7); */\n  border-top: 1px solid rgba(132, 194, 230, 0.7);\n}\n\nQToolBar:vertical {\n  border-right: 1px solid rgba(132, 194, 230, 0.7);\n  border-left: 1px solid rgba(132, 194, 230, 0.7);\n}\n\nQToolBar::handle:horizontal {\n  image: url(\"/icons_path/primary/toolbar-handle-horizontal.svg\");\n}\n\nQToolBar::handle:vertical {\n  image: url(\"/icons_path/primary/toolbar-handle-vertical.svg\");\n}\n\nQToolBar::separator:horizontal {\n  border-top: 1px solid rgba(132, 194, 230, 0.7);\n  border-bottom: 1px solid rgba(132, 194, 230, 0.7);\n  width: 1px;\n}\n\nQToolBar::separator:vertical {\n  border-top: 1px solid rgba(132, 194, 230, 0.7);\n  border-bottom: 1px solid rgba(132, 194, 230, 0.7);\n  height: 1px;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QToolButton  */\n\nQToolButton {\n  background: #171c1f;\n  border: 0px;\n  margin: 2px;\n  padding: 2px;\n  border-radius: 15px;\n  color: #8bd0f0;\n}\n\nQToolButton:hover {\n  background: #262931;\n}\n\nQToolButton:pressed {\n  background: #2d303a;\n}\n\nQToolButton:checked {\n  background: #2d303a;\n  border: 1px solid #8bd0f0;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  General viewers  */\n\nQTableView {\n  background-color: #0f1417;\n  border: 1px solid #232629;\n  border-radius: 4px;\n}\n\nQTreeView,\nQListView {\n  margin: 0px;\n  border: 0px;\n}\n\nQTableView::item,\nQTreeView::item,\nQListView::item {\n  padding: 2px;\n  min-height: 12px;\n  color: #ffffff;\n  border-color: transparent;\n}\n\nQListView::item {\n  margin-left: 0px;\n  margin-right: 2px;\n  background-color: #1b2023;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  Items Selection */\n\nQTableView::item:selected,\nQTreeView::item:selected,\nQListView::item:selected {\n  background-color: #303538;\n  color: #ffffff;\n}\n\nQTableView::item:selected:focus,\nQTreeView::item:selected:focus,\nQListView::item:selected:focus {\n  color: #ffffff;\n}\n\nQTableView::item:disabled {\n  color: #bdbdbd;\n  background-color: #303538;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QTreeView  */\n\nQTreeView::branch {\n  background-color: transparent;\n}\n\nQTreeView::branch:hover {\n  background-color: transparent;\n}\n\nQTreeView::branch:selected {\n  background-color: #303538;\n}\n\nQTreeView::branch:closed:has-children:has-siblings,\nQTreeView::branch:closed:has-children:!has-siblings {\n  image: url(\"/icons_path/primary/branch-closed.svg\");\n  margin-left: -8px;\n}\n\nQTreeView::branch:open:has-children:!has-siblings,\nQTreeView::branch:open:has-children:has-siblings {\n  image: url(\"/icons_path/primary/branch-open.svg\");\n  margin-left: -8px;\n}\n\n/* Commented in case decided to show the branch icons */\n/*\nQTreeView::branch:has-siblings:!adjoins-item {\n  border-image: url(\"/icons_path/disabled/vline.svg\");\n}\n\nQTreeView::branch:has-siblings:adjoins-item {\n  border-image: url(\"/icons_path/disabled/branch-more.svg\");\n}\n\nQTreeView::branch:!has-children:!has-siblings:adjoins-item,\nQTreeView::branch:has-children:!has-siblings:adjoins-item {\n  border-image: url(\"/icons_path/disabled/branch-end.svg\");\n} */\n\nQTreeView QHeaderView::section {\n  border: none;\n}\n\n/*  QTableView  */\n\nQTableCornerButton::section {\n  background-color: #0f1417;\n  border-radius: 0px;\n  border-right: 1px solid;\n  border-bottom: 1px solid;\n  border-color: #31363b;\n}\n\nQHeaderView {\n  border: none;\n}\n\nQHeaderView::section {\n  color: rgba(255, 255, 255, 0.7);\n  text-transform: capitalize;\n  background-color: #0f1417;\n  padding: 4px 6px;\n  border-radius: 0px;\n  border-right: 1px solid;\n  border-bottom: 1px solid;\n  border-color: #31363b;\n}\n\nQHeaderView::section:vertical {\n}\n\nQHeaderView::section:horizontal {\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QLCDNumber  */\n\nQLCDNumber {\n  color: #84c2e6;\n  background-color: #699bb8;\n  border: 1px solid rgba(132, 194, 230, 0.3);\n  border-radius: 4px;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QCalendarWidget  */\n\nQCalendarWidget {\n  min-height: 300px;\n}\n\n#qt_calendar_prevmonth {\n  qproperty-icon: url(\"/icons_path/primary/leftarrow.svg\");\n}\n\n#qt_calendar_nextmonth {\n  qproperty-icon: url(\"/icons_path/primary/rightarrow.svg\");\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  Inline QLineEdit  */\n\nQTreeView QLineEdit,\nQTableView QLineEdit,\nQListView QLineEdit {\n  color: #ffffff;\n  background-color: #0f1417;\n  /* border: 1px solid unset; */\n  border-radius: unset;\n  padding: unset;\n  padding-left: unset;\n  height: unset;\n  border-width: unset;\n  border-top-left-radius: unset;\n  border-top-right-radius: unset;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QToolTip  */\n\nQToolTip {\n  padding: 4px;\n  border: 1px solid #31363b;\n  border-radius: 4px;\n  color: #ffffff;\n  background-color: #0f1417;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  QDialog  */\n\n/* linux */\nQDialog QToolButton,\nQDialog QToolButton:hover,\nQDialog QToolButton:pressed,\nQDialog QToolButton:checked {\n  border: 0px;\n  height: unset;\n  margin: unset;\n  padding: unset;\n  border-right: unset;\n  border-left: unset;\n  background-color: #84c2e6;\n  color: #ffffff;\n  border-radius: 8px;\n}\n\nQDialog QToolButton:disabled {\n  background-color: #0f1417;\n  color: #ffffff;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  Grips  */\n\nQMainWindow::separator:vertical,\nQSplitter::handle:horizontal {\n  image: url(\"/icons_path/primary/splitter-vertical.svg\");\n  background-color: rgba(255, 255, 255, 0.03);\n  width: 15px;\n}\n\nQMainWindow::separator:horizontal,\nQSplitter::handle:vertical {\n  image: url(\"/icons_path/primary/splitter-horizontal.svg\");\n  background-color: rgba(255, 255, 255, 0.03);\n  height: 15px;\n}\n\nQSizeGrip {\n  image: url(\"/icons_path/primary/sizegrip.svg\");\n  background-color: transparent;\n}\n\nQMenuBar QToolButton:hover,\nQMenuBar QToolButton:pressed,\nQMenuBar QToolButton {\n  border-width: 0;\n  border-image: url(\"/icons_path/primary/rightarrow.svg\");\n  background-color: transparent;\n}\n\n/*  ------------------------------------------------------------------------  */\n/*  Focus  */\n\nQDateTimeEdit:focus,\nQSpinBox:focus,\nQDoubleSpinBox:focus,\nQComboBox:focus {\n  color: #fff;\n  border-bottom: 2px solid #8bd0f0;\n  background-color: #303538;\n}\n\n\nQDateTimeEdit::up-button:focus,\nQDoubleSpinBox::up-button:focus,\nQSpinBox::up-button:focus {\n  image: url(\"/icons_path/primary/uparrow.svg\");\n}\n\nQDateTimeEdit::down-button:focus,\nQDoubleSpinBox::down-button:focus,\nQSpinBox::down-button:focus {\n  image: url(\"/icons_path/primary/downarrow.svg\");\n}\n\n/* Special cases from rviz source code */\n\nQToolButton[toolTip=\"Add a new tool\"] {\n  qproperty-iconSize: 16px 16px;\n  qproperty-icon: url(\"/icons_path/primary/add.svg\");\n  background: #171c1f;\n  border: 0px;\n  margin: 2px;\n  padding: 0px;\n  border-radius: 12px;\n  width: 24px;\n  height: 24px;\n}\n\nQToolButton[toolTip=\"Add a new tool\"]:hover {\n  background: #262931;\n}\n\nQToolButton[toolTip=\"Add a new tool\"]:pressed {\n  background: #2d303a;\n}\n\nQToolButton[toolTip=\"Remove a tool from the toolbar\"] {\n  qproperty-iconSize: 16px 16px;\n  qproperty-icon: url(\"/icons_path/primary/minus.svg\");\n  background: #171c1f;\n  border: 0px;\n  margin: 2px;\n  padding: 0px;\n  border-radius: 12px;\n  width: 24px;\n  height: 24px;\n}\n\nQToolButton[toolTip=\"Remove a tool from the toolbar\"]:hover {\n  background: #262931;\n}\n\nQToolButton[toolTip=\"Remove a tool from the toolbar\"]:pressed {\n  background: #2d303a;\n}\n\nQDialog {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Tool Type\"] > QTextBrowser {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Tool Type\"] {\n  background-color: #1b2023;\n}\nQGroupBox[title=\"Tool Type\"] > QTreeView {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Panel Name\"] {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Panel Name\"] > QLineEdit {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Panel Type\"] > QTextBrowser {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Panel Type\"] {\n  background-color: #1b2023;\n}\nQGroupBox[title=\"Panel Type\"] > QTreeView {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Create visualization\"] {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Create visualization\"] > QTextBrowser {\n  background-color: #1b2023;\n}\nQGroupBox[title=\"Display Name\"] {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Display Name\"] > QLineEdit {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Create visualization\"] > QTabWidget {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Create visualization\"] QTabWidget QTreeWidget {\n  background-color: #1b2023;\n  color: white;\n}\nQGroupBox[title=\"Create visualization\"] QCheckBox {\n  background-color: #1b2023;\n  color: white;\n}\n\nQGroupBox[title=\"Create visualization\"] QTabWidget::pane {\n  background-color: #1b2023;\n}\n\nQGroupBox[title=\"Create visualization\"] QTabBar::tab {\n  background-color: #1b2023;\n  color: white;\n}\n\nQGroupBox[title=\"Create visualization\"] QTabBar::tab:selected {\n  background-color: #383b3f;\n  border-bottom: 2px solid #8bd0f0;\n}\n\nQGroupBox[title=\"Create visualization\"] QTabBar::tab:!selected {\n  background-color: #1b2023;\n  border-bottom: 2px solid #1b2023;\n}\n\nQGroupBox[title=\"Create visualization\"] QTabBar::tab:hover {\n  color: #fff;\n  background-color: #292d30;\n  border-bottom: 2px solid #8bd0f0;\n}\n\nQGroupBox[title=\"Create visualization\"] QTabBar::tab:pressed {\n  color: #fff;\n  background-color: #383b3f;\n  border-bottom: 2px solid #8bd0f0;\n}\n\nQGroupBox[title=\"Create visualization\"] QFrame {\n  background-color: #1b2023;\n  border: none;\n  margin: 0px;\n  padding: 0px;\n}\n\nQComboBox {\n  padding: 2px;\n  margin: 0px;\n}\n\n/* QLineEdit  */\nQLineEdit {\n  border-top-left-radius: 0px;\n  border-top-right-radius: 0px;\n  selection-background-color: #84c2e6;\n\n}\n\nQLineEdit > QPushButton {\n  qproperty-icon: url(\"/icons_path/primary/more.svg\");\n  qproperty-iconSize: 16px 16px;\n  qproperty-text: \"\";\n  margin: 0px;\n  padding: 0px;\n  background: transparent;\n  border-radius: 0px;\n}\n\nQLineEdit > QPushButton:hover {\n  background: transparent;\n  border-radius: 0px;\n}\n\n/* Not entirely sure if this affects anything other than the close button */\nQDockWidget QToolButton {\n  qproperty-icon: url(\"/icons_path/primary/close.svg\");\n  qproperty-iconSize: 16px 16px;\n  background: transparent;\n}\n\nQDockWidget QToolButton:hover {\n  background: #262931;\n}\n\n/* Style the list view of the QComboBox */\nQComboBox QAbstractItemView {\n  background-color: #1b2023;\n  height: 16px;\n}\nQComboBox {\n  selection-background-color: #84c2e6;\n  selection-color: #1b2023;\n}\n\n\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:enabled:checked,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:enabled:checked:selected,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:enabled:checked:focus,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:checked,\nQTreeView::indicator:enabled:checked,\nQTreeView::indicator:enabled:checked:selected,\nQTreeView::indicator:enabled:checked:focus,\nQTreeView::indicator:checked {\n  image: url(\"/icons_path/primary/checkbox_checked_enabled.svg\");\n}\n\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:checked:selected:active,\nQTreeView::indicator:checked:selected:active {\n  image: url(\"/icons_path/primary/checkbox_checked_hovered.svg\");\n}\n\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:disabled:checked,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:disabled:checked:selected,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:disabled:checked:focus,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:checked:disabled,\nQTreeView::indicator:disabled:checked,\nQTreeView::indicator:disabled:checked:selected,\nQTreeView::indicator:disabled:checked:focus,\nQTreeView::indicator:checked:disabled {\n  image: url(\"/icons_path/primary/checkbox_checked_disabled.svg\");\n}\n\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:enabled:unchecked,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:enabled:unchecked:selected,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:enabled:unchecked:focus,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:unchecked,\nQTreeView::indicator:enabled:unchecked,\nQTreeView::indicator:enabled:unchecked:selected,\nQTreeView::indicator:enabled:unchecked:focus,\nQTreeView::indicator:unchecked {\n  image: url(\"/icons_path/primary/checkbox_unchecked_enabled.svg\");\n}\n\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:unchecked:selected:active,\nQTreeView::indicator:unchecked:selected:active {\n  image: url(\"/icons_path/primary/checkbox_unchecked_hovered.svg\");\n}\n\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:disabled:unchecked,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:disabled:unchecked:selected,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:disabled:unchecked:focus,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:unchecked:disabled,\nQTreeView::indicator:disabled:unchecked,\nQTreeView::indicator:disabled:unchecked:selected,\nQTreeView::indicator:disabled:unchecked:focus,\nQTreeView::indicator:unchecked:disabled {\n  image: url(\"/icons_path/primary/checkbox_unchecked_disabled.svg\");\n}\n\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:enabled:indeterminate,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:enabled:indeterminate:selected,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:enabled:indeterminate:focus,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:indeterminate,\nQTreeView::indicator:enabled:indeterminate,\nQTreeView::indicator:enabled:indeterminate:selected,\nQTreeView::indicator:enabled:indeterminate:focus,\nQTreeView::indicator:indeterminate {\n  image: url(\"/icons_path/primary/checkbox_indeterminate_enabled.svg\");\n}\n\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:indeterminate:selected:active,\nQTreeView::indicator:indeterminate:selected:active {\n  image: url(\"/icons_path/primary/checkbox_indeterminate_hovered.svg\");\n}\n\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:disabled:indeterminate,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:disabled:indeterminate:selected,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:disabled:indeterminate:focus,\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator:indeterminate:disabled,\nQTreeView::indicator:disabled:indeterminate,\nQTreeView::indicator:disabled:indeterminate:selected,\nQTreeView::indicator:disabled:indeterminate:focus,\nQTreeView::indicator:indeterminate:disabled {\n  image: url(\"/icons_path/primary/checkbox_indeterminate_disabled.svg\");\n}\nQGroupBox[title=\"Create visualization\"] QCheckBox::indicator,\nQTreeView::indicator {\n  width: 20px;\n  height: 20px;\n}\n\n\nQTreeView::item:disabled {\n  color: #888888;\n}\n\n\nQTreeView QComboBox,\nQTreeView QSpinBox,\nQTreeView QDoubleSpinBox {\n  border: 0px;\n}\n\nQTreeView QComboBox:focus,\nQTreeView QSpinBox:focus,\nQTreeView QDoubleSpinBox:focus {\n  border: 0px;\n}\n"
  },
  {
    "path": "ansible/roles/qt5ct_setup/files/qt5ct.conf",
    "content": "[Appearance]\ncolor_scheme_path=/usr/share/qt5ct/colors/darker.conf\ncustom_palette=true\nicon_theme=ubuntu-mono-dark\nstandard_dialogs=default\nstyle=Fusion\n\n[Fonts]\nfixed=@Variant(\\0\\0\\0@\\0\\0\\0\\f\\0R\\0o\\0\\x62\\0o\\0t\\0o\\xbf\\xf0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\r\\x5\\x1\\0\\x32\\x10)\ngeneral=@Variant(\\0\\0\\0@\\0\\0\\0\\f\\0R\\0o\\0\\x62\\0o\\0t\\0o\\xbf\\xf0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\r\\x5\\x1\\0\\x32\\x10)\n\n[Interface]\nactivate_item_on_single_click=1\nbuttonbox_layout=3\ncursor_flash_time=1000\ndialog_buttons_have_icons=1\ndouble_click_interval=400\ngui_effects=@Invalid()\nkeyboard_scheme=2\nmenus_have_icons=true\nshow_shortcuts_in_context_menus=true\nstylesheets=autoware_stylesheet_path\ntoolbutton_style=0\nunderline_shortcut=1\nwheel_scroll_lines=3\n\n[QSSEditor]\ngeometry=@ByteArray(\\x1\\xd9\\xd0\\xcb\\0\\x3\\0\\0\\0\\0\\t\\xde\\0\\0\\x2~\\0\\0\\f`\\0\\0\\x4\\x95\\0\\0\\t\\xde\\0\\0\\x2\\xa3\\0\\0\\f`\\0\\0\\x4\\x95\\0\\0\\0\\0\\0\\0\\0\\0\\n\\0\\0\\0\\t\\xde\\0\\0\\x2\\xa3\\0\\0\\f`\\0\\0\\x4\\x95)\n\n[SettingsWindow]\ngeometry=@ByteArray(\\x1\\xd9\\xd0\\xcb\\0\\x3\\0\\0\\0\\0\\f\\x9c\\0\\0\\x4\\x19\\0\\0\\xfz\\0\\0\\a\\x3\\0\\0\\f\\x9c\\0\\0\\x4>\\0\\0\\xfz\\0\\0\\a\\x3\\0\\0\\0\\0\\0\\0\\0\\0\\xf\\0\\0\\0\\f\\x9c\\0\\0\\x4>\\0\\0\\xfz\\0\\0\\a\\x3)\n\n[Troubleshooting]\nforce_raster_widgets=2\nignored_applications=@Invalid()\n"
  },
  {
    "path": "ansible/roles/qt5ct_setup/meta/main.yml",
    "content": ""
  },
  {
    "path": "ansible/roles/qt5ct_setup/tasks/main.yml",
    "content": "- name: Install qt5ct\n  ansible.builtin.apt:\n    name: qt5ct\n    state: present\n  become: true\n\n- name: Install rsync\n  ansible.builtin.package:\n    name: rsync\n    state: present\n  become: true\n\n- name: Remove qt5ct from auto-start\n  ansible.builtin.file:\n    path: /etc/X11/Xsession.d/99qt5ct\n    state: absent\n  become: true\n\n- name: Set variable qt5ct_setup_config_dir\n  ansible.builtin.set_fact:\n    qt5ct_setup_config_dir: \"{{ ansible_env.HOME }}/.config/qt5ct\"\n\n- name: Ensure qt5ct_setup_config_dir exists\n  ansible.builtin.file:\n    path: \"{{ qt5ct_setup_config_dir }}\"\n    state: directory\n    mode: \"0755\"\n\n- name: Print the role_path\n  ansible.builtin.debug:\n    msg: \"The role_path is: {{ role_path }}\"\n\n- name: Set qt5ct_setup_icons_path variable\n  ansible.builtin.set_fact:\n    qt5ct_setup_icons_path: \"{{ qt5ct_setup_config_dir }}/autoware-rviz-icons\"\n\n- name: Remove autoware-rviz-icons folder if it exists\n  ansible.builtin.file:\n    path: \"{{ qt5ct_setup_icons_path }}\"\n    state: absent\n\n# Replace rsync with synchronize which is an ansible wrapper for rsync\n- name: Copy autoware-rviz-icons to the qt5ct config directory\n  ansible.posix.synchronize:\n    src: \"{{ role_path }}/files/autoware-rviz-icons/\"\n    dest: \"{{ qt5ct_setup_icons_path }}/\"\n    mode: push\n\n- name: Fix the paths in the qss file\n  ansible.builtin.replace:\n    path: \"{{ role_path }}/files/autoware.qss\"\n    regexp: /icons_path/\n    replace: \"{{ qt5ct_setup_icons_path }}/\"\n\n- name: Ensure qt5ct_setup_config_dir/qss exists\n  ansible.builtin.file:\n    path: \"{{ qt5ct_setup_config_dir }}/qss\"\n    state: directory\n    mode: \"0755\"\n\n- name: Copy autoware.qss to the qt5ct qss directory\n  ansible.builtin.copy:\n    src: \"{{ role_path }}/files/autoware.qss\"\n    dest: \"{{ qt5ct_setup_config_dir }}/qss/autoware.qss\"\n    force: true\n    backup: true\n    mode: \"0644\"\n\n- name: Fix the paths in the config file\n  ansible.builtin.replace:\n    path: \"{{ role_path }}/files/qt5ct.conf\"\n    regexp: autoware_stylesheet_path\n    replace: \"{{ qt5ct_setup_config_dir }}/qss/autoware.qss\"\n\n- name: Copy qt5ct.conf to the config directory\n  ansible.builtin.copy:\n    src: \"{{ role_path }}/files/qt5ct.conf\"\n    dest: \"{{ ansible_env.HOME }}/.config/qt5ct/qt5ct.conf\"\n    force: true\n    backup: true\n    mode: \"0644\"\n"
  },
  {
    "path": "ansible/roles/rmw_implementation/README.md",
    "content": "# rmw_implementation\n\nThis role sets up ROS 2 RMW implementation following [this page](https://docs.ros.org/en/humble/How-To-Guides/Working-with-multiple-RMW-implementations.html).\n\n## Inputs\n\n| Name               | Required | Description         |\n| ------------------ | -------- | ------------------- |\n| rosdistro          | true     | The ROS distro.     |\n| rmw_implementation | true     | RMW implementation. |\n\n## Manual Installation\n\n## Set up the environment variables\n\nChoose **one** ROS distribution and run the corresponding command.\n\n### ROS 2 Humble\n\n```bash\nwget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && \\\nsource /tmp/amd64.env\n```\n\n### ROS 2 Jazzy\n\n```bash\nwget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64_jazzy.env && \\\nsource /tmp/amd64.env\n```\n\n## Install the RMW implementation\n\nFor details: <https://docs.ros.org/en/humble/How-To-Guides/Working-with-multiple-RMW-implementations.html>\n\n```bash\nsudo apt update\nsudo apt install ros-${rosdistro}-${rmw_implementation//_/-}\n\n# (Optional) You set the default RMW implementation in the ~/.bashrc file.\necho '' >> ~/.bashrc && echo \"export RMW_IMPLEMENTATION=${rmw_implementation}\" >> ~/.bashrc\n```\n"
  },
  {
    "path": "ansible/roles/rmw_implementation/defaults/main.yaml",
    "content": "rmw_implementation__rosdistro: null\nrmw_implementation__name: null\n"
  },
  {
    "path": "ansible/roles/rmw_implementation/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/rmw_implementation/tasks/main.yaml",
    "content": "- name: Validate inputs\n  ansible.builtin.assert:\n    that:\n      - rmw_implementation__rosdistro | length > 0\n      - rmw_implementation__name | length > 0\n\n- name: Build target package name\n  ansible.builtin.set_fact:\n    rmw_implementation__pkg: >-\n      ros-{{ rmw_implementation__rosdistro }}-{{ rmw_implementation__name | replace('_', '-') }}\n\n- name: List held packages\n  ansible.builtin.command: apt-mark showhold\n  register: rmw_implementation__held_pkgs\n  changed_when: false\n\n- name: Install latest (skip if held) {{ rmw_implementation__pkg }}\n  become: true\n  ansible.builtin.apt:\n    name: \"{{ rmw_implementation__pkg }}\"\n    state: latest\n    update_cache: true\n    cache_valid_time: 3600\n  when: rmw_implementation__pkg not in rmw_implementation__held_pkgs.stdout_lines\n\n- name: Ensure RMW_IMPLEMENTATION in user bashrc\n  ansible.builtin.lineinfile:\n    path: \"{{ lookup('env', 'HOME') }}/.bashrc\"\n    line: export RMW_IMPLEMENTATION={{ rmw_implementation__name }}\n    state: present\n    create: true\n    mode: \"0644\"\n\n- name: Ensure RMW_IMPLEMENTATION in skeleton bashrc (for new users)\n  become: true\n  ansible.builtin.lineinfile:\n    path: /etc/skel/.bashrc\n    line: export RMW_IMPLEMENTATION={{ rmw_implementation__name }}\n    state: present\n    create: true\n    mode: \"0644\"\n"
  },
  {
    "path": "ansible/roles/ros2/README.md",
    "content": "# ros2\n\nThis role installs [ROS 2](http://www.ros2.org/) following [this page](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html).\n\nAdditional steps may be needed depending on the `rosdistro` you choose.\n\nTo prevent the update of the ROS 2 packages, if ros-`distro`-desktop is held, the installation process for the packages will be skipped and output warning.\n\n<!-- TODO: Add these steps to the role if Humble requires. -->\n\n```bash\n$ sudo apt install software-properties-common\n$ sudo add-apt-repository universe\n$ apt-cache policy | grep universe\n 500 http://us.archive.ubuntu.com/ubuntu focal/universe amd64 Packages\n     release v=20.04,o=Ubuntu,a=focal,n=focal,l=Ubuntu,c=universe,b=amd64\n```\n\n## Inputs\n\n| Name                   | Required | Description                                      |\n| ---------------------- | -------- | ------------------------------------------------ |\n| rosdistro              | true     | The ROS distro.                                  |\n| ros2_installation_type | false    | The installation type (`desktop` or `ros-base`). |\n\n## Manual Installation\n\nThe `ros2_installation_type` variable can also be found in:\n[./defaults/main.yaml](./defaults/main.yaml)\n\nFor Universe, the `rosdistro` variable can also be found in:\n[../../playbooks/universe.yaml](../../playbooks/universe.yaml)\n\n```bash\nwget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && source /tmp/amd64.env\n\n# Taken from: https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html\n\n# You will need to add the ROS 2 apt repository to your system. First, make sure that the Ubuntu Universe repository is enabled by checking the output of this command.\napt-cache policy | grep universe\n\n# The output of the above command should contain following:\n\n# 500 http://us.archive.ubuntu.com/ubuntu focal/universe amd64 Packages\n#     release v=20.04,o=Ubuntu,a=focal,n=focal,l=Ubuntu,c=universe,b=amd64\n\n# If you don’t see an output line like the one above, then enable the Universe repository with these instructions.\nsudo apt install software-properties-common\nsudo add-apt-repository universe\n\n# Now add the ROS 2 apt repository to your system. First authorize our GPG key with apt.\nsudo apt update && sudo apt install curl gnupg lsb-release\nsudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg\n\n# Then add the repository to your sources list.\necho \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main\" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null\n\n# Update your apt repository caches after setting up the repositories.\nsudo apt update\n\n# Desktop Install\nros2_installation_type=desktop\nsudo apt install ros-${rosdistro}-${ros2_installation_type}\n\n# Environment setup\n# (Optional) You can source ros2 in the ~/.bashrc file.\necho '' >> ~/.bashrc && echo \"source /opt/ros/${rosdistro}/setup.bash\" >> ~/.bashrc\n```\n"
  },
  {
    "path": "ansible/roles/ros2/defaults/main.yaml",
    "content": "ros2_installation_type: desktop\n"
  },
  {
    "path": "ansible/roles/ros2/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/ros2/tasks/main.yaml",
    "content": "- name: Get latest release information of ros-apt-source package\n  ansible.builtin.uri:\n    url: https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest\n    method: GET\n    return_content: true\n  register: ros2__ros_apt_release_info\n\n- name: Extract latest version of ros-apt-source package\n  ansible.builtin.set_fact:\n    ros2__ros_apt_source_version: \"{{ (ros2__ros_apt_release_info.content | from_json).tag_name }}\"\n\n- name: Save result of 'source /etc/os-release && echo $UBUNTU_CODENAME'\n  ansible.builtin.shell: bash -c 'source /etc/os-release && echo $UBUNTU_CODENAME'\n  register: ros2__ubuntu_codename\n  changed_when: false\n\n- name: Get ros2-apt-source package\n  ansible.builtin.get_url:\n    url: https://github.com/ros-infrastructure/ros-apt-source/releases/download/{{ ros2__ros_apt_source_version }}/ros2-apt-source_{{ ros2__ros_apt_source_version }}.{{ ros2__ubuntu_codename.stdout }}_all.deb\n    dest: /tmp/ros2-apt-source.deb\n    mode: \"0644\"\n\n- name: Install ros2-apt-source package\n  ansible.builtin.apt:\n    deb: /tmp/ros2-apt-source.deb\n    state: present\n  become: true\n\n- name: Delete installed .deb file\n  ansible.builtin.file:\n    path: /tmp/ros2-apt-source.deb\n    state: absent\n\n- name: Hold check of ros-{{ rosdistro + '-' + ros2_installation_type }}\n  ansible.builtin.command: apt-mark showhold\n  register: ros2_held_ros_packages\n  changed_when: false\n\n- name: Install ros-{{ rosdistro + '-' + ros2_installation_type }}\n  become: true\n  ansible.builtin.apt:\n    name: ros-{{ rosdistro }}-{{ ros2_installation_type }}\n    state: latest\n    update_cache: true\n  when: \"'ros-' + rosdistro + '-' + ros2_installation_type not in ros2_held_ros_packages.stdout\"\n  register: ros2_install_result\n  failed_when: false\n\n- name: Display warning if ROS 2 package is held\n  ansible.builtin.debug:\n    msg: ROS package 'ros-{{ rosdistro + '-' + ros2_installation_type }}' is apt-mark hold. Skipping installation.\n  when: not ros2_install_result.changed\n\n- name: Add PATH to .bashrc\n  become: true\n  ansible.builtin.lineinfile:\n    dest: \"{{ item }}\"\n    line: source /opt/ros/{{ rosdistro }}/setup.bash\n    state: present\n    create: true\n    mode: 0644\n  loop:\n    - ~/.bashrc\n    - /etc/skel/.bashrc\n"
  },
  {
    "path": "ansible/roles/ros2_dev_tools/README.md",
    "content": "# ros2_dev_tools\n\nThis role installs ROS 2 development tools following [this page](https://docs.ros.org/en/humble/Installation/Ubuntu-Development-Setup.html).\n\n## Inputs\n\nNone.\n\n## Manual Installation\n\n```bash\n# Taken from https://docs.ros.org/en/humble/Installation/Ubuntu-Development-Setup.html\nsudo apt update && sudo apt install -y \\\n  python3-colcon-mixin \\\n  python3-flake8-docstrings \\\n  python3-pip \\\n  python3-pytest-cov \\\n  python3-flake8-blind-except \\\n  python3-flake8-builtins \\\n  python3-flake8-class-newline \\\n  python3-flake8-comprehensions \\\n  python3-flake8-deprecated \\\n  python3-flake8-import-order \\\n  python3-flake8-quotes \\\n  python3-pytest-repeat \\\n  python3-pytest-rerunfailures \\\n  ros-build-essential \\\n  python3-bloom \\\n  python3-colcon-common-extensions \\\n  python3-colcon-mixin \\\n  python3-rosdep \\\n  python3-vcs2l \\\n  wget\n\n# Initialize rosdep\nsudo rosdep init\nrosdep update\n```\n"
  },
  {
    "path": "ansible/roles/ros2_dev_tools/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/ros2_dev_tools/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/ros2_dev_tools/tasks/main.yaml",
    "content": "- name: Install apt packages\n  become: true\n  ansible.builtin.apt:\n    name:\n      - python3-colcon-mixin\n      - python3-flake8-docstrings\n      - python3-pip\n      - python3-pytest-cov\n      - python3-flake8-blind-except\n      - python3-flake8-builtins\n      - python3-flake8-class-newline\n      - python3-flake8-comprehensions\n      - python3-flake8-deprecated\n      - python3-flake8-import-order\n      - python3-flake8-quotes\n      - python3-pytest-repeat\n      - python3-pytest-rerunfailures\n      - ros-build-essential # from ros-dev-tools\n      - python3-bloom # from ros-dev-tools\n      - python3-colcon-common-extensions # from ros-dev-tools\n      - python3-colcon-mixin # from ros-dev-tools\n      - python3-rosdep # from ros-dev-tools\n      - python3-vcs2l # formerly python3-vcstool\n      - wget # from ros-dev-tools\n    state: latest\n    update_cache: true\n\n- name: Run 'sudo rosdep init'\n  become: true\n  ansible.builtin.command:\n    cmd: rosdep init\n    creates: /etc/ros/rosdep/sources.list.d/20-default.list\n"
  },
  {
    "path": "ansible/roles/spconv/README.md",
    "content": "# spconv\n\nThis role install the `cumm` and `spconv` libraries needed to perform sparse convolutions.\nThe [original implementation](https://github.com/traveller59/spconv) did not provide a shared library, which is pre-generated c++ code and pre-compiled libraries were prepared [separately](https://github.com/autowarefoundation/spconv_cpp).\n\n## Architecture Support\n\nThis role supports different architectures with platform-specific package variants:\n\n- **amd64**: No suffix (e.g., `cumm_0.5.3_amd64.deb`)\n- **arm64**:\n  - Default: `-sbsa` suffix for server platforms (e.g., `cumm_0.5.3_arm64-sbsa.deb`)\n  - Jetson: `-jetson` suffix when `spconv_is_jetson=true` (e.g., `cumm_0.5.3_arm64-jetson.deb`)\n\n## Manual Installation\n\nFor manual installation, please follow the instructions in [this](https://github.com/autowarefoundation/spconv_cpp) repository.\n\n## Run the playbook\n\nThe following command will install a particular version of the packages using ansible.\n\n### Standard installation (amd64 or arm64 server)\n\n```bash\nexport CUMM_VERSION=0.5.3\nexport SPCONV_VERSION=2.3.8\nansible-playbook autoware.dev_env.install_spconv.yaml -e cumm_version=${CUMM_VERSION} -e spconv_version=${SPCONV_VERSION} --ask-become-pass\n```\n\n### Installation for NVIDIA Jetson platforms\n\n```bash\nexport CUMM_VERSION=0.5.3\nexport SPCONV_VERSION=2.3.8\nansible-playbook autoware.dev_env.install_spconv.yaml -e cumm_version=${CUMM_VERSION} -e spconv_version=${SPCONV_VERSION} -e spconv_is_jetson=true --ask-become-pass\n```\n"
  },
  {
    "path": "ansible/roles/spconv/defaults/main.yaml",
    "content": "spconv_is_jetson: false\n"
  },
  {
    "path": "ansible/roles/spconv/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/spconv/tasks/main.yaml",
    "content": "# cspell:ignore Bcumm\n- name: Normalize dpkg architecture\n  ansible.builtin.set_fact:\n    spconv_normalized_arch: \"{{ ansible_architecture | regex_replace('aarch64', 'arm64') | regex_replace('x86_64', 'amd64') }}\"\n\n- name: Set architecture suffix\n  ansible.builtin.set_fact:\n    spconv_arch_suffix: \"{{ '-jetson' if (spconv_normalized_arch == 'arm64' and spconv_is_jetson | bool) else ('-sbsa' if spconv_normalized_arch == 'arm64' else '') }}\"\n\n- name: Download the cumm package\n  ansible.builtin.get_url:\n    mode: \"0644\"\n    url: https://github.com/autowarefoundation/spconv_cpp/releases/download/spconv_v{{ spconv_version }}%2Bcumm_v{{ cumm_version }}%2Bcu128/cumm_{{ cumm_version }}_{{ spconv_normalized_arch }}{{ spconv_arch_suffix }}.deb\n    dest: /tmp/cumm.deb\n\n- name: Install the cumm package\n  become: true\n  ansible.builtin.apt:\n    deb: /tmp/cumm.deb\n    state: present\n\n- name: Download the spconv package\n  ansible.builtin.get_url:\n    mode: \"0644\"\n    url: https://github.com/autowarefoundation/spconv_cpp/releases/download/spconv_v{{ spconv_version }}%2Bcumm_v{{ cumm_version }}%2Bcu128/spconv_{{ spconv_version }}_{{ spconv_normalized_arch }}{{ spconv_arch_suffix }}.deb\n    dest: /tmp/spconv.deb\n\n- name: Install the spconv package\n  become: true\n  ansible.builtin.apt:\n    deb: /tmp/spconv.deb\n    state: present\n"
  },
  {
    "path": "ansible/roles/telegraf/README.md",
    "content": "# telegraf\n\nThis role install [InfluxDB v2](https://docs.influxdata.com/influxdb/v2/get-started/) and [Telegraf](https://docs.influxdata.com/telegraf/v1/) to collect system metrics.\n\nAfter installing telegraf and influxdb2, we need to manually make an API token and copy it to the `/etc/telegraf/telegraf.conf`.\n\n## Create Organization\n\nWhen accessing the InfluxDB UI <http://localhost:8086/> for the first time, you need to create an organization and a backet. Enter as follows.\n\n![](./files/create-org.png)\n\n## Generate API token\n\nNext, move to the `Load Data` tab, click the `GENERATE API TOKEN button`, and generate the API token.\n\n<https://docs.influxdata.com/influxdb/v2/admin/tokens/create-token/#manage-tokens-in-the-influxdb-ui>\n\n![](./files/load-data.png)\n\n![](./files/generate-api-token.png)\n\n## Copy API token and restart Telegraf\n\nPaste the obtained API token into the empty string part of `token = \"\"` in `/etc/telegraf/telegraf.conf`.\n\n<https://github.com/youtalk/autoware/blob/telegraf/ansible/roles/telegraf/files/telegraf.conf#L18>\n"
  },
  {
    "path": "ansible/roles/telegraf/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/telegraf/files/get_telegraf_proccpu_json.sh",
    "content": "#!/bin/bash\n\nSAMPLING_SEC=5\n\necho \"{\"\npidstat -u -h -l \"${SAMPLING_SEC}\" 1 |\n    tail -n +4 |\n    awk '{ cpu=$8; $1=$2=$3=$4=$5=$6=$7=$8=$9=\"\"; print cpu,$0 }' |\n    sort -n |\n    while read -r cpu cmd; do\n        if [[ ${cpu%%.*} -le 0 ]]; then\n            continue\n        fi\n        cmd=\"${cmd// /_}\"\n        cmd=\"${cmd//=/_}\"\n        cmd=\"${cmd:0:50}\"\n        echo \"\\\"${cmd}\\\":${cpu},\"\n    done\necho '\"z\":0'\necho \"}\"\n"
  },
  {
    "path": "ansible/roles/telegraf/files/get_telegraf_procmem_json.sh",
    "content": "#!/bin/bash\n\necho \"{\"\nps -ax --format \"rss command\" |\n    while read -r rss cmd; do\n        if [[ $rss -lt 30000 ]]; then\n            continue\n        fi\n        cmd=\"${cmd// /_}\"\n        cmd=\"${cmd//=/_}\"\n        cmd=\"${cmd:0:50}\"\n        echo \"\\\"${cmd}\\\":${rss},\"\n    done\necho '\"z\":0'\necho \"}\"\n"
  },
  {
    "path": "ansible/roles/telegraf/files/telegraf.conf",
    "content": "[global_tags]\n\n[agent]\n  interval = \"10s\"\n  round_interval = true\n  metric_batch_size = 1000\n  metric_buffer_limit = 10000\n  collection_jitter = \"0s\"\n  flush_interval = \"10s\"\n  flush_jitter = \"0s\"\n  precision = \"0s\"\n  hostname = \"\"\n  omit_hostname = false\n\n[[outputs.influxdb_v2]]\n  urls = [\"http://127.0.0.1:8086\"]\n  # Attach the access token. See also https://docs.influxdata.com/influxdb/cloud/admin/tokens/create-token/#manage-tokens-in-the-influxdb-ui\n  token = \"\"\n  organization = \"autowarefoundation\"\n  bucket = \"autoware\"\n  timeout = \"5s\"\n  user_agent = \"telegraf\"\n\n[[inputs.cpu]]\n  percpu = true\n  totalcpu = true\n  collect_cpu_time = false\n  report_active = false\n  core_tags = false\n\n[[inputs.disk]]\n  ignore_fs = [\"tmpfs\", \"devtmpfs\", \"devfs\", \"iso9660\", \"overlay\", \"aufs\", \"squashfs\"]\n\n[[inputs.diskio]]\n\n[[inputs.kernel]]\n\n[[inputs.mem]]\n\n[[inputs.processes]]\n\n[[inputs.swap]]\n\n[[inputs.system]]\n\n[[inputs.exec]]\n  commands = [\"/opt/autoware/bin/get_telegraf_proccpu_json.sh\"]\n  timeout = \"10s\"\n  data_format = \"json\"\n  name_suffix = \"_proccpu\"\n\n[[inputs.exec]]\n  commands = [\"/opt/autoware/bin/get_telegraf_procmem_json.sh\"]\n  timeout = \"5s\"\n  data_format = \"json\"\n  name_suffix = \"_procmem\"\n\n[[inputs.net]]\n\n[[inputs.nvidia_smi]]\n"
  },
  {
    "path": "ansible/roles/telegraf/handlers/main.yaml",
    "content": "- name: Restart telegraf\n  ansible.builtin.systemd:\n    name: telegraf\n    state: restarted\n"
  },
  {
    "path": "ansible/roles/telegraf/meta/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/telegraf/tasks/main.yaml",
    "content": "- name: Download influxdata-archive_compat.key\n  become: true\n  ansible.builtin.get_url:\n    url: https://repos.influxdata.com/influxdata-archive_compat.key\n    dest: /tmp/influxdata-archive_compat.key\n    mode: 0755\n\n- name: Verify the checksum of the key file\n  ansible.builtin.command: sha256sum -c\n  args:\n    chdir: /tmp\n    stdin: 393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c  influxdata-archive_compat.key\n  register: telegraf_checksum_result\n  failed_when: telegraf_checksum_result.rc != 0\n  changed_when: false\n\n- name: Check if GPG key is already converted\n  ansible.builtin.stat:\n    path: /tmp/influxdata-archive_compat.gpg\n  register: telegraf_gpg_key_stat\n\n- name: Convert the key to gpg format\n  ansible.builtin.command:\n    cmd: gpg --dearmor -o /tmp/influxdata-archive_compat.gpg /tmp/influxdata-archive_compat.key\n  become: true\n  when: not telegraf_gpg_key_stat.stat.exists\n  changed_when: false\n\n- name: Check if GPG key is already moved\n  ansible.builtin.stat:\n    path: /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg\n  register: telegraf_moved_key_stat\n\n- name: Move the gpg key to trusted.gpg.d\n  ansible.builtin.command:\n    cmd: mv /tmp/influxdata-archive_compat.gpg /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg\n  become: true\n  when: not telegraf_moved_key_stat.stat.exists\n  changed_when: false\n\n- name: Add InfluxData repository\n  become: true\n  ansible.builtin.apt_repository:\n    repo: deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main\n    state: present\n    filename: influxdata.list\n\n- name: Update apt cache\n  become: true\n  ansible.builtin.apt:\n    update_cache: true\n    cache_valid_time: 3600\n\n- name: Install InfluxDB v2\n  become: true\n  ansible.builtin.apt:\n    name: influxdb2\n    state: present\n\n- name: Install InfluxDB v2 CLI\n  become: true\n  ansible.builtin.apt:\n    name: influxdb2-cli\n    state: present\n\n- name: Install Telegraf\n  become: true\n  ansible.builtin.apt:\n    name: telegraf\n    state: present\n\n- name: Create telegraf_binary directory\n  ansible.builtin.file:\n    path: /opt/autoware/bin\n    state: directory\n    mode: 0755\n  become: true\n\n- name: Copy get_telegraf_proccpu_json.sh to /opt/autoware/bin\n  become: true\n  ansible.builtin.copy:\n    src: \"{{ role_path }}/files/get_telegraf_proccpu_json.sh\"\n    dest: /opt/autoware/bin/get_telegraf_proccpu_json.sh\n    owner: root\n    group: root\n    mode: 0755\n\n- name: Copy get_telegraf_procmem_json.sh to /opt/autoware/bin\n  become: true\n  ansible.builtin.copy:\n    src: \"{{ role_path }}/files/get_telegraf_procmem_json.sh\"\n    dest: /opt/autoware/bin/get_telegraf_procmem_json.sh\n    owner: root\n    group: root\n    mode: 0755\n\n- name: Copy telegraf.conf to /opt/autoware/bin\n  become: true\n  ansible.builtin.copy:\n    src: \"{{ role_path }}/files/telegraf.conf\"\n    dest: /etc/telegraf/telegraf.conf\n    owner: root\n    group: root\n    mode: 0644\n    backup: true\n  notify:\n    - Restart telegraf\n\n- name: Ensure telegraf is running and enabled\n  become: true\n  ansible.builtin.systemd:\n    name: telegraf\n    enabled: true\n    state: started\n\n- name: Ensure InfluxDB service is running\n  become: true\n  ansible.builtin.service:\n    name: influxdb\n    state: started\n    enabled: true\n\n- name: Check if InfluxDB is already set up\n  become: true\n  ansible.builtin.command:\n    cmd: influx setup --bucket-status\n  register: telegraf_influx_setup_status\n  ignore_errors: true\n  changed_when: false\n\n- name: Set up influxDB v2\n  become: true\n  ansible.builtin.command:\n    cmd: influx setup -f --name default --username autoware --password autoware --token autowaretoken --org autowarefoundation --bucket autoware --retention 0\n  when: telegraf_influx_setup_status.rc != 0\n  changed_when: false\n"
  },
  {
    "path": "ansible/roles/tensorrt/README.md",
    "content": "# tensorrt\n\nThis role installs TensorRT following [the official NVIDIA TensorRT Installation Guide](https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html#installing).\n\n## Inputs\n\n| Name             | Required | Description              |\n| ---------------- | -------- | ------------------------ |\n| tensorrt_version | true     | The version of TensorRT. |\n\n## Manual Installation\n\n### Set up the environment variables\n\nChoose **one** ROS distribution and run the corresponding command.\n\n#### ROS 2 Humble\n\n```bash\nwget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && \\\nsource /tmp/amd64.env\n```\n\n#### ROS 2 Jazzy\n\n```bash\nwget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64_jazzy.env && \\\nsource /tmp/amd64.env\n```\n\n### Install TensorRT\n\n```bash\nsudo apt-get install -y \\\nlibnvinfer10=${tensorrt_version} \\\nlibnvinfer-plugin10=${tensorrt_version} \\\nlibnvonnxparsers10=${tensorrt_version} \\\nlibnvinfer-dev=${tensorrt_version} \\\nlibnvinfer-plugin-dev=${tensorrt_version} \\\nlibnvinfer-headers-dev=${tensorrt_version} \\\nlibnvinfer-headers-plugin-dev=${tensorrt_version} \\\nlibnvonnxparsers-dev=${tensorrt_version}\n\nsudo apt-mark hold \\\nlibnvinfer10 \\\nlibnvinfer-plugin10 \\\nlibnvonnxparsers10 \\\nlibnvinfer-dev \\\nlibnvinfer-plugin-dev \\\nlibnvonnxparsers-dev \\\nlibnvinfer-headers-dev \\\nlibnvinfer-headers-plugin-dev\n```\n"
  },
  {
    "path": "ansible/roles/tensorrt/defaults/main.yaml",
    "content": ""
  },
  {
    "path": "ansible/roles/tensorrt/meta/main.yaml",
    "content": "dependencies:\n  - role: autoware.dev_env.cuda\n"
  },
  {
    "path": "ansible/roles/tensorrt/tasks/main.yaml",
    "content": "- name: Install TensorRT\n  become: true\n  ansible.builtin.apt:\n    name:\n      - libnvinfer10={{ tensorrt_version }}\n      - libnvinfer-plugin10={{ tensorrt_version }}\n      - libnvonnxparsers10={{ tensorrt_version }}\n    allow_change_held_packages: true\n    allow_downgrade: true\n    update_cache: true\n\n- name: Install TensorRT Dev\n  become: true\n  ansible.builtin.apt:\n    name:\n      - libnvinfer-dev={{ tensorrt_version }}\n      - libnvinfer-plugin-dev={{ tensorrt_version }}\n      - libnvinfer-headers-dev={{ tensorrt_version }}\n      - libnvinfer-headers-plugin-dev={{ tensorrt_version }}\n      - libnvonnxparsers-dev={{ tensorrt_version }}\n    allow_change_held_packages: true\n    allow_downgrade: true\n    update_cache: true\n  when: install_devel == 'y'\n\n# apt-mark hold\n- name: Prevent CUDA-related packages from upgrading\n  become: true\n  ansible.builtin.dpkg_selections:\n    name: \"{{ item }}\"\n    selection: hold\n  with_items:\n    - libnvinfer10\n    - libnvinfer-plugin10\n    - libnvonnxparsers10\n\n- name: Prevent CUDA-related Dev packages from upgrading\n  become: true\n  ansible.builtin.dpkg_selections:\n    name: \"{{ item }}\"\n    selection: hold\n  with_items:\n    - libnvinfer-dev\n    - libnvinfer-plugin-dev\n    - libnvinfer-headers-dev\n    - libnvinfer-headers-plugin-dev\n    - libnvonnxparsers-dev\n  when: install_devel == 'y'\n"
  },
  {
    "path": "ansible-galaxy-requirements.yaml",
    "content": "collections:\n  - source: ./ansible\n    type: dir\n"
  },
  {
    "path": "arm64.env",
    "content": "# Override amd64's settings\ntensorrt_version=10.3.0.26-1+cuda12.5\n"
  },
  {
    "path": "docker/Dockerfile",
    "content": "ARG AUTOWARE_BASE_IMAGE=ghcr.io/autowarefoundation/autoware-base:latest\nARG AUTOWARE_BASE_CUDA_IMAGE=ghcr.io/autowarefoundation/autoware-base:cuda-latest\nARG AUTOWARE_BASE_IMAGE_JAZZY=ghcr.io/autowarefoundation/autoware-base:jazzy-latest\nARG ROS_DISTRO=humble\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_IMAGE AS rosdep-depend\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\n\nCOPY setup-dev-env.sh ansible-galaxy-requirements.yaml amd64.env amd64_jazzy.env arm64.env /autoware/\nCOPY ansible/ /autoware/ansible/\nCOPY docker/scripts/cleanup_apt.sh /autoware/cleanup_apt.sh\nRUN chmod +x /autoware/cleanup_apt.sh\nCOPY docker/scripts/resolve_rosdep_keys.sh /autoware/resolve_rosdep_keys.sh\nRUN chmod +x /autoware/resolve_rosdep_keys.sh\nWORKDIR /autoware\n\nRUN rm -f /etc/apt/apt.conf.d/docker-clean \\\n  && echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' >/etc/apt/apt.conf.d/keep-cache \\\n  && /autoware/cleanup_apt.sh\n\n# Generate install package lists\nCOPY src/core/autoware_adapi_msgs /autoware/src/core/autoware_adapi_msgs\nCOPY src/core/autoware_cmake /autoware/src/core/autoware_cmake\nCOPY src/core/autoware_internal_msgs /autoware/src/core/autoware_internal_msgs\nCOPY src/core/autoware_lanelet2_extension /autoware/src/core/autoware_lanelet2_extension\nCOPY src/core/autoware_msgs /autoware/src/core/autoware_msgs\nCOPY src/core/autoware_utils /autoware/src/core/autoware_utils\nRUN rosdep update && /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" \\\n  > /rosdep-core-common-depend-packages.txt \\\n  && cat /rosdep-core-common-depend-packages.txt\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" --dependency-types=exec \\\n  > /rosdep-core-common-exec-depend-packages.txt \\\n  && cat /rosdep-core-common-exec-depend-packages.txt\n\nCOPY src/core/autoware_core /autoware/src/core/autoware_core\nRUN rosdep update && /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" \\\n  > /rosdep-core-depend-packages.txt \\\n  && cat /rosdep-core-depend-packages.txt\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" --dependency-types=exec \\\n  > /rosdep-core-exec-depend-packages.txt \\\n  && cat /rosdep-core-exec-depend-packages.txt\n\nCOPY src/universe/external /autoware/src/universe/external\n# trt_batched_nms depends on autoware_tensorrt_common and autoware_cuda_utils, which are not available in universe-common-devel stage\nRUN rm -rf /autoware/src/universe/external/trt_batched_nms\nCOPY src/universe/autoware_universe/common /autoware/src/universe/autoware_universe/common\nCOPY src/middleware/external /autoware/src/middleware/external\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" \\\n  > /rosdep-universe-common-depend-packages.txt \\\n  && cat /rosdep-universe-common-depend-packages.txt\n\nFROM rosdep-depend AS rosdep-universe-visualization-depend\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\n\nCOPY src/universe/autoware_universe/visualization /autoware/src/universe/autoware_universe/visualization\nCOPY src/core/autoware_rviz_plugins /autoware/src/core/autoware_rviz_plugins\n\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" \\\n  > /rosdep-universe-visualization-depend-packages.txt \\\n  && cat /rosdep-universe-visualization-depend-packages.txt\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" --dependency-types=exec \\\n  > /rosdep-universe-visualization-exec-depend-packages.txt \\\n  && cat /rosdep-universe-visualization-exec-depend-packages.txt\n\nFROM rosdep-depend AS rosdep-universe-sensing-perception-depend\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\n\nCOPY src/launcher/autoware_launch/tier4_universe_launch/tier4_perception_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_perception_launch\nCOPY src/launcher/autoware_launch/tier4_universe_launch/tier4_sensing_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_sensing_launch\nCOPY src/universe/autoware_universe/perception /autoware/src/universe/autoware_universe/perception\nCOPY src/universe/autoware_universe/sensing /autoware/src/universe/autoware_universe/sensing\nCOPY src/universe/autoware_universe/evaluator/autoware_perception_online_evaluator /autoware/src/universe/autoware_universe/evaluator/autoware_perception_online_evaluator\nCOPY src/sensor_component /autoware/src/sensor_component\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" \\\n  > /rosdep-universe-sensing-perception-depend-packages.txt \\\n  && cat /rosdep-universe-sensing-perception-depend-packages.txt\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" --dependency-types=exec \\\n  > /rosdep-universe-sensing-perception-exec-depend-packages.txt \\\n  && cat /rosdep-universe-sensing-perception-exec-depend-packages.txt\n\nFROM rosdep-depend AS rosdep-universe-localization-mapping-depend\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\n\nCOPY src/launcher/autoware_launch/tier4_universe_launch/tier4_localization_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_localization_launch\nCOPY src/launcher/autoware_launch/tier4_universe_launch/tier4_map_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_map_launch\nCOPY src/universe/autoware_universe/localization /autoware/src/universe/autoware_universe/localization\nCOPY src/universe/autoware_universe/map /autoware/src/universe/autoware_universe/map\n# TODO(youtalk): Remove COPYs when https://github.com/autowarefoundation/autoware_universe/issues/10282 is resolved\nCOPY src/universe/autoware_universe/sensing/autoware_pcl_extensions /autoware/src/universe/autoware_universe/sensing/autoware_pcl_extensions\nCOPY src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor /autoware/src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor\nCOPY src/universe/autoware_universe/system/autoware_default_adapi_helpers/autoware_automatic_pose_initializer /autoware/src/universe/autoware_universe/system/autoware_default_adapi_helpers/autoware_automatic_pose_initializer\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" \\\n  > /rosdep-universe-localization-mapping-depend-packages.txt \\\n  && cat /rosdep-universe-localization-mapping-depend-packages.txt\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" --dependency-types=exec \\\n  > /rosdep-universe-localization-mapping-exec-depend-packages.txt \\\n  && cat /rosdep-universe-localization-mapping-exec-depend-packages.txt\n\nFROM rosdep-depend AS rosdep-universe-planning-control-depend\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\n\nCOPY src/launcher/autoware_launch/tier4_universe_launch/tier4_control_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_control_launch\nCOPY src/launcher/autoware_launch/tier4_universe_launch/tier4_planning_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_planning_launch\nCOPY src/universe/autoware_universe/control /autoware/src/universe/autoware_universe/control\nCOPY src/universe/autoware_universe/planning /autoware/src/universe/autoware_universe/planning\n# TODO(youtalk): Remove COPYs when https://github.com/autowarefoundation/autoware_universe/issues/8805 is resolved\nCOPY src/universe/autoware_universe/evaluator/autoware_control_evaluator /autoware/src/universe/autoware_universe/evaluator/autoware_control_evaluator\nCOPY src/universe/autoware_universe/evaluator/autoware_planning_evaluator /autoware/src/universe/autoware_universe/evaluator/autoware_planning_evaluator\nCOPY src/universe/autoware_universe/sensing/autoware_pcl_extensions /autoware/src/universe/autoware_universe/sensing/autoware_pcl_extensions\nCOPY src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor /autoware/src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor\nCOPY src/universe/autoware_universe/vehicle/autoware_external_cmd_converter /autoware/src/universe/autoware_universe/vehicle/autoware_external_cmd_converter\nCOPY src/universe/autoware_universe/vehicle/autoware_raw_vehicle_cmd_converter /autoware/src/universe/autoware_universe/vehicle/autoware_raw_vehicle_cmd_converter\nCOPY src/universe/autoware_universe/system/autoware_command_mode_types /autoware/src/universe/autoware_universe/system/autoware_command_mode_types\n\n# diffusion_planner depends on cuda\nCOPY src/universe/autoware_universe/sensing/autoware_cuda_utils /autoware/src/universe/autoware_universe/sensing/autoware_cuda_utils\nCOPY src/universe/autoware_universe/perception/autoware_tensorrt_common /autoware/src/universe/autoware_universe/perception/autoware_tensorrt_common\nCOPY src/universe/autoware_universe/perception/autoware_tensorrt_plugins /autoware/src/universe/autoware_universe/perception/autoware_tensorrt_plugins\n\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" \\\n  > /rosdep-universe-planning-control-depend-packages.txt \\\n  && cat /rosdep-universe-planning-control-depend-packages.txt\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" --dependency-types=exec \\\n  > /rosdep-universe-planning-control-exec-depend-packages.txt \\\n  && cat /rosdep-universe-planning-control-exec-depend-packages.txt\n\nFROM rosdep-depend AS rosdep-universe-vehicle-system-depend\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\n\nCOPY src/launcher/autoware_launch/tier4_universe_launch/tier4_vehicle_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_vehicle_launch\nCOPY src/launcher/autoware_launch/tier4_universe_launch/tier4_system_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_system_launch\nCOPY src/universe/autoware_universe/vehicle /autoware/src/universe/autoware_universe/vehicle\nCOPY src/universe/autoware_universe/system /autoware/src/universe/autoware_universe/system\n\n# planning_validator and its dependencies\nCOPY src/universe/autoware_universe/planning/planning_validator /autoware/src/universe/autoware_universe/planning/planning_validator\nCOPY src/core/autoware_core/planning/autoware_planning_factor_interface /autoware/src/core/autoware_core/planning/autoware_planning_factor_interface\nCOPY src/core/autoware_core/planning/autoware_route_handler /autoware/src/core/autoware_core/planning/autoware_route_handler\n\nCOPY src/core/autoware_core/map/autoware_map_height_fitter /autoware/src/core/autoware_core/map/autoware_map_height_fitter\nCOPY src/universe/autoware_universe/localization/autoware_pose2twist /autoware/src/universe/autoware_universe/localization/autoware_pose2twist\nCOPY src/sensor_component/external/sensor_component_description /autoware/src/sensor_component/external/sensor_component_description\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" \\\n  > /rosdep-universe-vehicle-system-depend-packages.txt \\\n  && cat /rosdep-universe-vehicle-system-depend-packages.txt\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" --dependency-types=exec \\\n  > /rosdep-universe-vehicle-system-exec-depend-packages.txt \\\n  && cat /rosdep-universe-vehicle-system-exec-depend-packages.txt\n\nFROM rosdep-depend AS rosdep-universe-api-depend\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\n\nCOPY src/launcher/autoware_launch/tier4_universe_launch/tier4_autoware_api_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_autoware_api_launch\nCOPY src/universe/autoware_universe/system/autoware_default_adapi_universe /autoware/src/universe/autoware_universe/system/autoware_default_adapi_universe\nCOPY src/universe/autoware_universe/evaluator/autoware_evaluation_adapter /autoware/src/universe/autoware_universe/evaluator/autoware_evaluation_adapter\nCOPY src/core/autoware_core/api/autoware_adapi_adaptors /autoware/src/core/autoware_core/api/autoware_adapi_adaptors\nCOPY src/universe/autoware_universe/system/autoware_diagnostic_graph_utils /autoware/src/universe/autoware_universe/system/autoware_diagnostic_graph_utils\nCOPY src/core/autoware_core/map/autoware_map_height_fitter /autoware/src/core/autoware_core/map/autoware_map_height_fitter\n\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} \\\n  > /rosdep-universe-api-depend-packages.txt \\\n  && cat /rosdep-universe-api-depend-packages.txt\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} --dependency-types=exec \\\n  > /rosdep-universe-api-exec-depend-packages.txt \\\n  && cat /rosdep-universe-api-exec-depend-packages.txt\n\nFROM rosdep-depend AS rosdep-universe-depend\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\n\nCOPY src/launcher /autoware/src/launcher\nCOPY src/sensor_component /autoware/src/sensor_component\nCOPY src/universe /autoware/src/universe\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" \\\n  > /rosdep-universe-depend-packages.txt \\\n  && cat /rosdep-universe-depend-packages.txt\n\nRUN /autoware/resolve_rosdep_keys.sh /autoware/src \"${ROS_DISTRO}\" --dependency-types=exec \\\n  > /rosdep-exec-depend-packages.txt \\\n  && cat /rosdep-exec-depend-packages.txt\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_IMAGE AS core-common-devel\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\nENV CMAKE_PREFIX_PATH=\"/opt/acados:${CMAKE_PREFIX_PATH}\"\nENV ACADOS_SOURCE_DIR=\"/opt/acados\"\nENV LD_LIBRARY_PATH=\"/opt/acados/lib:${LD_LIBRARY_PATH}\"\n\nCOPY docker/scripts/build_and_clean.sh /autoware/build_and_clean.sh\nRUN chmod +x /autoware/build_and_clean.sh\n\n# Set up development environment and tools\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers openadkit --ros-distro $ROS_DISTRO \\\n  && ./setup-dev-env.sh -y --module dev-tools openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && /autoware/cleanup_apt.sh\n\n# Install rosdep dependencies\nCOPY --from=rosdep-depend /rosdep-core-common-depend-packages.txt /tmp/rosdep-core-common-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-core-common-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\nRUN --mount=type=cache,target=\"${CCACHE_DIR}\" \\\n  --mount=type=bind,source=src/core/autoware_adapi_msgs,target=/autoware/src/core/autoware_adapi_msgs \\\n  --mount=type=bind,source=src/core/autoware_cmake,target=/autoware/src/core/autoware_cmake \\\n  --mount=type=bind,source=src/core/autoware_internal_msgs,target=/autoware/src/core/autoware_internal_msgs \\\n  --mount=type=bind,source=src/core/autoware_lanelet2_extension,target=/autoware/src/core/autoware_lanelet2_extension \\\n  --mount=type=bind,source=src/core/autoware_msgs,target=/autoware/src/core/autoware_msgs \\\n  --mount=type=bind,source=src/core/autoware_utils,target=/autoware/src/core/autoware_utils \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && /autoware/build_and_clean.sh \"${CCACHE_DIR}\" /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM core-common-devel AS core-devel\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\n# Install rosdep dependencies\nCOPY --from=rosdep-depend /rosdep-core-depend-packages.txt /tmp/rosdep-core-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-core-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\nRUN --mount=type=cache,target=\"${CCACHE_DIR}\" \\\n  --mount=type=bind,source=src/core/autoware_core,target=/autoware/src/core/autoware_core \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && /autoware/build_and_clean.sh \"${CCACHE_DIR}\" /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM core-devel AS universe-common-devel\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\n# Install rosdep dependencies\nCOPY --from=rosdep-depend /rosdep-universe-common-depend-packages.txt /tmp/rosdep-universe-common-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-universe-common-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=\"${CCACHE_DIR}\" \\\n  --mount=type=bind,source=src/universe/autoware_universe/common,target=/autoware/src/universe/autoware_universe/common \\\n  --mount=type=bind,source=src/universe/external/eagleye,target=/autoware/src/universe/external/eagleye \\\n  --mount=type=bind,source=src/universe/external/glog,target=/autoware/src/universe/external/glog \\\n  --mount=type=bind,source=src/universe/external/llh_converter,target=/autoware/src/universe/external/llh_converter \\\n  --mount=type=bind,source=src/universe/external/managed_transform_buffer,target=/autoware/src/universe/external/managed_transform_buffer \\\n  --mount=type=bind,source=src/universe/external/morai_msgs,target=/autoware/src/universe/external/morai_msgs \\\n  --mount=type=bind,source=src/universe/external/muSSP,target=/autoware/src/universe/external/muSSP \\\n  --mount=type=bind,source=src/universe/external/pointcloud_to_laserscan,target=/autoware/src/universe/external/pointcloud_to_laserscan \\\n  --mount=type=bind,source=src/universe/external/rtklib_ros_bridge,target=/autoware/src/universe/external/rtklib_ros_bridge \\\n  --mount=type=bind,source=src/universe/external/tier4_autoware_msgs,target=/autoware/src/universe/external/tier4_autoware_msgs \\\n  --mount=type=bind,source=src/middleware/external,target=/autoware/src/middleware/external \\\n  --mount=type=bind,source=src/launcher,target=/autoware/src/launcher \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && source /opt/autoware/setup.bash \\\n  && /autoware/build_and_clean.sh \"${CCACHE_DIR}\" /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM universe-common-devel AS universe-common-devel-cuda\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\n\n# Set up CUDA development environment\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  ./setup-dev-env.sh -y --module all --no-cuda-drivers openadkit --ros-distro \"$ROS_DISTRO\" \\\n  && pipx uninstall ansible \\\n  && /autoware/cleanup_apt.sh true\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM universe-common-devel AS universe-sensing-perception-devel\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\n# Install rosdep dependencies\nCOPY --from=rosdep-universe-sensing-perception-depend /rosdep-universe-sensing-perception-depend-packages.txt /tmp/rosdep-universe-sensing-perception-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-universe-sensing-perception-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=\"${CCACHE_DIR}\" \\\n  --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_perception_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_perception_launch \\\n  --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_sensing_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_sensing_launch \\\n  --mount=type=bind,source=src/universe/external/trt_batched_nms,target=/autoware/src/universe/external/trt_batched_nms \\\n  --mount=type=bind,source=src/universe/autoware_universe/perception,target=/autoware/src/universe/autoware_universe/perception \\\n  --mount=type=bind,source=src/universe/autoware_universe/sensing,target=/autoware/src/universe/autoware_universe/sensing \\\n  --mount=type=bind,source=src/universe/autoware_universe/evaluator/autoware_perception_online_evaluator,target=/autoware/src/universe/autoware_universe/evaluator/autoware_perception_online_evaluator \\\n  --mount=type=bind,source=src/sensor_component,target=/autoware/src/sensor_component \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && source /opt/autoware/setup.bash \\\n  && /autoware/build_and_clean.sh \"${CCACHE_DIR}\" /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM universe-common-devel-cuda AS universe-sensing-perception-devel-cuda\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\n# Install rosdep dependencies\nCOPY --from=rosdep-universe-sensing-perception-depend /rosdep-universe-sensing-perception-depend-packages.txt /tmp/rosdep-universe-sensing-perception-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-universe-sensing-perception-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\nCOPY --from=universe-sensing-perception-devel /opt/autoware /opt/autoware\n\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=\"${CCACHE_DIR}\" \\\n  --mount=type=bind,source=src/universe/external/negotiated,target=/autoware/src/universe/external/negotiated \\\n  --mount=type=bind,source=src/universe/external/cuda_blackboard,target=/autoware/src/universe/external/cuda_blackboard \\\n  --mount=type=bind,source=src/universe/autoware_universe/perception,target=/autoware/src/universe/autoware_universe/perception \\\n  --mount=type=bind,source=src/universe/autoware_universe/sensing,target=/autoware/src/universe/autoware_universe/sensing \\\n  --mount=type=bind,source=src/universe/autoware_universe/common/autoware_cuda_dependency_meta,target=/autoware/src/universe/autoware_universe/common/autoware_cuda_dependency_meta \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && source /opt/autoware/setup.bash \\\n  && /autoware/build_and_clean.sh \"${CCACHE_DIR}\" /opt/autoware \"--packages-above-and-dependencies autoware_cuda_dependency_meta\"\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM universe-common-devel AS universe-localization-mapping-devel\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\n# Install rosdep dependencies\nCOPY --from=rosdep-universe-localization-mapping-depend /rosdep-universe-localization-mapping-depend-packages.txt /tmp/rosdep-universe-localization-mapping-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-universe-localization-mapping-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=\"${CCACHE_DIR}\" \\\n  --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_localization_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_localization_launch \\\n  --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_map_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_map_launch \\\n  --mount=type=bind,source=src/universe/autoware_universe/localization,target=/autoware/src/universe/autoware_universe/localization \\\n  --mount=type=bind,source=src/universe/autoware_universe/map,target=/autoware/src/universe/autoware_universe/map \\\n  # TODO(youtalk): Remove COPYs when https://github.com/autowarefoundation/autoware_universe/issues/10282 is resolved\n  --mount=type=bind,source=src/universe/autoware_universe/sensing/autoware_pcl_extensions,target=/autoware/src/universe/autoware_universe/sensing/autoware_pcl_extensions \\\n  --mount=type=bind,source=src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor,target=/autoware/src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor \\\n  --mount=type=bind,source=src/universe/autoware_universe/system/autoware_default_adapi_helpers/autoware_automatic_pose_initializer,target=/autoware/src/universe/autoware_universe/system/autoware_default_adapi_helpers/autoware_automatic_pose_initializer \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && source /opt/autoware/setup.bash \\\n  && /autoware/build_and_clean.sh \"${CCACHE_DIR}\" /opt/autoware\n\nFROM universe-common-devel AS universe-planning-control-devel\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\n# Install rosdep dependencies\nCOPY --from=rosdep-universe-planning-control-depend /rosdep-universe-planning-control-depend-packages.txt /tmp/rosdep-universe-planning-control-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-universe-planning-control-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=\"${CCACHE_DIR}\" \\\n  --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_control_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_control_launch \\\n  --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_planning_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_planning_launch \\\n  --mount=type=bind,source=src/universe/autoware_universe/control,target=/autoware/src/universe/autoware_universe/control \\\n  --mount=type=bind,source=src/universe/autoware_universe/planning,target=/autoware/src/universe/autoware_universe/planning \\\n  # TODO(youtalk): Remove --mount options when https://github.com/autowarefoundation/autoware_universe/issues/8805 is resolved\n  --mount=type=bind,source=src/universe/autoware_universe/evaluator/autoware_control_evaluator,target=/autoware/src/universe/autoware_universe/evaluator/autoware_control_evaluator \\\n  --mount=type=bind,source=src/universe/autoware_universe/evaluator/autoware_planning_evaluator,target=/autoware/src/universe/autoware_universe/evaluator/autoware_planning_evaluator \\\n  --mount=type=bind,source=src/universe/autoware_universe/sensing/autoware_pcl_extensions,target=/autoware/src/universe/autoware_universe/sensing/autoware_pcl_extensions \\\n  --mount=type=bind,source=src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor,target=/autoware/src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor \\\n  --mount=type=bind,source=src/universe/autoware_universe/vehicle/autoware_external_cmd_converter,target=/autoware/src/universe/autoware_universe/vehicle/autoware_external_cmd_converter \\\n  --mount=type=bind,source=src/universe/autoware_universe/vehicle/autoware_raw_vehicle_cmd_converter,target=/autoware/src/universe/autoware_universe/vehicle/autoware_raw_vehicle_cmd_converter \\\n  --mount=type=bind,source=src/universe/autoware_universe/system/autoware_command_mode_types,target=/autoware/src/universe/autoware_universe/system/autoware_command_mode_types \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && source /opt/autoware/setup.bash \\\n  && /autoware/build_and_clean.sh \"${CCACHE_DIR}\" /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM universe-common-devel AS universe-vehicle-system-devel\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\n# Install rosdep dependencies\nCOPY --from=rosdep-universe-vehicle-system-depend /rosdep-universe-vehicle-system-depend-packages.txt /tmp/rosdep-universe-vehicle-system-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-universe-vehicle-system-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=\"${CCACHE_DIR}\" \\\n  --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_vehicle_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_vehicle_launch \\\n  --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_system_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_system_launch \\\n  --mount=type=bind,source=src/universe/autoware_universe/vehicle,target=/autoware/src/universe/autoware_universe/vehicle \\\n  --mount=type=bind,source=src/universe/autoware_universe/system,target=/autoware/src/universe/autoware_universe/system \\\n  --mount=type=bind,source=src/core/autoware_core/map/autoware_map_height_fitter,target=/autoware/src/core/autoware_core/map/autoware_map_height_fitter \\\n  --mount=type=bind,source=src/universe/autoware_universe/localization/autoware_pose2twist,target=/autoware/src/universe/autoware_universe/localization/autoware_pose2twist \\\n  --mount=type=bind,source=src/universe/autoware_universe/planning/planning_validator,target=/autoware/src/universe/autoware_universe/planning/planning_validator \\\n  --mount=type=bind,source=src/sensor_component/external/sensor_component_description,target=/autoware/src/sensor_component/external/sensor_component_description \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && source /opt/autoware/setup.bash \\\n  && /autoware/build_and_clean.sh \"${CCACHE_DIR}\" /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM universe-common-devel AS universe-visualization-devel\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\n# Install rosdep dependencies\nCOPY --from=rosdep-universe-visualization-depend /rosdep-universe-visualization-depend-packages.txt /tmp/rosdep-universe-visualization-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-universe-visualization-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=\"${CCACHE_DIR}\" \\\n  --mount=type=bind,source=src/universe/autoware_universe/visualization,target=/autoware/src/universe/autoware_universe/visualization \\\n  --mount=type=bind,source=src/core/autoware_rviz_plugins,target=/autoware/src/core/autoware_rviz_plugins \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && source /opt/autoware/setup.bash \\\n  && /autoware/build_and_clean.sh \"${CCACHE_DIR}\" /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM universe-common-devel AS universe-api-devel\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\n# Install rosdep dependencies\nCOPY --from=rosdep-universe-api-depend /rosdep-universe-api-depend-packages.txt /tmp/rosdep-universe-api-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-universe-api-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=${CCACHE_DIR} \\\n  --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_autoware_api_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_autoware_api_launch \\\n  --mount=type=bind,source=src/universe/autoware_universe/system/autoware_default_adapi_universe,target=/autoware/src/universe/autoware_universe/system/autoware_default_adapi_universe \\\n  --mount=type=bind,source=src/core/autoware_core/api/autoware_adapi_adaptors,target=/autoware/src/core/autoware_core/api/autoware_adapi_adaptors \\\n  --mount=type=bind,source=src/universe/autoware_universe/system/autoware_diagnostic_graph_utils,target=/autoware/src/universe/autoware_universe/system/autoware_diagnostic_graph_utils \\\n  --mount=type=bind,source=src/core/autoware_core/map/autoware_map_height_fitter,target=/autoware/src/core/autoware_core/map/autoware_map_height_fitter \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && source /opt/autoware/setup.bash \\\n  && /autoware/build_and_clean.sh ${CCACHE_DIR} /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM universe-common-devel AS universe-devel\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\n# Install rosdep dependencies\nCOPY --from=rosdep-universe-depend /rosdep-universe-depend-packages.txt /tmp/rosdep-universe-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-universe-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\nCOPY --from=universe-sensing-perception-devel /opt/autoware /opt/autoware\nCOPY --from=universe-localization-mapping-devel /opt/autoware /opt/autoware\nCOPY --from=universe-planning-control-devel /opt/autoware /opt/autoware\nCOPY --from=universe-vehicle-system-devel /opt/autoware /opt/autoware\nCOPY --from=universe-visualization-devel /opt/autoware /opt/autoware\nCOPY --from=universe-api-devel /opt/autoware /opt/autoware\n\n# strip unneeded symbols from binaries in /opt/autoware\nRUN find /opt/autoware -type f \\( -executable -o -name \"*.so\" \\) -exec strip --strip-unneeded --remove-section=.comment --remove-section=.note {} \\;\n\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=\"${CCACHE_DIR}\" \\\n  --mount=type=bind,source=src/sensor_component,target=/autoware/src/sensor_component \\\n  --mount=type=bind,source=src/universe/autoware_universe/evaluator,target=/autoware/src/universe/autoware_universe/evaluator \\\n  --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch \\\n  --mount=type=bind,source=src/universe/autoware_universe/simulator,target=/autoware/src/universe/autoware_universe/simulator \\\n  source /opt/ros/\"$ROS_DISTRO\"/setup.bash \\\n  && source /opt/autoware/setup.bash \\\n  && /autoware/build_and_clean.sh \"${CCACHE_DIR}\" /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\nFROM universe-common-devel-cuda AS universe-devel-cuda\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\n\n# Install rosdep dependencies\nCOPY --from=rosdep-universe-depend /rosdep-universe-depend-packages.txt /tmp/rosdep-universe-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update \\\n  && cat /tmp/rosdep-universe-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_apt.sh\n\nCOPY --from=universe-devel /opt/autoware /opt/autoware\nCOPY --from=universe-sensing-perception-devel-cuda /opt/autoware /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_IMAGE AS core\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\n# Set up runtime environment\nCOPY --from=rosdep-depend /rosdep-core-exec-depend-packages.txt /tmp/rosdep-core-exec-depend-packages.txt\n# hadolint ignore=SC2002\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && apt-get update \\\n  && cat /tmp/rosdep-core-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY --from=core-devel /opt/autoware /opt/autoware\n\n# Copy bash aliases\nCOPY docker/etc/.bash_aliases /root/.bash_aliases\nRUN echo \"source /opt/autoware/setup.bash\" > /etc/bash.bashrc\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_IMAGE AS universe-sensing-perception\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\n# Set up runtime environment\nCOPY --from=rosdep-universe-sensing-perception-depend /rosdep-universe-sensing-perception-exec-depend-packages.txt /tmp/rosdep-universe-sensing-perception-exec-depend-packages.txt\n# hadolint ignore=SC2002\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && apt-get update \\\n  && cat /tmp/rosdep-universe-sensing-perception-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY --from=universe-sensing-perception-devel /opt/autoware /opt/autoware\n# TODO(youtalk): Fix https://github.com/autowarefoundation/autoware/pull/6235 workaround\nCOPY --from=universe-common-devel /opt/autoware/share/autoware_launch /opt/autoware/share/autoware_launch\n\n# Copy bash aliases\nCOPY docker/etc/.bash_aliases /root/.bash_aliases\nRUN echo \"source /opt/autoware/setup.bash\" > /etc/bash.bashrc\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_CUDA_IMAGE AS universe-sensing-perception-cuda\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\n# Set up runtime environment\nCOPY --from=rosdep-universe-sensing-perception-depend /rosdep-universe-sensing-perception-exec-depend-packages.txt /tmp/rosdep-universe-sensing-perception-exec-depend-packages.txt\n# hadolint ignore=SC2002\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && apt-get update \\\n  && cat /tmp/rosdep-universe-sensing-perception-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY --from=universe-sensing-perception-devel-cuda /opt/autoware /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_IMAGE AS universe-localization-mapping\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\n# Set up runtime environment\nCOPY --from=rosdep-universe-localization-mapping-depend /rosdep-universe-localization-mapping-exec-depend-packages.txt /tmp/rosdep-universe-localization-mapping-exec-depend-packages.txt\n# hadolint ignore=SC2002\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && apt-get update \\\n  && cat /tmp/rosdep-universe-localization-mapping-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY --from=universe-localization-mapping-devel /opt/autoware /opt/autoware\n\n# Copy bash aliases\nCOPY docker/etc/.bash_aliases /root/.bash_aliases\nRUN echo \"source /opt/autoware/setup.bash\" > /etc/bash.bashrc\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_IMAGE AS universe-planning-control\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\n# Set up runtime environment\nCOPY --from=rosdep-universe-planning-control-depend /rosdep-universe-planning-control-exec-depend-packages.txt /tmp/rosdep-universe-planning-control-exec-depend-packages.txt\n# hadolint ignore=SC2002\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && apt-get update \\\n  && cat /tmp/rosdep-universe-planning-control-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY --from=universe-planning-control-devel /opt/autoware /opt/autoware\n\n# Copy bash aliases\nCOPY docker/etc/.bash_aliases /root/.bash_aliases\nRUN echo \"source /opt/autoware/setup.bash\" > /etc/bash.bashrc\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_IMAGE AS universe-vehicle-system\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\n# Set up runtime environment\nCOPY --from=rosdep-universe-vehicle-system-depend /rosdep-universe-vehicle-system-exec-depend-packages.txt /tmp/rosdep-universe-vehicle-system-exec-depend-packages.txt\n# hadolint ignore=SC2002\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && apt-get update \\\n  && cat /tmp/rosdep-universe-vehicle-system-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY --from=universe-vehicle-system-devel /opt/autoware /opt/autoware\n\n# Copy bash aliases\nCOPY docker/etc/.bash_aliases /root/.bash_aliases\nRUN echo \"source /opt/autoware/setup.bash\" > /etc/bash.bashrc\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_IMAGE AS universe-visualization\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\n# Set up runtime environment\nCOPY --from=rosdep-universe-visualization-depend /rosdep-universe-visualization-exec-depend-packages.txt /tmp/rosdep-universe-visualization-exec-depend-packages.txt\n# hadolint ignore=SC2002\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && apt-get update \\\n  && cat /tmp/rosdep-universe-visualization-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY --from=universe-visualization-devel /opt/autoware /opt/autoware\n\n# Copy bash aliases\nCOPY docker/etc/.bash_aliases /root/.bash_aliases\nRUN echo \"source /opt/autoware/setup.bash\" > /etc/bash.bashrc\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_IMAGE AS universe-api\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\n# Set up runtime environment\nCOPY --from=rosdep-universe-api-depend /rosdep-universe-api-exec-depend-packages.txt /tmp/rosdep-universe-api-exec-depend-packages.txt\n# hadolint ignore=SC2002\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && apt-get update \\\n  && cat /tmp/rosdep-universe-api-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY --from=universe-api-devel /opt/autoware /opt/autoware\n\n# Copy bash aliases\nCOPY docker/etc/.bash_aliases /root/.bash_aliases\nRUN echo \"source /opt/autoware/setup.bash\" > /etc/bash.bashrc\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_IMAGE AS universe\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\n# Set up runtime environment\nCOPY --from=rosdep-universe-depend /rosdep-exec-depend-packages.txt /tmp/rosdep-exec-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && apt-get update \\\n  && cat /tmp/rosdep-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY --from=universe-devel /opt/autoware /opt/autoware\n\n# Copy bash aliases\nCOPY docker/etc/.bash_aliases /root/.bash_aliases\nRUN echo \"source /opt/autoware/setup.bash\" > /etc/bash.bashrc\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n\n# hadolint ignore=DL3006\nFROM $AUTOWARE_BASE_CUDA_IMAGE AS universe-cuda\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\n# Set up runtime environment\nCOPY --from=rosdep-universe-depend /rosdep-exec-depend-packages.txt /tmp/rosdep-exec-depend-packages.txt\n# hadolint ignore=SC2002,DL3009\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && apt-get update \\\n  && cat /tmp/rosdep-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY --from=universe-devel-cuda /opt/autoware /opt/autoware\n\nENTRYPOINT [\"/ros_entrypoint.sh\"]\nCMD [\"/bin/bash\"]\n"
  },
  {
    "path": "docker/Dockerfile.base",
    "content": "ARG BASE_IMAGE\n\n# hadolint ignore=DL3006\nFROM $BASE_IMAGE AS base\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\n\n# Copy files\nCOPY setup-dev-env.sh ansible-galaxy-requirements.yaml amd64.env amd64_jazzy.env arm64.env /autoware/\nCOPY ansible/ /autoware/ansible/\nCOPY docker/scripts/cleanup_apt.sh /autoware/cleanup_apt.sh\nRUN chmod +x /autoware/cleanup_apt.sh\nCOPY docker/scripts/cleanup_system.sh /autoware/cleanup_system.sh\nRUN chmod +x /autoware/cleanup_system.sh\nWORKDIR /autoware\n\n# Disable installing suggested and recommended packages\nRUN echo 'APT::Install-Recommends \"false\";' > /etc/apt/apt.conf.d/99-disable-extra-packages; \\\n    echo 'APT::Install-Suggests \"false\";' >> /etc/apt/apt.conf.d/99-disable-extra-packages\n\n# Install apt packages and add GitHub to known hosts for private repositories\nRUN rm -f /etc/apt/apt.conf.d/docker-clean \\\n  && echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' >/etc/apt/apt.conf.d/keep-cache\nRUN --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends \\\n  gosu \\\n  ssh \\\n  && /autoware/cleanup_apt.sh \\\n  && mkdir -p ~/.ssh \\\n  && ssh-keyscan github.com >> ~/.ssh/known_hosts\n\n# Set up base environment\nRUN --mount=type=ssh \\\n  --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n  ./setup-dev-env.sh -y --module base --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && /autoware/cleanup_apt.sh \\\n  && echo \"source /opt/ros/${ROS_DISTRO}/setup.bash\" > /etc/bash.bashrc\n\nENV CMAKE_PREFIX_PATH=\"/opt/acados:${CMAKE_PREFIX_PATH}\"\nENV ACADOS_SOURCE_DIR=\"/opt/acados\"\nENV LD_LIBRARY_PATH=\"/opt/acados/lib:${LD_LIBRARY_PATH}\"\n\n# Create entrypoint\nCOPY docker/etc/ros_entrypoint.sh /ros_entrypoint.sh\nRUN chmod +x /ros_entrypoint.sh\nCMD [\"/bin/bash\"]\n\nFROM base AS base-cuda\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\n\n# Set up CUDA runtime environment\n# hadolint ignore=SC2002,SC2086\nRUN --mount=type=ssh \\\n  ./setup-dev-env.sh -y --module base --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \\\n  && pipx uninstall ansible \\\n  && /autoware/cleanup_apt.sh true\n"
  },
  {
    "path": "docker/README.md",
    "content": "# Open AD Kit: containerized workloads for Autoware\n\n[Open AD Kit](https://autoware.org/open-ad-kit/) offers containers for Autoware to simplify the development and deployment of Autoware and its dependencies. This directory contains scripts to build and run the containers.\n\nDetailed instructions on how to use the containers can be found in the [Open AD Kit documentation](https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/docker-installation/).\n\n## Development containers\n\nWhen using Open AD Kit as a development container, it is easy to use Autoware's all-in-one development container image, `ghcr.io/autowarefoundation/autoware:universe-devel-cuda`.\nIf you do not need the CUDA drivers, you can also use the smaller image `ghcr.io/autowarefoundation/autoware:universe-devel`.\n\n```shell\n$ git clone git@github.com:autowarefoundation/autoware.git\n$ cd autoware\n$ vcs import src < repositories/autoware.repos\n$ docker run -it --rm \\\n  –v $PWD/src/universe/autoware_universe/XXX/autoware_YYY:/autoware/src/autoware_YYY \\\n  ghcr.io/autowarefoundation/autoware:universe-devel-cuda\n$ colcon build --mixin debug compile-commands\n$ source install/setup.bash\n$ ros2 run --prefix \"gdb -ex run --args\" autoware_YYY ZZZ\n```\n\nFor example, if you want to make modifications to [`autoware_universe/perception/autoware_bytetrack`](https://github.com/autowarefoundation/autoware_universe/tree/main/perception/autoware_bytetrack), you can execute the following commands to perform the volume mount and debug build and execution of only the `autoware_bytetrack`.\n\nNote that `gdb` is not currently installed in the development containers, but it would be installed in the near future.\n\n```shell\n$ docker run -it --rm \\\n  -v $PWD/src/universe/autoware_universe/perception/autoware_bytetrack:/autoware/src/autoware_bytetrack \\\n  ghcr.io/autowarefoundation/autoware:universe-devel-cuda\n$ root@a566e785c4d2:/autoware# colcon build --mixin debug compile-commands\nStarting >>> autoware_bytetrack\n[Processing: autoware_bytetrack]\nFinished <<< autoware_bytetrack [37.9s]\n\nSummary: 1 package finished [38.1s]\n$ root@a566e785c4d2:/autoware# source install/setup.bash\n$ root@a566e785c4d2:/autoware# apt update && apt install gdb\n$ root@a566e785c4d2:/autoware# ros2 run --prefix \"gdb -ex run --args\" autoware_bytetrack bytetrack_node_exe\nGNU gdb (Ubuntu 12.1-0ubuntu1~22.04.2) 12.1\n...\n[Thread debugging using libthread_db enabled]\n...\n[New Thread 0x7ff6f3fff640 (LWP 1205)]\nInit ByteTrack!\n```\n\n## Runtime containers\n\nIn the execution container, there is the all-in-one runtime container for Autoware, `ghcr.io/autowarefoundation/autoware:universe-cuda`, and the multi-containerized `ghcr.io/autowarefoundation/autoware:universe-***-cuda` for each component of Autoware Universe.\n\nThe all-in-one execution container also has the autoware_launch package installed, allowing it to be started in the same way as a locally built Autoware.\n\n```shell\ngit clone git@github.com:autowarefoundation/autoware.git\ncd autoware\ndocker run -it --rm ghcr.io/autowarefoundation/autoware:universe-cuda\nros2 launch autoware_launch planning_simulator.launch.xml map_path:=...\n```\n\nFor example, if you want to run the runtime container that only includes the `sensing/perception` components, you can execute it as follows.\n\n```shell\ndocker run -it --rm ghcr.io/autowarefoundation/autoware:universe-sensing-perception-cuda\nros2 launch autoware_pointcloud_preprocessor preprocessor.launch.xml\n```\n\n## Multi-stage Dockerfile structure\n\n<!-- cspell:disable-next-line -->\n<!-- dockerfilegraph -f docker/Dockerfile -o svg --legend --concentrate --nodesep 0.3 --unflatten 4 -m 50 -e solid -->\n\n![](./Dockerfile.svg)\n\nThe suffix `-devel` (e.g. `universe-devel`) is intended for use as a [development container](https://containers.dev). On the other hand, those without the `-devel` suffix (e.g. `universe`) are intended to be used as a runtime container.\n\n### `$BASE_IMAGE`\n\nThis is a base image of this Dockerfile. [`ros:humble-ros-base-jammy`](https://hub.docker.com/_/ros/tags?page=&page_size=&ordering=&name=humble-ros-base-jammy) will be given.\n\n### `$AUTOWARE_BASE_IMAGE` (from Dockerfile.base)\n\nThis stage performs only the basic setup required for all Autoware images.\n\n### `$AUTOWARE_BASE_CUDA_IMAGE` (from Dockerfile.base)\n\nThis stage is built on top of `$AUTOWARE_BASE_IMAGE` and adds the CUDA runtime environment and artifacts.\n\n### `rosdep-depend`\n\nThe ROS dependency package list files will be generated.\nThese files will be used in the subsequent stages:\n\n- `core-common-devel`\n- `core-devel`\n- `core`\n- `universe-common`\n- `universe-COMPONENT-devel` (e.g. `universe-sensing-perception-devel`)\n- `universe-COMPONENT` (e.g. `universe-sensing-perception`)\n- `universe-devel`\n- `universe`\n\nBy generating only the package list files and copying them to the subsequent stages, the dependency packages will not be reinstalled during the container build process unless the dependency packages change.\n\n### `core-common-devel`\n\nThis stage installs the dependency packages based on `/rosdep-core-common-depend-packages.txt` and builds the packages under the `core` directory of `autoware.repos` except for `autoware_core`.\n\n### `core-devel`\n\nThis stage installs the dependency packages based on `/rosdep-core-depend-packages.txt` and builds the `autoware_core` packages.\n\n### `core`\n\nThis stage is an Autoware Core runtime container. It only includes the dependencies given by `/rosdep-core-exec-depend-packages.txt` and the binaries built in the `core-devel` stage.\n\n### `universe-common-devel`\n\nThis stage installs the dependency packages based on `/rosdep-universe-common-depend-packages.txt` and builds the packages under the following directories of `autoware.repos`:\n\n- `universe/external`\n- `universe/autoware_universe/common`\n- `middleware/external`\n\n### `universe-common-devel-cuda`\n\nThis stage is built on top of `universe-common-devel` and installs the CUDA development environment.\n\n### `universe-sensing-perception-devel`\n\nThis stage installs the dependency packages based on `/rosdep-universe-sensing-perception-depend-packages.txt` and builds the non-CUDA related packages under the following directories of `autoware.repos`:\n\n- `universe/autoware_universe/perception`\n- `universe/autoware_universe/sensing`\n\n### `universe-sensing-perception-devel-cuda`\n\nThis stage copies the non-CUDA related binaries built in the `universe-sensing-perception-devel` stage and builds the CUDA related packages under the following directories of `autoware.repos`:\n\n- `universe/autoware_universe/perception`\n- `universe/autoware_universe/sensing`\n\n### `universe-sensing-perception`\n\nThis stage is an Autoware Universe Sensing/Perception runtime container. It only includes the dependencies given by `/rosdep-universe-sensing-perception-exec-depend-packages.txt` and the binaries built in the `universe-sensing-perception-devel` stage.\n\n### `universe-sensing-perception-cuda`\n\nThis stage installs the CUDA runtime environment and copies the binaries built in the `universe-sensing-perception-devel-cuda` stage.\n\n### `universe-visualization-devel`\n\nThis stage installs the dependency packages based on `/rosdep-universe-visualization-depend-packages.txt` and builds the visualization packages.\n\n### `universe-visualization`\n\nThis stage is a Autoware Universe Visualization runtime container. It only includes the dependencies given by `/rosdep-universe-visualization-exec-depend-packages.txt` and the binaries built in the `universe-visualization-devel` stage.\n\n### `universe-localization-mapping-devel`\n\nThis stage installs the dependency packages based on `/rosdep-universe-localization-mapping-depend-packages.txt` and builds the packages under the following directories of `autoware.repos`:\n\n- `universe/autoware_universe/localization`\n- `universe/autoware_universe/map`\n\n### `universe-localization-mapping`\n\nThis stage is an Autoware Universe Localization/Mapping runtime container. It only includes the dependencies given by `/rosdep-universe-localization-mapping-exec-depend-packages.txt` and the binaries built in the `universe-localization-mapping-devel` stage.\n\n### `universe-planning-control-devel`\n\nThis stage installs the dependency packages based on `/rosdep-universe-planning-control-depend-packages.txt` and builds the packages under the following directories of `autoware.repos`:\n\n- `universe/autoware_universe/control`\n- `universe/autoware_universe/planning`\n\n### `universe-planning-control`\n\nThis stage is an Autoware Universe Planning/Control runtime container. It only includes the dependencies given by `/rosdep-universe-planning-control-exec-depend-packages.txt` and the binaries built in the `universe-planning-control-devel` stage.\n\n### `universe-vehicle-system-devel`\n\nThis stage installs the dependency packages based on `/rosdep-universe-vehicle-system-depend-packages.txt` and builds the packages under the following directories of `autoware.repos`:\n\n- `universe/autoware_universe/vehicle`\n- `universe/autoware_universe/system`\n\n### `universe-vehicle-system`\n\nThis stage is an Autoware Universe Vehicle/System runtime container. It only includes the dependencies given by `/rosdep-universe-vehicle-system-exec-depend-packages.txt` and the binaries built in the `universe-vehicle-system-devel` stage.\n\n### `universe-api-devel`\n\nThis stage installs the dependency packages based on `/rosdep-universe-api-depend-packages.txt` and builds the API packages.\n\n### `universe-api`\n\nThis stage is a Autoware Universe API runtime container. It only includes the dependencies given by `/rosdep-universe-api-exec-depend-packages.txt` and the binaries built in the `universe-api-devel` stage.\n\n### `universe-devel`\n\nThis stage installs the dependency packages based on `/rosdep-universe-depend-packages.txt` and copies the binaries built in the following stages:\n\n- `universe-sensing-perception-devel`\n- `universe-localization-mapping-devel`\n- `universe-planning-control-devel`\n- `universe-vehicle-system-devel`\n- `universe-visualization-devel`\n- `universe-api-devel`\n\nThen it builds the remaining packages of `autoware.repos`:\n\n- `launcher`\n- `param`\n- `sensor_component`\n- `sensor_kit`\n- `universe/autoware_universe/evaluator`\n- `universe/autoware_universe/launch`\n- `universe/autoware_universe/simulator`\n- `universe/autoware_universe/tools`\n- `vehicle`\n\nThis stage provides an all-in-one development container to Autoware developers. By running the host's source code with volume mounting, it allows for easy building and debugging of Autoware.\n\n### `universe-devel-cuda`\n\nThis stage installs the CUDA development environment and copies the binaries built in the `universe-sensing-perception-devel-cuda` stage to the `universe-devel` stage.\n\n### `universe`\n\nThis stage is an Autoware Universe runtime container. It only includes the dependencies given by `/rosdep-exec-depend-packages.txt` and the binaries built in the `universe-devel` stage.\n\n### `universe-cuda`\n\nThis stage installs the CUDA runtime environment and copies the binaries built in the `universe-devel-cuda` stage.\n"
  },
  {
    "path": "docker/build.sh",
    "content": "#!/usr/bin/env bash\n\nset -e\n\n# Function to print help message\nprint_help() {\n    echo \"Usage: build.sh [OPTIONS]\"\n    echo \"Options:\"\n    echo \"  --help          Display this help message\"\n    echo \"  -h              Display this help message\"\n    echo \"  --no-cuda       Disable CUDA support\"\n    echo \"  --platform      Specify the platform (default: current platform)\"\n    echo \"  --devel-only    Build devel image only\"\n    echo \"  --target        Specify the target image (default: universe or universe-devel if --devel-only is set)\"\n    echo \"  --ros-distro    Specify ROS distribution (humble or jazzy, default: humble)\"\n    echo \"\"\n    echo \"Note: The --platform option should be one of 'linux/amd64' or 'linux/arm64'.\"\n}\n\nSCRIPT_DIR=$(readlink -f \"$(dirname \"$0\")\")\nWORKSPACE_ROOT=\"$SCRIPT_DIR/..\"\n\n# Parse arguments\nparse_arguments() {\n    while [ \"$1\" != \"\" ]; do\n        case \"$1\" in\n        --help | -h)\n            print_help\n            exit 1\n            ;;\n        --no-cuda)\n            option_no_cuda=true\n            ;;\n        --platform)\n            option_platform=\"$2\"\n            shift\n            ;;\n        --devel-only)\n            option_devel_only=true\n            ;;\n        --target)\n            option_target=\"$2\"\n            shift\n            ;;\n        --ros-distro)\n            option_ros_distro=\"$2\"\n            shift\n            ;;\n        *)\n            echo \"Unknown option: $1\"\n            print_help\n            exit 1\n            ;;\n        esac\n        shift\n    done\n}\n\n# Set ROS distribution\nset_ros_distro() {\n    if [ -n \"$option_ros_distro\" ]; then\n        ros_distro=\"$option_ros_distro\"\n    else\n        ros_distro=\"humble\"\n    fi\n}\n\n# Set CUDA options\nset_cuda_options() {\n    if [ \"$option_no_cuda\" = \"true\" ]; then\n        setup_args=\"--no-nvidia\"\n        image_name_suffix=\"\"\n    else\n        image_name_suffix=\"-cuda\"\n    fi\n}\n\n# Note: Image tags are loaded from env files (amd64.env or amd64_jazzy.env)\n# via the load_env() function, which sets $autoware_base_image and $autoware_base_cuda_image\n\n# Set build options\nset_build_options() {\n    if [ -n \"$option_target\" ]; then\n        target=\"$option_target\"\n        image_name_suffix=\"\"\n    else\n        if [ \"$option_devel_only\" = \"true\" ]; then\n            target=\"universe-devel\"\n        else\n            target=\"universe\"\n        fi\n    fi\n}\n\n# Set platform\nset_platform() {\n    if [ -n \"$option_platform\" ]; then\n        platform=\"$option_platform\"\n    else\n        platform=\"linux/amd64\"\n        if [ \"$(uname -m)\" = \"aarch64\" ]; then\n            platform=\"linux/arm64\"\n        fi\n    fi\n}\n\n# Set arch lib dir\nset_arch_lib_dir() {\n    if [ \"$platform\" = \"linux/arm64\" ]; then\n        lib_dir=\"aarch64\"\n    elif [ \"$platform\" = \"linux/amd64\" ]; then\n        lib_dir=\"x86_64\"\n    else\n        echo \"Unsupported platform: $platform\"\n        exit 1\n    fi\n}\n\n# Load env\nload_env() {\n    if [ \"$ros_distro\" = \"humble\" ]; then\n        source \"$WORKSPACE_ROOT/amd64.env\"\n    else\n        source \"$WORKSPACE_ROOT/amd64_jazzy.env\"\n    fi\n    if [ \"$platform\" = \"linux/arm64\" ]; then\n        source \"$WORKSPACE_ROOT/arm64.env\"\n    fi\n}\n\n# Clone repositories\nclone_repositories() {\n    cd \"$WORKSPACE_ROOT\"\n    if [ ! -d \"src\" ]; then\n        mkdir -p src\n        vcs import src <repositories/autoware.repos\n    else\n        echo \"Source directory already exists. Updating repositories...\"\n        vcs import src <repositories/autoware.repos\n        vcs pull src\n    fi\n}\n\n# Build images\nbuild_images() {\n    # https://github.com/docker/buildx/issues/484\n    export BUILDKIT_STEP_LOG_MAX_SIZE=10000000\n\n    echo \"Building images for platform: $platform\"\n    echo \"ROS distro: $rosdistro\"\n    echo \"Base image: $base_image\"\n    echo \"Setup args: $setup_args\"\n    echo \"Lib dir: $lib_dir\"\n    echo \"Image name suffix: $image_name_suffix\"\n    echo \"Target: $target\"\n\n    set -x\n    docker buildx bake --allow=ssh --load --progress=plain -f \"$SCRIPT_DIR/docker-bake-base.hcl\" \\\n        --set \"*.context=$WORKSPACE_ROOT\" \\\n        --set \"*.ssh=default\" \\\n        --set \"*.platform=$platform\" \\\n        --set \"*.args.ROS_DISTRO=$rosdistro\" \\\n        --set \"*.args.BASE_IMAGE=$base_image\" \\\n        --set \"*.args.SETUP_ARGS=$setup_args\" \\\n        --set \"*.args.LIB_DIR=$lib_dir\" \\\n        --set \"base.tags=$autoware_base_image\" \\\n        --set \"base-cuda.tags=$autoware_base_cuda_image\"\n    docker buildx bake --allow=ssh --load --progress=plain -f \"$SCRIPT_DIR/docker-bake.hcl\" -f \"$SCRIPT_DIR/docker-bake-cuda.hcl\" \\\n        --set \"*.context=$WORKSPACE_ROOT\" \\\n        --set \"*.ssh=default\" \\\n        --set \"*.platform=$platform\" \\\n        --set \"*.args.ROS_DISTRO=$rosdistro\" \\\n        --set \"*.args.AUTOWARE_BASE_IMAGE=$autoware_base_image\" \\\n        --set \"*.args.AUTOWARE_BASE_CUDA_IMAGE=$autoware_base_cuda_image\" \\\n        --set \"*.args.SETUP_ARGS=$setup_args\" \\\n        --set \"*.args.LIB_DIR=$lib_dir\" \\\n        --set \"universe-sensing-perception-devel.tags=ghcr.io/autowarefoundation/autoware:universe-sensing-perception-devel\" \\\n        --set \"universe-sensing-perception.tags=ghcr.io/autowarefoundation/autoware:universe-sensing-perception\" \\\n        --set \"universe-localization-mapping-devel.tags=ghcr.io/autowarefoundation/autoware:universe-localization-mapping-devel\" \\\n        --set \"universe-localization-mapping.tags=ghcr.io/autowarefoundation/autoware:universe-localization-mapping\" \\\n        --set \"universe-planning-control-devel.tags=ghcr.io/autowarefoundation/autoware:universe-planning-control-devel\" \\\n        --set \"universe-planning-control.tags=ghcr.io/autowarefoundation/autoware:universe-planning-control\" \\\n        --set \"universe-vehicle-system-devel.tags=ghcr.io/autowarefoundation/autoware:universe-vehicle-system-devel\" \\\n        --set \"universe-vehicle-system.tags=ghcr.io/autowarefoundation/autoware:universe-vehicle-system\" \\\n        --set \"universe-visualization-devel.tags=ghcr.io/autowarefoundation/autoware:universe-visualization-devel\" \\\n        --set \"universe-visualization.tags=ghcr.io/autowarefoundation/autoware:universe-visualization\" \\\n        --set \"universe-devel.tags=ghcr.io/autowarefoundation/autoware:universe-devel\" \\\n        --set \"universe.tags=ghcr.io/autowarefoundation/autoware:universe\" \\\n        --set \"universe-sensing-perception-devel-cuda.tags=ghcr.io/autowarefoundation/autoware:universe-sensing-perception-devel-cuda\" \\\n        --set \"universe-sensing-perception-cuda.tags=ghcr.io/autowarefoundation/autoware:universe-sensing-perception-cuda\" \\\n        --set \"universe-devel-cuda.tags=ghcr.io/autowarefoundation/autoware:universe-devel-cuda\" \\\n        --set \"universe-cuda.tags=ghcr.io/autowarefoundation/autoware:universe-cuda\" \\\n        \"$target$image_name_suffix\"\n    set +x\n}\n\n# Remove dangling images\nremove_dangling_images() {\n    docker image prune -f\n}\n\n# Main script execution\nparse_arguments \"$@\"\nset_ros_distro\nset_cuda_options\nset_build_options\nset_platform\nset_arch_lib_dir\nload_env\nclone_repositories\nbuild_images\nremove_dangling_images\n"
  },
  {
    "path": "docker/docker-bake-base.hcl",
    "content": "group \"default\" {\n  targets = [\n    \"base\",\n    \"base-cuda\"\n  ]\n}\n\n// For docker/metadata-action\ntarget \"docker-metadata-action-base\" {}\ntarget \"docker-metadata-action-base-cuda\" {}\n\ntarget \"base\" {\n  inherits = [\"docker-metadata-action-base\"]\n  dockerfile = \"docker/Dockerfile.base\"\n  target = \"base\"\n}\n\ntarget \"base-cuda\" {\n  inherits = [\"docker-metadata-action-base-cuda\"]\n  dockerfile = \"docker/Dockerfile.base\"\n  target = \"base-cuda\"\n}\n"
  },
  {
    "path": "docker/docker-bake-cuda.hcl",
    "content": "group \"default\" {\n  targets = [\n    \"universe-common-devel-cuda\",\n    \"universe-sensing-perception-devel-cuda\",\n    \"universe-sensing-perception-cuda\",\n    \"universe-devel-cuda\",\n    \"universe-cuda\"\n  ]\n}\n\n// For docker/metadata-action\ntarget \"docker-metadata-action-universe-common-devel-cuda\" {}\ntarget \"docker-metadata-action-universe-sensing-perception-devel-cuda\" {}\ntarget \"docker-metadata-action-universe-sensing-perception-cuda\" {}\ntarget \"docker-metadata-action-universe-devel-cuda\" {}\ntarget \"docker-metadata-action-universe-cuda\" {}\n\ntarget \"universe-common-devel-cuda\" {\n  inherits = [\"docker-metadata-action-universe-common-devel-cuda\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-common-devel-cuda\"\n}\n\ntarget \"universe-sensing-perception-devel-cuda\" {\n  inherits = [\"docker-metadata-action-universe-sensing-perception-devel-cuda\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-sensing-perception-devel-cuda\"\n}\n\ntarget \"universe-sensing-perception-cuda\" {\n  inherits = [\"docker-metadata-action-universe-sensing-perception-cuda\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-sensing-perception-cuda\"\n}\n\ntarget \"universe-devel-cuda\" {\n  inherits = [\"docker-metadata-action-universe-devel-cuda\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-devel-cuda\"\n}\n\ntarget \"universe-cuda\" {\n  inherits = [\"docker-metadata-action-universe-cuda\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-cuda\"\n}\n"
  },
  {
    "path": "docker/docker-bake.hcl",
    "content": "group \"default\" {\n  targets = [\n    \"core-common-devel\",\n    \"core\",\n    \"core-devel\",\n    \"universe-common-devel\",\n    \"universe-sensing-perception-devel\",\n    \"universe-sensing-perception\",\n    \"universe-localization-mapping-devel\",\n    \"universe-localization-mapping\",\n    \"universe-planning-control-devel\",\n    \"universe-planning-control\",\n    \"universe-vehicle-system-devel\",\n    \"universe-vehicle-system\",\n    \"universe-visualization-devel\",\n    \"universe-visualization\",\n    \"universe-api-devel\",\n    \"universe-api\",\n    \"universe-devel\",\n    \"universe\"\n  ]\n}\n\n// For docker/metadata-action\ntarget \"docker-metadata-action-core-common-devel\" {}\ntarget \"docker-metadata-action-core\" {}\ntarget \"docker-metadata-action-core-devel\" {}\ntarget \"docker-metadata-action-universe-common-devel\" {}\ntarget \"docker-metadata-action-universe-sensing-perception-devel\" {}\ntarget \"docker-metadata-action-universe-sensing-perception\" {}\ntarget \"docker-metadata-action-universe-localization-mapping-devel\" {}\ntarget \"docker-metadata-action-universe-localization-mapping\" {}\ntarget \"docker-metadata-action-universe-planning-control-devel\" {}\ntarget \"docker-metadata-action-universe-planning-control\" {}\ntarget \"docker-metadata-action-universe-vehicle-system-devel\" {}\ntarget \"docker-metadata-action-universe-vehicle-system\" {}\ntarget \"docker-metadata-action-universe-visualization-devel\" {}\ntarget \"docker-metadata-action-universe-visualization\" {}\ntarget \"docker-metadata-action-universe-api-devel\" {}\ntarget \"docker-metadata-action-universe-api\" {}\ntarget \"docker-metadata-action-universe-devel\" {}\ntarget \"docker-metadata-action-universe\" {}\n\ntarget \"core-common-devel\" {\n  inherits = [\"docker-metadata-action-core-common-devel\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"core-common-devel\"\n}\n\ntarget \"core\" {\n  inherits = [\"docker-metadata-action-core\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"core\"\n}\n\ntarget \"core-devel\" {\n  inherits = [\"docker-metadata-action-core-devel\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"core-devel\"\n}\n\ntarget \"universe-common-devel\" {\n  inherits = [\"docker-metadata-action-universe-common-devel\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-common-devel\"\n}\n\ntarget \"universe-sensing-perception-devel\" {\n  inherits = [\"docker-metadata-action-universe-sensing-perception-devel\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-sensing-perception-devel\"\n}\n\ntarget \"universe-sensing-perception\" {\n  inherits = [\"docker-metadata-action-universe-sensing-perception\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-sensing-perception\"\n}\n\ntarget \"universe-localization-mapping-devel\" {\n  inherits = [\"docker-metadata-action-universe-localization-mapping-devel\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-localization-mapping-devel\"\n}\n\ntarget \"universe-localization-mapping\" {\n  inherits = [\"docker-metadata-action-universe-localization-mapping\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-localization-mapping\"\n}\n\ntarget \"universe-planning-control-devel\" {\n  inherits = [\"docker-metadata-action-universe-planning-control-devel\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-planning-control-devel\"\n}\n\ntarget \"universe-planning-control\" {\n  inherits = [\"docker-metadata-action-universe-planning-control\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-planning-control\"\n}\n\ntarget \"universe-vehicle-system-devel\" {\n  inherits = [\"docker-metadata-action-universe-vehicle-system-devel\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-vehicle-system-devel\"\n}\n\ntarget \"universe-vehicle-system\" {\n  inherits = [\"docker-metadata-action-universe-vehicle-system\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-vehicle-system\"\n}\n\ntarget \"universe-visualization-devel\" {\n  inherits = [\"docker-metadata-action-universe-visualization-devel\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-visualization-devel\"\n}\n\ntarget \"universe-visualization\" {\n  inherits = [\"docker-metadata-action-universe-visualization\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-visualization\"\n}\n\ntarget \"universe-api-devel\" {\n  inherits = [\"docker-metadata-action-universe-api-devel\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-api-devel\"\n}\n\ntarget \"universe-api\" {\n  inherits = [\"docker-metadata-action-universe-api\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-api\"\n}\n\ntarget \"universe-devel\" {\n  inherits = [\"docker-metadata-action-universe-devel\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe-devel\"\n}\n\ntarget \"universe\" {\n  inherits = [\"docker-metadata-action-universe\"]\n  dockerfile = \"docker/Dockerfile\"\n  target = \"universe\"\n}\n"
  },
  {
    "path": "docker/docker-compose.gpu.yaml",
    "content": "services:\n  sensing-perception:\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              count: all\n              capabilities: [gpu]\n"
  },
  {
    "path": "docker/docker-compose.yaml",
    "content": "services:\n  map:\n    image: ghcr.io/autowarefoundation/autoware:universe-localization-mapping\n    container_name: autoware-map\n    init: true\n    ipc: host\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n    volumes:\n      - ${MAP_PATH}:/autoware_map:ro\n    network_mode: host\n    command: >\n      ros2 launch autoware_launch tier4_map_component.launch.xml\n      lanelet2_map_file:=${LANELET2_MAP_FILE}\n      map_path:=/autoware_map\n      pointcloud_map_file:=${POINTCLOUD_MAP_FILE}\n      use_sim_time:=${USE_SIM_TIME}\n      vehicle_model:=${VEHICLE_MODEL}\n    restart: on-failure\n\n  planning:\n    image: ghcr.io/autowarefoundation/autoware:universe-planning-control\n    container_name: autoware-planning\n    pid: service:map\n    ipc: host\n    init: true\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n    network_mode: host\n    depends_on:\n      - map\n    command: >\n      ros2 launch autoware_launch tier4_planning_component.launch.xml\n      component_wise_launch:=true\n      enable_all_modules_auto_mode:=${ENABLE_ALL_MODULES_AUTO_MODE}\n      is_simulation:=${IS_SIMULATION_MODE}\n      module_preset:=${PLANNING_MODULE_PRESET}\n      pointcloud_container_name:=${POINTCLOUD_CONTAINER_NAME}\n      use_sim_time:=${USE_SIM_TIME}\n      vehicle_model:=${VEHICLE_MODEL}\n    restart: on-failure\n\n  control:\n    image: ghcr.io/autowarefoundation/autoware:universe-planning-control\n    container_name: autoware-control\n    pid: service:map\n    ipc: host\n    init: true\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n    network_mode: host\n    depends_on:\n      - map\n      - planning\n      - system\n    command: >\n      ros2 launch autoware_launch tier4_control_component.launch.xml\n      check_external_emergency_heartbeat:=${CHECK_EXTERNAL_EMERGENCY_HEARTBEAT}\n      component_wise_launch:=true\n      lateral_controller_mode:=${LATERAL_CONTROLLER_MODE}\n      longitudinal_controller_mode:=${LONGITUDINAL_CONTROLLER_MODE}\n      module_preset:=${CONTROL_MODULE_PRESET}\n      use_sim_time:=${USE_SIM_TIME}\n      vehicle_id:=${VEHICLE_ID}\n      vehicle_model:=${VEHICLE_MODEL}\n    restart: on-failure\n\n  vehicle:\n    image: ghcr.io/autowarefoundation/autoware:universe-vehicle-system\n    container_name: autoware-vehicle\n    pid: service:map\n    ipc: host\n    init: true\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n    network_mode: host\n    depends_on:\n      - map\n    command: >\n      ros2 launch tier4_vehicle_launch vehicle.launch.xml\n      launch_vehicle_interface:=${LAUNCH_VEHICLE_INTERFACE}\n      raw_vehicle_cmd_converter_param_path:=/opt/autoware/share/autoware_launch/config/vehicle/raw_vehicle_cmd_converter/raw_vehicle_cmd_converter.param.yaml\n      sensor_model:=${SENSOR_MODEL}\n      use_sim_time:=${USE_SIM_TIME}\n      vehicle_id:=${VEHICLE_ID}\n      vehicle_model:=${VEHICLE_MODEL}\n    restart: on-failure\n\n  system:\n    image: ghcr.io/autowarefoundation/autoware:universe-vehicle-system\n    container_name: autoware-system\n    pid: service:map\n    ipc: host\n    init: true\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n    network_mode: host\n    depends_on:\n      - map\n    command: >\n      ros2 launch autoware_launch tier4_system_component.launch.xml\n      launch_system_monitor:=${LAUNCH_SYSTEM_MONITOR}\n      launch_dummy_diag_publisher:=${LAUNCH_DUMMY_DIAG_PUBLISHER}\n      sensor_model:=${SENSOR_MODEL}\n      system_run_mode:=${SYSTEM_RUN_MODE}\n      use_sim_time:=${USE_SIM_TIME}\n      vehicle_model:=${VEHICLE_MODEL}\n    restart: on-failure\n\n  sensing-perception:\n    image: ${SENSING_PERCEPTION_IMAGE}\n    container_name: autoware-sensing-perception\n    pid: service:map\n    ipc: host\n    init: true\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n    volumes:\n      - ${DATA_PATH}:/autoware_data:rw\n    network_mode: host\n    depends_on:\n      - map\n      - system\n    command: >\n      bash -c \"\n      ros2 launch autoware_launch tier4_sensing_component.launch.xml\n      launch_pointcloud_container:=${LAUNCH_POINTCLOUD_CONTAINER_SENSING}\n      launch_sensing_driver:=${LAUNCH_SENSING_DRIVER}\n      pointcloud_container_name:=${POINTCLOUD_CONTAINER_NAME}\n      sensor_model:=${SENSOR_MODEL}\n      use_sim_time:=${USE_SIM_TIME}\n      vehicle_model:=${VEHICLE_MODEL} &\n      ros2 launch autoware_launch tier4_perception_component.launch.xml\n      data_path:=/autoware_data\n      launch_pointcloud_container:=${LAUNCH_POINTCLOUD_CONTAINER_PERCEPTION}\n      lidar_detection_model:=${LIDAR_DETECTION_MODEL}\n      occupancy_grid_map_method:=${OCCUPANCY_GRID_MAP_METHOD}\n      perception_mode:=${PERCEPTION_MODE}\n      pointcloud_container_name:=${POINTCLOUD_CONTAINER_NAME}\n      use_sim_time:=${USE_SIM_TIME}\n      vehicle_model:=${VEHICLE_MODEL}\n      \"\n    restart: on-failure\n    profiles:\n      - logging-simulation\n\n  localization:\n    image: ghcr.io/autowarefoundation/autoware:universe-localization-mapping\n    container_name: autoware-localization\n    pid: service:map\n    ipc: host\n    init: true\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n    network_mode: host\n    depends_on:\n      - map\n      - system\n      - sensing-perception\n    command: >\n      ros2 launch autoware_launch tier4_localization_component.launch.xml\n      system_run_mode:=${SYSTEM_RUN_MODE}\n      use_sim_time:=${USE_SIM_TIME}\n      vehicle_model:=${VEHICLE_MODEL}\n    restart: on-failure\n    profiles:\n      - logging-simulation\n\n  simulator:\n    image: ghcr.io/autowarefoundation/autoware-tools:scenario-simulator\n    container_name: autoware-simulator\n    pid: service:map\n    ipc: host\n    init: true\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n    network_mode: host\n    depends_on:\n      - map\n      - system\n      - vehicle\n    command: >\n      ros2 launch autoware_launch tier4_simulator_component.launch.xml\n      initial_engage_state:=${INITIAL_ENGAGE_STATE}\n      launch_dummy_doors:=${LAUNCH_DUMMY_DOORS}\n      launch_dummy_perception:=${LAUNCH_DUMMY_PERCEPTION}\n      launch_dummy_vehicle:=${LAUNCH_DUMMY_VEHICLE}\n      launch_scenario_simulator_v2_adapter:=${LAUNCH_SCENARIO_SIMULATOR_V2_ADAPTER}\n      localization_sim_mode:=${LOCALIZATION_SIM_MODE}\n      perception/enable_detection_failure:=${PERCEPTION_ENABLE_DETECTION_FAILURE}\n      perception/enable_object_recognition:=${PERCEPTION_ENABLE_OBJECT_RECOGNITION}\n      perception/enable_traffic_light:=${PERCEPTION_ENABLE_TRAFFIC_LIGHT}\n      perception/use_base_link_z:=${PERCEPTION_USE_BASE_LINK_Z}\n      raw_vehicle_cmd_converter_param_path:=/opt/autoware/share/autoware_launch/config/vehicle/raw_vehicle_cmd_converter/raw_vehicle_cmd_converter.param.yaml\n      scenario_simulation:=${SCENARIO_SIMULATION}\n      sensing/visible_range:=${SENSING_VISIBLE_RANGE}\n      use_sim_time:=${USE_SIM_TIME}\n      use_pointcloud_container:=${USE_POINTCLOUD_CONTAINER}\n      vehicle_info_param_file:=/opt/autoware/share/${VEHICLE_MODEL}_description/config/vehicle_info.param.yaml\n      vehicle_model:=${VEHICLE_MODEL}\n    restart: on-failure\n    profiles:\n      - planning-simulation\n\n  api:\n    image: ghcr.io/autowarefoundation/autoware:universe-api\n    container_name: autoware-api\n    pid: service:map\n    ipc: host\n    init: true\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n    network_mode: host\n    depends_on:\n      - map\n    command: >\n      ros2 launch autoware_launch tier4_autoware_api_component.launch.xml\n      component_wise_launch:=true\n      scenario_simulation:=${SCENARIO_SIMULATION}\n      use_sim_time:=${USE_SIM_TIME}\n      vehicle_model:=${VEHICLE_MODEL}\n    restart: on-failure\n\n  visualization:\n    image: ghcr.io/autowarefoundation/autoware-tools:visualizer\n    container_name: autoware-visualization\n    pid: service:map\n    ipc: host\n    init: true\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n      - REMOTE_DISPLAY=${REMOTE_DISPLAY}\n      - USE_SIM_TIME=${USE_SIM_TIME}\n    ports:\n      - 6080:6080\n    network_mode: host\n    restart: \"no\"\n    profiles:\n      - visualization\n\n  rosbag:\n    image: ghcr.io/autowarefoundation/autoware:universe\n    container_name: autoware-rosbag\n    ipc: host\n    init: true\n    environment:\n      - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp\n      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID}\n    volumes:\n      - ${ROSBAG_PATH}:/autoware_map/rosbag:ro\n    network_mode: host\n    command: >\n      bash -c \"ros2 bag info /autoware_map/rosbag -s ${ROSBAG_FORMAT} &&\n      ros2 bag play /autoware_map/rosbag -r ${ROSBAG_RATE} -s ${ROSBAG_FORMAT}\"\n    restart: \"no\"\n    profiles:\n      - rosbag\n"
  },
  {
    "path": "docker/etc/.bash_aliases",
    "content": "#!/bin/bash\n\n# planning simulation\nfunction download_planning_map() {\n    if [ ! -f ~/autoware_map/sample-map-planning.zip ]; then\n        gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1499_nsbUbIeturZaDj7jhUownh5fvXHd'\n        unzip -d ~/autoware_map ~/autoware_map/sample-map-planning.zip\n    fi\n}\nalias awf-launch-planning-sim='download_planning_map&&ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit'\n\n# rosbag replay simulation\nfunction download_rosbag_map() {\n    if [ ! -f ~/autoware_map/sample-map-rosbag.zip ]; then\n        gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1A-8BvYRX3DhSzkAnOcGWFw5T30xTlwZI'\n        unzip -d ~/autoware_map/ ~/autoware_map/sample-map-rosbag.zip\n    fi\n}\nalias awf-launch-sample-rosbag-sim='download_rosbag_artifacts&&download_rosbag_map&&ros2 launch autoware_launch logging_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-rosbag vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit'\n\n# play sample rosbag\nfunction download_rosbag_file() {\n    if [ ! -f ~/autoware_map/sample-rosbag.zip ]; then\n        gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1VnwJx9tI3kI_cTLzP61ktuAJ1ChgygpG'\n        unzip -d ~/autoware_map/ ~/autoware_map/sample-rosbag.zip\n    fi\n}\nalias awf-play-sample-rosbag='download_rosbag_file&&ros2 bag play ~/autoware_map/sample-rosbag/sample.db3 -r 0.35 -s sqlite3'\n"
  },
  {
    "path": "docker/etc/ros_entrypoint.sh",
    "content": "#!/usr/bin/env bash\n# shellcheck disable=SC1090,SC1091\n\n# Get the user ID and group ID of the local user\nUSER_ID=${LOCAL_UID}\nUSER_NAME=${LOCAL_USER}\nGROUP_ID=${LOCAL_GID}\nGROUP_NAME=${LOCAL_GROUP}\n\n# Check if any of the variables are empty\nif [[ -z $USER_ID || -z $USER_NAME || -z $GROUP_ID || -z $GROUP_NAME ]]; then\n    source \"/opt/ros/$ROS_DISTRO/setup.bash\"\n    source /opt/autoware/setup.bash\n    exec \"$@\"\nelse\n    echo \"Starting with user: $USER_NAME >> UID $USER_ID, GID: $GROUP_ID\"\n\n    # Create group and user with GID/UID\n    groupadd -g \"$GROUP_ID\" \"$GROUP_NAME\"\n    useradd -u \"$USER_ID\" -g \"$GROUP_ID\" -s /bin/bash -m -d /home/\"$USER_NAME\" \"$USER_NAME\"\n\n    # Add sudo privileges to the user\n    echo \"$USER_NAME ALL=(ALL) NOPASSWD:ALL\" >>/etc/sudoers\n\n    # Source ROS 2\n    # hadolint ignore=SC1090\n    source \"/opt/ros/$ROS_DISTRO/setup.bash\"\n    source /opt/autoware/setup.bash\n\n    # Add symlink for autoware_data if directory exists\n    if [ -d /autoware_data ]; then\n        ln -s /autoware_data /home/\"$USER_NAME\"/autoware_data\n        echo \"Linked /autoware_data to /home/$USER_NAME/autoware_data\"\n    fi\n\n    # Execute the command as the user\n    exec /usr/sbin/gosu \"$USER_NAME\" \"$@\"\nfi\n"
  },
  {
    "path": "docker/logging-simulation.env",
    "content": "# ROS settings\nROS_DOMAIN_ID=1\nUSE_SIM_TIME=true\n\n# Common settings\nPOINTCLOUD_CONTAINER_NAME=pointcloud_container\nSCENARIO_SIMULATION=false\nSENSOR_MODEL=sample_sensor_kit\nVEHICLE_ID=default\nVEHICLE_MODEL=sample_vehicle\n\n# Map settings\nLANELET2_MAP_FILE=lanelet2_map.osm\nMAP_PATH=$HOME/autoware_map/sample-map-rosbag\nPOINTCLOUD_MAP_FILE=pointcloud_map.pcd\n\n# Planning settings\nENABLE_ALL_MODULES_AUTO_MODE=false\nIS_SIMULATION_MODE=true\nPLANNING_MODULE_PRESET=default\n\n# Control settings\nCHECK_EXTERNAL_EMERGENCY_HEARTBEAT=false\nCONTROL_MODULE_PRESET=default\nLATERAL_CONTROLLER_MODE=mpc\nLONGITUDINAL_CONTROLLER_MODE=pid\n\n# Vehicle interface\nLAUNCH_VEHICLE_INTERFACE=false\n\n# System settings\nSYSTEM_RUN_MODE=logging_simulation\nLAUNCH_SYSTEM_MONITOR=false\nLAUNCH_DUMMY_DIAG_PUBLISHER=false\n\n# Sensing settings\nLAUNCH_POINTCLOUD_CONTAINER_SENSING=true\nLAUNCH_SENSING_DRIVER=false\n\n# Perception settings\nSENSING_PERCEPTION_IMAGE=ghcr.io/autowarefoundation/autoware:universe-sensing-perception\nDATA_PATH=$HOME/autoware_data\nLAUNCH_POINTCLOUD_CONTAINER_PERCEPTION=false\nLIDAR_DETECTION_MODEL=clustering\nOCCUPANCY_GRID_MAP_METHOD=laserscan_based\nPERCEPTION_MODE=lidar\n\n# Simulator settings\nINITIAL_ENGAGE_STATE=false\nLAUNCH_DUMMY_DOORS=false\nLAUNCH_DUMMY_PERCEPTION=false\nLAUNCH_DUMMY_VEHICLE=false\nLAUNCH_SCENARIO_SIMULATOR_V2_ADAPTER=false\nLOCALIZATION_SIM_MODE=none\nPERCEPTION_ENABLE_DETECTION_FAILURE=false\nPERCEPTION_ENABLE_OBJECT_RECOGNITION=true\nPERCEPTION_ENABLE_TRAFFIC_LIGHT=true\nPERCEPTION_USE_BASE_LINK_Z=false\nSENSING_VISIBLE_RANGE=300.0\nUSE_POINTCLOUD_CONTAINER=true\n\n# Visualization settings\nREMOTE_DISPLAY=true\nRVIZ_CONFIG=/opt/autoware/share/autoware_launch/rviz/autoware.rviz\n\n# Rosbag settings\nROSBAG_PATH=$HOME/autoware_map/sample-rosbag\nROSBAG_RATE=0.2\nROSBAG_FORMAT=sqlite3\n"
  },
  {
    "path": "docker/logging-simulation.gpu.env",
    "content": "# Perception settings\nSENSING_PERCEPTION_IMAGE=ghcr.io/autowarefoundation/autoware:universe-sensing-perception-cuda\nLIDAR_DETECTION_MODEL=centerpoint\n\n# TODO(mitsudome-r): used pointcloud based occupancy grid once we merge\n# https://github.com/autowarefoundation/autoware/pull/6382\n# OCCUPANCY_GRID_MAP_METHOD=pointcloud_based\n"
  },
  {
    "path": "docker/planning-simulation.env",
    "content": "# ROS settings\nROS_DOMAIN_ID=1\nUSE_SIM_TIME=false\n\n# Common settings\nPOINTCLOUD_CONTAINER_NAME=pointcloud_container\nSCENARIO_SIMULATION=false\nSENSOR_MODEL=sample_sensor_kit\nVEHICLE_ID=default\nVEHICLE_MODEL=sample_vehicle\n\n# Map settings\nLANELET2_MAP_FILE=lanelet2_map.osm\nMAP_PATH=$HOME/autoware_map/sample-map-planning\nPOINTCLOUD_MAP_FILE=pointcloud_map.pcd\n\n# Planning settings\nENABLE_ALL_MODULES_AUTO_MODE=false\nIS_SIMULATION_MODE=true\nPLANNING_MODULE_PRESET=default\n\n# Control settings\nCHECK_EXTERNAL_EMERGENCY_HEARTBEAT=false\nCONTROL_MODULE_PRESET=default\nLATERAL_CONTROLLER_MODE=mpc\nLONGITUDINAL_CONTROLLER_MODE=pid\n\n# Vehicle interface\nLAUNCH_VEHICLE_INTERFACE=true\n\n# System settings\nSYSTEM_RUN_MODE=planning_simulation\nLAUNCH_SYSTEM_MONITOR=false\nLAUNCH_DUMMY_DIAG_PUBLISHER=true\n\n# Sensing settings\nLAUNCH_POINTCLOUD_CONTAINER_SENSING=false\nLAUNCH_SENSING_DRIVER=false\n\n# Perception settings\nDATA_PATH=$HOME/autoware_data\nLAUNCH_POINTCLOUD_CONTAINER_PERCEPTION=false\nLIDAR_DETECTION_MODEL=clustering\nPERCEPTION_MODE=lidar\n\n# Simulator settings\nINITIAL_ENGAGE_STATE=true\nLAUNCH_DUMMY_DOORS=true\nLAUNCH_DUMMY_PERCEPTION=true\nLAUNCH_DUMMY_VEHICLE=true\nLAUNCH_SCENARIO_SIMULATOR_V2_ADAPTER=false\nLOCALIZATION_SIM_MODE=api\nPERCEPTION_ENABLE_DETECTION_FAILURE=true\nPERCEPTION_ENABLE_OBJECT_RECOGNITION=true\nPERCEPTION_ENABLE_TRAFFIC_LIGHT=false\nPERCEPTION_USE_BASE_LINK_Z=true\nSENSING_VISIBLE_RANGE=300.0\nUSE_POINTCLOUD_CONTAINER=false\n\n# Visualization settings\nREMOTE_DISPLAY=true\nRVIZ_CONFIG=/opt/autoware/share/autoware_launch/rviz/autoware.rviz\n\n# Rosbag settings\nROSBAG_PATH=$HOME/autoware_map/sample-rosbag\nROSBAG_RATE=1.0\nROSBAG_FORMAT=sqlite3\n"
  },
  {
    "path": "docker/run.sh",
    "content": "#!/usr/bin/env bash\n# shellcheck disable=SC2086,SC2124\n\nset -e\n\n# Define terminal colors\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nBLUE='\\033[0;34m'\nNC='\\033[0m' # No Color\n\nSCRIPT_DIR=$(readlink -f \"$(dirname \"$0\")\")\nWORKSPACE_ROOT=\"$SCRIPT_DIR/..\"\n\n# Determine ROS distro from environment or default to humble\nros_distro=${ROS_DISTRO:-humble}\nif [ \"$ros_distro\" = \"humble\" ]; then\n    source \"$WORKSPACE_ROOT/amd64.env\"\nelse\n    source \"$WORKSPACE_ROOT/amd64_jazzy.env\"\nfi\nif [ \"$(uname -m)\" = \"aarch64\" ]; then\n    source \"$WORKSPACE_ROOT/arm64.env\"\nfi\n\n# Default values\noption_no_nvidia=false\noption_devel=false\noption_headless=false\noption_pull_latest_image=false\nMAP_PATH=\"\"\nDATA_PATH=\"\"\nWORKSPACE_PATH=\"\"\nUSER_ID=\"\"\nWORKSPACE=\"\"\nDEFAULT_LAUNCH_CMD=\"ros2 launch autoware_launch autoware.launch.xml map_path:=/autoware_map vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit\"\n\n# Function to print help message\nprint_help() {\n    echo -e \"\\n------------------------------------------------------------\"\n    echo -e \"${RED}Note:${NC} The --map-path option is mandatory for the runtime. For development environment with shell access, use --devel option.\"\n    echo -e \"      Default launch command: ${GREEN}${DEFAULT_LAUNCH_CMD}${NC}\"\n    echo -e \"------------------------------------------------------------\"\n    echo -e \"${RED}Usage:${NC} run.sh [OPTIONS] [LAUNCH_CMD](optional)\"\n    echo -e \"Options:\"\n    echo -e \"  ${GREEN}--help/-h${NC}            Display this help message\"\n    echo -e \"  ${GREEN}--map-path${NC}           Specify to mount map files into /autoware_map (mandatory for runtime)\"\n    echo -e \"  ${GREEN}--data-path${NC}          Specify to mount data files into /autoware_data (mandatory for runtime)\"\n    echo -e \"  ${GREEN}--devel${NC}              Launch the latest Autoware development environment with shell access\"\n    echo -e \"  ${GREEN}--workspace${NC}          (--devel only)Specify the directory to mount into /workspace, by default it uses current directory (pwd)\"\n    echo -e \"  ${GREEN}--no-nvidia${NC}          Disable NVIDIA GPU support\"\n    echo -e \"  ${GREEN}--headless${NC}           Run Autoware in headless mode (default: false)\"\n    echo -e \"  ${GREEN}--pull-latest-image${NC}  Pull the latest image before starting the container\"\n    echo \"\"\n}\n\n# Parse arguments\nparse_arguments() {\n    while [ \"$1\" != \"\" ]; do\n        case \"$1\" in\n        --help | -h)\n            print_help\n            exit 1\n            ;;\n        --no-nvidia)\n            option_no_nvidia=true\n            ;;\n        --devel)\n            option_devel=true\n            ;;\n        --headless)\n            option_headless=true\n            ;;\n        --pull-latest-image)\n            option_pull_latest_image=true\n            ;;\n        --workspace)\n            WORKSPACE_PATH=\"$2\"\n            shift\n            ;;\n        --map-path)\n            MAP_PATH=\"$2\"\n            shift\n            ;;\n        --data-path)\n            DATA_PATH=\"$2\"\n            shift\n            ;;\n        --*)\n            echo \"Unknown option: $1\"\n            print_help\n            exit 1\n            ;;\n        -*)\n            echo \"Unknown option: $1\"\n            print_help\n            exit 1\n            ;;\n        *)\n            LAUNCH_CMD=\"$@\"\n            break\n            ;;\n        esac\n        shift\n    done\n}\n\n# Set the docker image and workspace variables\nset_variables() {\n    # Set user ID and group ID to match the local user\n    USER_ID=\"-e LOCAL_UID=$(id -u) -e LOCAL_GID=$(id -g) -e LOCAL_USER=$(id -un) -e LOCAL_GROUP=$(id -gn)\"\n\n    # Set map path\n    if [ \"$MAP_PATH\" != \"\" ]; then\n        MAP=\"-v ${MAP_PATH}:/autoware_map:ro\"\n    fi\n\n    # Set data path\n    if [ \"$DATA_PATH\" != \"\" ]; then\n        DATA=\"-v ${DATA_PATH}:/autoware_data:rw\"\n    fi\n\n    if [ \"$option_devel\" = \"true\" ]; then\n        # Set image based on option\n        IMAGE=\"ghcr.io/autowarefoundation/autoware:universe-devel\"\n\n        # Set workspace path, if not provided use the current directory\n        if [ \"$WORKSPACE_PATH\" = \"\" ]; then\n            WORKSPACE_PATH=$(pwd)\n        fi\n        WORKSPACE=\"-v ${WORKSPACE_PATH}:/workspace\"\n\n        # Set launch command\n        if [ \"$LAUNCH_CMD\" = \"\" ]; then\n            LAUNCH_CMD=\"/bin/bash\"\n        fi\n    else\n        # Set image based on option\n        IMAGE=\"ghcr.io/autowarefoundation/autoware:universe\"\n\n        # Set map path\n        if [ \"$MAP_PATH\" = \"\" ] || [ \"$DATA_PATH\" = \"\" ]; then\n            echo -e \"\\n------------------------------------------------------------\"\n            echo -e \"${RED}Note:${NC} The --map-path and --data-path option is mandatory for the universe(runtime image). For development environment with shell access, use --devel option.\"\n            echo -e \"------------------------------------------------------------\"\n            exit 1\n        fi\n\n        # Set default launch command if not provided\n        if [ \"$LAUNCH_CMD\" = \"\" ]; then\n            LAUNCH_CMD=${DEFAULT_LAUNCH_CMD}\n        fi\n    fi\n}\n\n# Set GPU flag based on option\nset_gpu_flag() {\n    if [ \"$option_no_nvidia\" = \"true\" ]; then\n        GPU_FLAG=\"\"\n    else\n        GPU_FLAG=\"--gpus all\"\n        IMAGE=${IMAGE}-cuda\n    fi\n}\n\n# Set X display variables\nset_x_display() {\n    MOUNT_X=\"\"\n    if [ \"$option_headless\" = \"false\" ]; then\n        MOUNT_X=\"-e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix\"\n        xhost + >/dev/null\n    fi\n}\n\n# Main script execution\nmain() {\n    # Parse arguments\n    parse_arguments \"$@\"\n    set_variables\n    set_gpu_flag\n    set_x_display\n\n    if [ \"$option_devel\" = \"true\" ]; then\n        echo -e \"${GREEN}-----------------------------------------------------------------${NC}\"\n        echo -e \"${BLUE}Launching Autoware development environment${NC}\"\n    else\n        echo -e \"${GREEN}-----------------------------------------------------------------${NC}\"\n        echo -e \"${GREEN}Launching Autoware${NC}\"\n    fi\n    echo -e \"${GREEN}IMAGE:${NC} ${IMAGE}\"\n    if [ \"$option_devel\" = \"true\" ]; then\n        echo -e \"${GREEN}WORKSPACE PATH(mounted):${NC} ${WORKSPACE_PATH}:/workspace\"\n    fi\n    if [ \"$MAP_PATH\" != \"\" ]; then\n        echo -e \"${GREEN}MAP PATH(mounted):${NC} ${MAP_PATH}:/autoware_map\"\n    fi\n    echo -e \"${GREEN}LAUNCH CMD:${NC} ${LAUNCH_CMD}\"\n    echo -e \"${GREEN}-----------------------------------------------------------------${NC}\"\n\n    if [ \"$option_pull_latest_image\" = \"true\" ]; then\n        docker pull ${IMAGE}\n    fi\n\n    # Launch the container\n    set -x\n    docker run -it --rm --net=host ${GPU_FLAG} ${USER_ID} ${MOUNT_X} \\\n        -e XAUTHORITY=${XAUTHORITY} -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR -e NVIDIA_DRIVER_CAPABILITIES=all -e TZ=\"$(cat /etc/timezone)\" \\\n        ${WORKSPACE} ${MAP} ${DATA} ${IMAGE} \\\n        ${LAUNCH_CMD}\n}\n\n# Execute the main script\nmain \"$@\"\n"
  },
  {
    "path": "docker/scripts/build_and_clean.sh",
    "content": "#!/bin/bash\nset -eo pipefail\n\nfunction build_and_clean() {\n    local ccache_dir=$1\n    local install_base=$2\n    local colcon_build_args=$3\n\n    # shellcheck disable=SC2086\n    du -sh \"$ccache_dir\" && ccache -s &&\n        colcon build --cmake-args \\\n            \" -Wno-dev\" \\\n            \" --no-warn-unused-cli\" \\\n            --merge-install \\\n            --install-base \"$install_base\" \\\n            --mixin release compile-commands ccache \\\n            $colcon_build_args &&\n        du -sh \"$ccache_dir\" && ccache -s &&\n        rm -rf /autoware/build /autoware/log\n}\n\nbuild_and_clean \"$@\"\n"
  },
  {
    "path": "docker/scripts/cleanup_apt.sh",
    "content": "#!/bin/bash\nset -eo pipefail\n\nfunction cleanup_apt() {\n    local apt_clean=$1\n    apt-get autoremove -y && rm -rf /var/lib/apt/lists/* \"$HOME\"/.cache\n    if [[ $apt_clean == true ]]; then\n        apt-get clean\n    fi\n}\n\ncleanup_apt \"$@\"\n"
  },
  {
    "path": "docker/scripts/cleanup_system.sh",
    "content": "#!/bin/bash\nset -eo pipefail\n\nfunction cleanup_system() {\n    local lib_dir=$1\n    local ros_distro=$2\n\n    find /usr/lib/\"$lib_dir\"-linux-gnu -name \"*.a\" -type f -delete &&\n        find / -name \"*.o\" -type f -delete &&\n        find / -name \"*.h\" -type f -delete &&\n        find / -name \"*.hpp\" -type f -delete &&\n        rm -rf /autoware/ansible /autoware/ansible-galaxy-requirements.yaml /autoware/setup-dev-env.sh /autoware/*.env \\\n            /root/.local/pipx /opt/ros/\"$ros_distro\"/include /opt/autoware/include /etc/apt/sources.list.d/cuda*.list \\\n            /etc/apt/sources.list.d/docker.list /etc/apt/sources.list.d/nvidia-docker.list \\\n            /usr/include /usr/share/doc /usr/lib/gcc /usr/lib/jvm /usr/lib/llvm*\n}\n\n./cleanup_apt.sh\ncleanup_system \"$@\"\n"
  },
  {
    "path": "docker/scripts/resolve_rosdep_keys.sh",
    "content": "#!/bin/bash\nset -eo pipefail\n\nfunction resolve_rosdep_keys() {\n    local src_path=$1\n    local ros_distro=$2\n    local rosdep_keys_args=$3\n\n    # shellcheck disable=SC2086\n    rosdep keys $rosdep_keys_args --ignore-src --from-paths \"$src_path\" |\n        xargs rosdep resolve --rosdistro \"$ros_distro\" |\n        grep -v '^#' |\n        sed 's/ \\+/\\n/g' |\n        sort\n}\n\nresolve_rosdep_keys \"$@\"\n"
  },
  {
    "path": "docker/tools/README.md",
    "content": "# Autoware Tools\n\nThis directory offers container-based tools for Autoware to make development and deployment easier.\n\n- [scenario-simulator](./scenario-simulator/README.md): Simulation container for Autoware scenario testing.\n- [visualizer](./visualizer/README.md): RViz-based visualization container for Autoware.\n"
  },
  {
    "path": "docker/tools/docker-bake.hcl",
    "content": "group \"default\" {\n  targets = [\n    \"visualizer\",\n    \"scenario-simulator\",\n  ]\n}\n\n// For docker/metadata-action\ntarget \"docker-metadata-action-visualizer\" {}\ntarget \"docker-metadata-action-scenario-simulator\" {}\n\ntarget \"visualizer\" {\n  inherits = [\"docker-metadata-action-visualizer\"]\n  dockerfile = \"docker/tools/visualizer/Dockerfile\"\n  target = \"visualizer\"\n}\n\ntarget \"scenario-simulator\" {\n  inherits = [\"docker-metadata-action-scenario-simulator\"]\n  dockerfile = \"docker/tools/scenario-simulator/Dockerfile\"\n  target = \"scenario-simulator\"\n}\n"
  },
  {
    "path": "docker/tools/scenario-simulator/Dockerfile",
    "content": "### Builder\nFROM ghcr.io/autowarefoundation/autoware:universe-devel AS builder\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nENV CCACHE_DIR=\"/root/.ccache\"\n\nCOPY src/simulator /autoware/src/simulator\nCOPY docker/scripts/ /autoware/\nRUN chmod +x /autoware/*.sh\nWORKDIR /autoware\n\n# Extract rosdep dependencies for simulator\n# hadolint ignore=SC1091\nRUN source /opt/autoware/setup.bash \\\n    && /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} --dependency-types=exec \\\n    > /rosdep-simulator-exec-depend-packages.txt \\\n    && cat /rosdep-simulator-exec-depend-packages.txt\n\n# Install dependencies and build the scenario simulator\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n    apt-get update \\\n    && source /opt/autoware/setup.bash \\\n    && rosdep update && rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO \\\n    && /autoware/cleanup_apt.sh\n\n# Build the scenario simulator\n# hadolint ignore=SC1091\nRUN --mount=type=cache,target=${CCACHE_DIR} \\\n    source /opt/autoware/setup.bash \\\n    && /autoware/build_and_clean.sh ${CCACHE_DIR} /opt/autoware \\\n    && find /opt/autoware/lib -type f -name \"*.py\" -exec chmod +x {} \\; \\\n    && find /opt/autoware/share -type f -name \"*.py\" -exec chmod +x {} \\;\n\n### Scenario Simulator\nFROM ghcr.io/autowarefoundation/autoware:universe AS scenario-simulator\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\nCOPY --from=builder /opt/autoware /opt/autoware\nCOPY --from=builder /rosdep-simulator-exec-depend-packages.txt /tmp/rosdep-simulator-exec-depend-packages.txt\n\n# hadolint ignore=SC2002\nRUN --mount=type=ssh \\\n    --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n    apt-get update \\\n    # Remove xmlschema and yamale from rosdep packages since we install via pip\n    && sed -i '/\\(xmlschema\\|yamale\\)/d' /tmp/rosdep-simulator-exec-depend-packages.txt \\\n    && pip3 install --no-cache-dir yamale \\\n    && pip3 install --no-cache-dir xmlschema==3.4.5 \\\n    && cat /tmp/rosdep-simulator-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \\\n    && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\nCOPY docker/tools/scenario-simulator/entrypoint.sh /entrypoint.sh\nRUN chmod +x /entrypoint.sh\nENTRYPOINT [\"/entrypoint.sh\"]\n"
  },
  {
    "path": "docker/tools/scenario-simulator/README.md",
    "content": "# Autoware Tools - Scenario Simulator\n\nRuns Scenario Simulator in a container.\n\n## Standalone Run\n\n```bash\ndocker run --rm --name scenario-simulator ghcr.io/autowarefoundation/autoware-tools:scenario-simulator\n```\n\n## Settings\n\nThe following environment variables can be passed to the `scenario-simulator` container:\n\n| Variable              | Default Value                                                                                                                                                   | Possible Values             | Description                                                                                                                          |\n| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |\n| `SCENARIO`            | [`scenario_test_runner/scenario/sample.yaml`](https://github.com/tier4/scenario_simulator_v2/blob/master/test_runner/scenario_test_runner/scenario/sample.yaml) | Any valid path              | The full path to the scenario file inside the container                                                                              |\n| `ARCHITECTURE_TYPE`   | `awf/universe/20240605`                                                                                                                                         | Any valid architecture type | The architecture type to use for the scenario simulation                                                                             |\n| `SENSOR_MODEL`        | `sample_sensor_kit`                                                                                                                                             | Any valid sensor model      | The sensor model to use for the scenario simulation                                                                                  |\n| `VEHICLE_MODEL`       | `sample_vehicle`                                                                                                                                                | Any valid vehicle model     | The vehicle model to use for the scenario simulation                                                                                 |\n| `LAUNCH_AUTOWARE`     | `false`                                                                                                                                                         | `true`, `false`             | Set to `true` to launch Autoware for standalone scenario simulation. By default, the scenario simulator expects an Autoware running. |\n| `LAUNCH_RVIZ`         | `true`                                                                                                                                                          | `true`, `false`             | Set to `true` to launch RViz for the scenario simulation                                                                             |\n| `INITIALIZE_DURATION` | `90`                                                                                                                                                            | Any positive integer        | The duration to initialize the scenario simulation                                                                                   |\n| `GLOBAL_FRAME_RATE`   | `30`                                                                                                                                                            | Any positive integer        | The frame rate of the scenario simulation                                                                                            |\n| `GLOBAL_TIMEOUT`      | `120`                                                                                                                                                           | Any positive integer        | The timeout of the scenario simulation                                                                                               |\n| `OUTPUT_DIRECTORY`    | `/autoware/scenario-sim/output`                                                                                                                                 | Any valid path              | The directory to save the simulation results                                                                                         |\n| `USE_SIM_TIME`        | `false`                                                                                                                                                         | `true`, `false`             | Whether to use simulation time instead of system time                                                                                |\n| `RECORD`              | `false`                                                                                                                                                         | `true`, `false`             | Whether to record the scenario simulation rosbag                                                                                     |\n"
  },
  {
    "path": "docker/tools/scenario-simulator/entrypoint.sh",
    "content": "#!/usr/bin/env bash\n# cspell:ignore\n# shellcheck disable=SC1090,SC1091\n\nrun_scenario_simulator() {\n    echo -e \"\\e[32mRunning scenario simulator...\\e[0m\"\n\n    # Prompt if no scenario is provided\n    if [ -z \"$SCENARIO\" ]; then\n        echo -e \"\\e[33mNo scenario provided, using default sample scenario...\\e[0m\"\n    fi\n\n    # Set default values if not provided\n    LAUNCH_AUTOWARE=${LAUNCH_AUTOWARE:-false}\n    LAUNCH_RVIZ=${LAUNCH_RVIZ:-false}\n    ARCHITECTURE_TYPE=${ARCHITECTURE_TYPE:-awf/universe/20240605}\n    SENSOR_MODEL=${SENSOR_MODEL:-sample_sensor_kit}\n    VEHICLE_MODEL=${VEHICLE_MODEL:-sample_vehicle}\n    INITIALIZE_DURATION=${INITIALIZE_DURATION:-90}\n    GLOBAL_FRAME_RATE=${GLOBAL_FRAME_RATE:-30}\n    OUTPUT_DIRECTORY=${OUTPUT_DIRECTORY:-/autoware/scenario-sim/output}\n    SCENARIO=${SCENARIO:-$(ros2 pkg prefix --share scenario_test_runner)/scenario/sample.yaml}\n    GLOBAL_TIMEOUT=${GLOBAL_TIMEOUT:-120}\n    RECORD=${RECORD:-false}\n    USE_SIM_TIME=${USE_SIM_TIME:-false}\n\n    # Print all variables\n    echo \"LAUNCH_AUTOWARE: $LAUNCH_AUTOWARE\"\n    echo \"LAUNCH_RVIZ: $LAUNCH_RVIZ\"\n    echo \"ARCHITECTURE_TYPE: $ARCHITECTURE_TYPE\"\n    echo \"SENSOR_MODEL: $SENSOR_MODEL\"\n    echo \"VEHICLE_MODEL: $VEHICLE_MODEL\"\n    echo \"INITIALIZE_DURATION: $INITIALIZE_DURATION\"\n    echo \"GLOBAL_FRAME_RATE: $GLOBAL_FRAME_RATE\"\n    echo \"OUTPUT_DIRECTORY: $OUTPUT_DIRECTORY\"\n    echo \"SCENARIO: $SCENARIO\"\n    echo \"GLOBAL_TIMEOUT: $GLOBAL_TIMEOUT\"\n    echo \"RECORD: $RECORD\"\n    echo \"USE_SIM_TIME: $USE_SIM_TIME\"\n\n    # Launch scenario test runner\n    ros2 launch scenario_test_runner scenario_test_runner.launch.py \\\n        launch_autoware:=\"$LAUNCH_AUTOWARE\" \\\n        launch_rviz:=\"$LAUNCH_RVIZ\" \\\n        architecture_type:=\"$ARCHITECTURE_TYPE\" \\\n        sensor_model:=\"$SENSOR_MODEL\" \\\n        vehicle_model:=\"$VEHICLE_MODEL\" \\\n        initialize_duration:=\"$INITIALIZE_DURATION\" \\\n        global_frame_rate:=\"$GLOBAL_FRAME_RATE\" \\\n        output_directory:=\"$OUTPUT_DIRECTORY\" \\\n        scenario:=\"$SCENARIO\" \\\n        global_timeout:=\"$GLOBAL_TIMEOUT\" \\\n        record:=\"$RECORD\" \\\n        use_sim_time:=\"$USE_SIM_TIME\"\n}\n\n# Source ROS and Autoware setup files\nsource \"/opt/ros/$ROS_DISTRO/setup.bash\"\nsource \"/opt/autoware/setup.bash\"\n\n# Execute passed command if provided, otherwise run scenario simulator\nif [ $# -gt 0 ]; then\n    exec \"$@\"\nelse\n    run_scenario_simulator\nfi\n"
  },
  {
    "path": "docker/tools/visualizer/Dockerfile",
    "content": "# cspell:ignore openbox, VNC, tigervnc, novnc, websockify, newkey, xstartup, keyout\nFROM ghcr.io/autowarefoundation/autoware:universe AS universe\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\n\n# Extract RViz configs for visualizer\n# hadolint ignore=SC1091\nRUN source /opt/autoware/setup.bash \\\n  && RVIZ_PATH=\"$(ros2 pkg prefix --share autoware_launch)/rviz\" \\\n  && cp -r \"$RVIZ_PATH\" /autoware/rviz\n\n### visualizer\nFROM ghcr.io/autowarefoundation/autoware:universe-visualization AS visualizer\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\nARG ROS_DISTRO\nARG LIB_DIR\n\nCOPY --from=universe /autoware/rviz /autoware/rviz\nWORKDIR /autoware\n\n# Install openbox, VNC, and simulator dependencies\n# hadolint ignore=SC2002\nRUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \\\n  curl \\\n  unzip \\\n  openbox \\\n  tigervnc-standalone-server \\\n  tigervnc-common \\\n  tigervnc-tools \\\n  novnc \\\n  websockify \\\n  python3-numpy \\\n  python3-xdg \\\n  && pip install --no-cache-dir yamale xmlschema \\\n  && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO\n\n# Create SSL certificate for NoVNC\nRUN openssl req -x509 -nodes -newkey rsa:2048 \\\n  -keyout /etc/ssl/private/novnc.key \\\n  -out /etc/ssl/certs/novnc.crt \\\n  -days 365 \\\n  -subj \"/O=Autoware-OpenADKit/CN=localhost\"\n\n# Need to expose VNC and NoVNC ports when running the container\nEXPOSE 5900 6080\n\n# Add source commands to bash startup\nRUN echo \"source /opt/ros/$ROS_DISTRO/setup.bash\" >> /root/.bashrc && \\\n  echo \"source /opt/autoware/setup.bash\" >> /root/.bashrc\n\n# Copy startup scripts\nCOPY docker/tools/visualizer/xstartup /root/.vnc/xstartup\nCOPY docker/tools/visualizer/entrypoint.sh /entrypoint.sh\nRUN chmod +x /entrypoint.sh && chmod +x /root/.vnc/xstartup\nENTRYPOINT [\"/entrypoint.sh\"]\n"
  },
  {
    "path": "docker/tools/visualizer/README.md",
    "content": "# Autoware Tools - Visualizer\n\nOpens a remote RViz display for Autoware.\n\n## Standalone Run\n\n```bash\ndocker run --rm --name visualizer -p 6080:6080 ghcr.io/autowarefoundation/autoware-tools:visualizer\n```\n\n## Settings\n\nThe following environment variables can be configured with `-e` while launching the visualizer container:\n\n| Variable          | Default Value                  | Possible Values                       | Description                                                                                                                                    |\n| ----------------- | ------------------------------ | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |\n| `RVIZ_CONFIG`     | `/autoware/rviz/autoware.rviz` | Any valid path                        | The full path to the RViz configuration file inside the container                                                                              |\n| `REMOTE_DISPLAY`  | `true`                         | `true`, `false`                       | **(Recommended)** Lightweight and browser-based RViz display, accessible from any device. Set this to `false` to launch a local rviz2 display. |\n| `REMOTE_PASSWORD` | `openadkit`                    | Any string without special characters | Password for remote display (only used when `REMOTE_DISPLAY=true`)                                                                             |\n"
  },
  {
    "path": "docker/tools/visualizer/entrypoint.sh",
    "content": "#!/usr/bin/env bash\n# cspell:ignore openbox, VNC, tigervnc, novnc, websockify, newkey, xstartup, pixelformat, AUTHTOKEN, authtoken, vncserver, autoconnect, vncpasswd\n# shellcheck disable=SC1090,SC1091\n\n# Check if RVIZ_CONFIG is provided\nif [ -z \"$RVIZ_CONFIG\" ]; then\n    echo -e \"\\e[31mRVIZ_CONFIG is not set defaulting to /autoware/rviz/autoware.rviz\\e[0m\"\n    RVIZ_CONFIG=\"/autoware/rviz/autoware.rviz\"\n    export RVIZ_CONFIG\nfi\n\nif [ -z \"$USE_SIM_TIME\" ]; then\n    echo -e \"\\e[31mUSE_SIM_TIME is not set defaulting to false\\e[0m\"\n    USE_SIM_TIME=\"false\"\n    export USE_SIM_TIME\nfi\n\nconfigure_vnc() {\n    # Create Openbox application configuration\n    mkdir -p /etc/xdg/openbox\n    cat >/etc/xdg/openbox/rc.xml <<'EOF'\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<openbox_config xmlns=\"http://openbox.org/3.4/rc\"\n                xmlns:xi=\"http://www.w3.org/2001/XInclude\">\n  <applications>\n    <application name=\"rviz2\">\n      <maximized>yes</maximized>\n      <position force=\"yes\">\n        <x>center</x>\n        <y>center</y>\n      </position>\n      <focus>yes</focus>\n      <desktop>1</desktop>\n    </application>\n  </applications>\n</openbox_config>\nEOF\n    # Create rviz2 start script\n    cat >/usr/local/bin/start-rviz2.sh <<'EOF'\n#!/bin/bash\nsource /opt/ros/\"$ROS_DISTRO\"/setup.bash\nsource /opt/autoware/setup.bash\nexec rviz2 -d \"$RVIZ_CONFIG\" --ros-args -p use_sim_time:=\"$USE_SIM_TIME\"\nEOF\n    chmod +x /usr/local/bin/start-rviz2.sh\n    echo \"echo 'Autostart executed at $(date)' >> /tmp/autostart.log\" >>/etc/xdg/openbox/autostart\n    echo \"/usr/local/bin/start-rviz2.sh\" >>/etc/xdg/openbox/autostart\n\n    # Configure VNC password\n    if [ -z \"$REMOTE_PASSWORD\" ]; then\n        echo -e \"\\e[31mREMOTE_PASSWORD is not set, using *openadkit* as default\\e[0m\"\n        REMOTE_PASSWORD=\"openadkit\"\n    fi\n    mkdir -p ~/.vnc\n    echo \"$REMOTE_PASSWORD\" | vncpasswd -f >~/.vnc/passwd && chmod 600 ~/.vnc/passwd\n\n    # Start VNC server with Openbox\n    echo \"Starting VNC server with Openbox...\"\n    vncserver :99 -geometry 1024x768 -depth 16 -pixelformat rgb565\n    VNC_RESULT=$?\n\n    if [ $VNC_RESULT -ne 0 ]; then\n        echo \"Failed to start VNC server (exit code: $VNC_RESULT)\"\n        exit $VNC_RESULT\n    fi\n\n    # Set the DISPLAY variable to match VNC server\n    echo \"Setting DISPLAY to :99\"\n    echo \"export DISPLAY=:99\" >>~/.bashrc\n    sleep 2\n\n    # Start NoVNC\n    echo \"Starting NoVNC...\"\n    websockify --daemon --web=/usr/share/novnc/ --cert=/etc/ssl/certs/novnc.crt --key=/etc/ssl/private/novnc.key 6080 localhost:5999\n\n    # Print info\n    echo -e \"\\033[32m-------------------------------------------------------------------------\\033[0m\"\n    echo -e \"\\033[32mBrowser interface available at local address http://$(hostname -I | cut -d' ' -f1):6080/vnc.html?resize=scale&password=${REMOTE_PASSWORD}&autoconnect=true\\033[0m\"\n    if curl -s --head 1.1.1.1 >/dev/null 2>&1; then\n        echo -e \"\\033[32mIf you have a static public ip you can access it on WEB at http://$(curl -s ifconfig.me):6080/vnc.html?resize=scale&password=${REMOTE_PASSWORD}&autoconnect=true\\033[0m\"\n    else\n        echo -e \"\\033[31mNo internet connection available\\033[0m\"\n    fi\n    echo -e \"\\033[32m-------------------------------------------------------------------------\\033[0m\"\n}\n\n# Source ROS and Autoware setup files\nsource \"/opt/ros/$ROS_DISTRO/setup.bash\"\nsource \"/opt/autoware/setup.bash\"\n\n# Execute passed command if provided, otherwise launch rviz2\nif [ \"$REMOTE_DISPLAY\" == \"false\" ]; then\n    [ $# -eq 0 ] && rviz2 -d \"$RVIZ_CONFIG\" --ros-args -p use_sim_time:=\"$USE_SIM_TIME\"\n    exec \"$@\"\nelse\n    configure_vnc\n    [ $# -eq 0 ] && sleep infinity\n    exec \"$@\"\nfi\n"
  },
  {
    "path": "docker/tools/visualizer/xstartup",
    "content": "#!/bin/sh\n# cspell:ignore openbox, VNC, xstartup, DBUS, Xresources, xrdb\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\nexport DISPLAY=:99\n\n[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup\n[ -r \"$HOME/.Xresources\" ] && xrdb \"$HOME/.Xresources\"\n\n# Start Openbox window manager\necho \"Starting Openbox window manager...\"\nopenbox-session &\n\n# Keep the session alive\nsleep infinity\n"
  },
  {
    "path": "repositories/autoware-nightly.repos",
    "content": "repositories:\n  core/autoware_adapi_msgs:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_adapi_msgs.git\n    version: main\n  core/autoware_internal_msgs:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_internal_msgs.git\n    version: main\n  core/autoware_core:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_core.git\n    version: main\n  core/autoware_utils: # TODO(mitsudome-r): Remove this repository entry when https://github.com/autowarefoundation/autoware/pull/5700 is merged.\n    type: git\n    url: https://github.com/autowarefoundation/autoware_utils.git\n    version: main\n  core/autoware_rviz_plugins:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_rviz_plugins.git\n    version: main\n  universe/autoware_universe:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_universe.git\n    version: main\n  universe/external/managed_transform_buffer:\n    type: git\n    url: https://github.com/autowarefoundation/managed_transform_buffer.git\n    version: main\n  universe/external/tier4_autoware_msgs:\n    type: git\n    url: https://github.com/tier4/tier4_autoware_msgs.git\n    version: tier4/universe\n  launcher/autoware_launch:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_launch.git\n    version: main\n"
  },
  {
    "path": "repositories/autoware.repos",
    "content": "repositories:\n  # core\n  core/autoware_msgs:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_msgs.git\n    version: 1.11.0\n  core/autoware_adapi_msgs:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_adapi_msgs.git\n    version: 1.9.1\n  core/autoware_internal_msgs:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_internal_msgs.git\n    version: 1.12.1\n  core/autoware_cmake:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_cmake.git\n    version: 1.1.0\n  core/autoware_utils:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_utils.git\n    version: 1.7.1\n  core/autoware_lanelet2_extension:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_lanelet2_extension.git\n    version: 0.12.0\n  core/autoware_core:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_core.git\n    version: 1.7.2\n  core/autoware_rviz_plugins:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_rviz_plugins.git\n    version: 0.4.0\n  # universe\n  universe/autoware_universe:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_universe.git\n    version: 0.50.2\n  universe/external/tier4_autoware_msgs:\n    type: git\n    url: https://github.com/tier4/tier4_autoware_msgs.git\n    version: v0.58.0\n  # Fix the version not to merge https://github.com/MORAI-Autonomous/MORAI-ROS2_morai_msgs/pull/9\n  universe/external/morai_msgs:\n    type: git\n    url: https://github.com/MORAI-Autonomous/MORAI-ROS2_morai_msgs.git\n    version: e2e75fc1603a9798773e467a679edf68b448e705\n  universe/external/muSSP:\n    type: git\n    url: https://github.com/tier4/muSSP.git\n    version: c79e98fd5e658f4f90c06d93472faa977bc873b9\n  universe/external/pointcloud_to_laserscan:\n    type: git\n    url: https://github.com/tier4/pointcloud_to_laserscan.git\n    version: d969ec699f84fad827fbadfa3001c9c657482fbe\n  universe/external/eagleye:\n    type: git\n    url: https://github.com/MapIV/eagleye.git\n    version: 575136ebba99892946d36d8398f228aee2136af0\n  universe/external/rtklib_ros_bridge:\n    type: git\n    url: https://github.com/MapIV/rtklib_ros_bridge.git\n    version: ef094407bba4f475a8032972e0c60cbb939b51b8\n  universe/external/llh_converter:\n    type: git\n    url: https://github.com/MapIV/llh_converter.git\n    version: 4fc2a2e1bc9dcf3e6ab0a8085d8257168e160342\n  universe/external/glog:  # TODO(Horibe): to use isGoogleInitialized() API in v0.6.0. Remove when the rosdep glog version is updated to v0.6.0 (already updated in Ubuntu 24.04)\n    type: git\n    url: https://github.com/tier4/glog.git\n    version: ea36766fdc2ac8e8c8e3ac988ae69acd6d09bb30\n  universe/external/bevdet_vendor: # TODO: wrap the original bevdet-tensorrt-cpp source code as a vendor package and provide it to autoware_tensorrt_bevdet package\n    type: git\n    url: https://github.com/autowarefoundation/bevdet_vendor.git\n    version: 0.1.0\n  universe/external/trt_batched_nms:\n    type: git\n    url: https://github.com/autowarefoundation/trt_batched_nms.git\n    version: 0.1.0\n  universe/external/cuda_blackboard:\n    type: git\n    url: https://github.com/autowarefoundation/cuda_blackboard.git\n    version: 0.3.0\n  universe/external/negotiated:\n    type: git\n    url: https://github.com/osrf/negotiated.git\n    version: eac198b55dcd052af5988f0f174902913c5f20e7\n  universe/external/managed_transform_buffer:\n    type: git\n    url: https://github.com/autowarefoundation/managed_transform_buffer.git\n    version: 0.2.0\n  # launcher\n  launcher/autoware_launch:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_launch.git\n    version: 0.50.0\n  # sensor_component\n  sensor_component/external/sensor_component_description:\n    type: git\n    url: https://github.com/tier4/sensor_component_description.git\n    version: 03ba094851ec90febfcfc0adb20b64b0e19df7a8\n  sensor_component/external/nebula:\n    type: git\n    url: https://github.com/tier4/nebula.git\n    version: v0.3.2.2\n  sensor_component/external/sync_tooling_msgs:\n    type: git\n    url: https://github.com/tier4/sync_tooling_msgs.git\n    version: 0.2.6\n  # Fork of transport_drivers that enables reduction of copy operations\n  sensor_component/transport_drivers:\n    type: git\n    url: https://github.com/autowarefoundation/transport_drivers\n    version: 39ebd8afe1bb9760a6cd6272e428468480f6de90\n  # Continental compatible version of ROS 2 socket CAN\n  sensor_component/ros2_socketcan:\n    type: git\n    url: https://github.com/autowarefoundation/ros2_socketcan\n    version: e39a814180b03f00a5692b6951a5d4e9f0463486\n  # middleware\n  # TODO(TIER IV): During the transition period of Agnocast introduction,\n  # the Agnocast ROS packages are provided as a source build.\n  # Once the transition stabilizes, use the packages released from the official ROS repository.\n  # Issue: https://github.com/autowarefoundation/autoware/issues/5968\n  middleware/external/agnocast:\n    type: git\n    url: https://github.com/tier4/agnocast.git\n    version: 2.3.1\n"
  },
  {
    "path": "repositories/extra-packages.repos",
    "content": "repositories:\n  sensor_component/external/tamagawa_imu_driver:\n    type: git\n    url: https://github.com/tier4/tamagawa_imu_driver.git\n    version: ros2\n  vehicle/external/pacmod_interface:\n    type: git\n    url: https://github.com/tier4/pacmod_interface.git\n    version: main\n"
  },
  {
    "path": "repositories/simulator-nightly.repos",
    "content": "repositories:\n"
  },
  {
    "path": "repositories/simulator.repos",
    "content": "repositories:\n  simulator/scenario_simulator:\n    type: git\n    url: https://github.com/tier4/scenario_simulator_v2.git\n    version: 22.0.0\n"
  },
  {
    "path": "repositories/tools-nightly.repos",
    "content": "repositories:\n  tools:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_tools.git\n    version: main\n"
  },
  {
    "path": "repositories/tools.repos",
    "content": "repositories:\n  tools:\n    type: git\n    url: https://github.com/autowarefoundation/autoware_tools.git\n    version: 0.6.0\n"
  },
  {
    "path": "setup-dev-env.sh",
    "content": "#!/usr/bin/env bash\n# Set up development environment for Autoware Core/Universe.\n# Usage: setup-dev-env.sh <ros2_installation_type('core' or 'universe')> [-y] [-v] [--no-nvidia]\n# Note: -y option is only for CI.\n\nset -e\n\n# Function to print help message\nprint_help() {\n    echo \"Usage: setup-dev-env.sh [OPTIONS]\"\n    echo \"Options:\"\n    echo \"  --help          Display this help message\"\n    echo \"  -h              Display this help message\"\n    echo \"  -y              Use non-interactive mode\"\n    echo \"  -v              Enable debug outputs\"\n    echo \"  --no-nvidia     Disable installation of the NVIDIA-related roles ('cuda' and 'tensorrt')\"\n    echo \"  --no-cuda-drivers Disable installation of 'cuda-drivers' in the role 'cuda'\"\n    echo \"  --runtime       Disable installation dev package of role 'cuda' and 'tensorrt'\"\n    echo \"  --data-dir      Set data directory (default: $HOME/autoware_data)\"\n    echo \"  --download-artifacts\"\n    echo \"                  Download artifacts\"\n    echo \"  --module        Specify the module (default: all)\"\n    echo \"  --ros-distro    Specify ROS distribution (humble or jazzy, default: humble)\"\n    echo \"\"\n}\n\nSCRIPT_DIR=$(readlink -f \"$(dirname \"$0\")\")\n\n# Parse arguments\nargs=()\noption_data_dir=\"$HOME/autoware_data\"\n\nwhile [ \"$1\" != \"\" ]; do\n    case \"$1\" in\n    --help | -h)\n        print_help\n        exit 1\n        ;;\n    -y)\n        # Use non-interactive mode.\n        option_yes=true\n        ;;\n    -v)\n        # Enable debug outputs.\n        option_verbose=true\n        ;;\n    --no-nvidia)\n        # Disable installation of the NVIDIA-related roles ('cuda' and 'tensorrt').\n        option_no_nvidia=true\n        ;;\n    --no-cuda-drivers)\n        # Disable installation of 'cuda-drivers' in the role 'cuda'.\n        option_no_cuda_drivers=true\n        ;;\n    --runtime)\n        # Disable installation dev package of role 'cuda' and 'tensorrt'.\n        option_runtime=true\n        ;;\n    --data-dir)\n        # Set data directory\n        option_data_dir=\"$2\"\n        shift\n        ;;\n    --download-artifacts)\n        # Set download artifacts option\n        option_download_artifacts=true\n        ;;\n    --module)\n        option_module=\"$2\"\n        shift\n        ;;\n    --ros-distro)\n        option_ros_distro=\"$2\"\n        shift\n        ;;\n    *)\n        args+=(\"$1\")\n        ;;\n    esac\n    shift\ndone\n\n# Select installation type\ntarget_playbook=\"autoware.dev_env.universe\" # default\n\nif [ ${#args[@]} -ge 1 ]; then\n    target_playbook=\"autoware.dev_env.${args[0]}\"\nfi\n\n# Initialize ansible args\nansible_args=()\n\n# Confirm to start installation\nif [ \"$option_yes\" = \"true\" ]; then\n    echo -e \"\\e[36mRun the setup in non-interactive mode.\\e[m\"\nelse\n    echo -e \"\\e[33mSetting up the build environment can take up to 1 hour.\\e[m\"\n    read -rp \">  Are you sure you want to run setup? [y/N] \" answer\n\n    # Check whether to cancel\n    if ! [[ ${answer:0:1} =~ y|Y ]]; then\n        echo -e \"\\e[33mCancelled.\\e[0m\"\n        exit 1\n    fi\n\n    ansible_args+=(\"--ask-become-pass\")\nfi\n\n# Check verbose option\nif [ \"$option_verbose\" = \"true\" ]; then\n    ansible_args+=(\"-vvv\")\nfi\n\n# Check installation of NVIDIA libraries\nif [ \"$option_no_nvidia\" = \"true\" ]; then\n    ansible_args+=(\"--extra-vars\" \"prompt_install_nvidia=n\")\nelif [ \"$option_yes\" = \"true\" ]; then\n    ansible_args+=(\"--extra-vars\" \"prompt_install_nvidia=y\")\nfi\n\n# Check installation of CUDA Drivers\nif [ \"$option_no_cuda_drivers\" = \"true\" ]; then\n    ansible_args+=(\"--extra-vars\" \"cuda_install_drivers=false\")\nfi\n\n# Check installation of dev package\nif [ \"$option_runtime\" = \"true\" ]; then\n    ansible_args+=(\"--extra-vars\" \"ros2_installation_type=ros-base\") # ROS installation type, default \"desktop\"\n    ansible_args+=(\"--extra-vars\" \"install_devel=N\")\nelse\n    ansible_args+=(\"--extra-vars\" \"install_devel=y\")\nfi\n\n# Check downloading artifacts\nif [ \"$target_playbook\" = \"autoware.dev_env.openadkit\" ]; then\n    if [ \"$option_download_artifacts\" = \"true\" ]; then\n        echo -e \"\\e[36mArtifacts will be downloaded to $option_data_dir\\e[m\"\n        ansible_args+=(\"--extra-vars\" \"prompt_download_artifacts=y\")\n    else\n        ansible_args+=(\"--extra-vars\" \"prompt_download_artifacts=N\")\n    fi\nelif [ \"$option_yes\" = \"true\" ] || [ \"$option_download_artifacts\" = \"true\" ]; then\n    echo -e \"\\e[36mArtifacts will be downloaded to $option_data_dir\\e[m\"\n    ansible_args+=(\"--extra-vars\" \"prompt_download_artifacts=y\")\nfi\n\nansible_args+=(\"--extra-vars\" \"data_dir=$option_data_dir\")\n\n# Check module option\nif [ \"$option_module\" != \"\" ]; then\n    ansible_args+=(\"--extra-vars\" \"module=$option_module\")\nfi\n\n# Check ros-distro option\nif [ \"$option_ros_distro\" != \"\" ]; then\n    export ROS_DISTRO=\"$option_ros_distro\"\n    ansible_args+=(\"--extra-vars\" \"rosdistro=$option_ros_distro\")\nfi\n\n# Load env\nsource \"$SCRIPT_DIR/amd64.env\"\nenv_file=\"$SCRIPT_DIR/amd64.env\"\nif [ \"$option_ros_distro\" = \"jazzy\" ]; then\n    source \"$SCRIPT_DIR/amd64_jazzy.env\"\n    env_file=\"$SCRIPT_DIR/amd64_jazzy.env\"\nfi\n\nif [ \"$(uname -m)\" = \"aarch64\" ]; then\n    source \"$SCRIPT_DIR/arm64.env\"\nfi\n\n# Add env args\n# shellcheck disable=SC2013\nfor env_name in $(sed -e \"s/^\\s*//\" -e \"/^#/d\" -e \"s/=.*//\" <\"$env_file\"); do\n    ansible_args+=(\"--extra-vars\" \"${env_name}=${!env_name}\")\ndone\n\n# Install sudo\nif ! (command -v sudo >/dev/null 2>&1); then\n    apt-get -y update\n    apt-get -y install sudo\nfi\n\n# Install git\nif ! (command -v git >/dev/null 2>&1); then\n    sudo apt-get -y update\n    sudo apt-get -y install git\nfi\n\n# Install pip for ansible\nif ! (python3 -m pip --version >/dev/null 2>&1); then\n    sudo apt-get -y update\n    sudo apt-get -y install python3-pip python3-venv\nfi\n\n# Install pipx for ansible\nif ! (python3 -m pipx --version >/dev/null 2>&1); then\n    sudo apt-get -y update\n    sudo apt-get -y install pipx\nfi\n\n# Install ansible\npython3 -m pipx ensurepath\nexport PATH=\"${PIPX_BIN_DIR:=$HOME/.local/bin}:$PATH\"\npipx install --include-deps --force \"ansible==10.*\"\n\n# Install ansible collections\necho -e \"\\e[36m\"ansible-galaxy collection install -f -r \"$SCRIPT_DIR/ansible-galaxy-requirements.yaml\" \"\\e[m\"\nansible-galaxy collection install -f -r \"$SCRIPT_DIR/ansible-galaxy-requirements.yaml\"\n\n# Run ansible\necho -e \"\\e[36m\"ansible-playbook \"$target_playbook\" \"${ansible_args[@]}\" \"\\e[m\"\nif ansible-playbook \"$target_playbook\" \"${ansible_args[@]}\"; then\n    echo -e \"\\e[32mCompleted.\\e[0m\"\n    exit 0\nelse\n    echo -e \"\\e[31mFailed.\\e[0m\"\n    exit 1\nfi\n"
  },
  {
    "path": "setup.cfg",
    "content": "# This file is automatically synced from:\n# https://github.com/autowarefoundation/sync-file-templates\n# To make changes, update the source repository and follow the guidelines in its README.\n\n[flake8]\n# Modified from https://github.com/ament/ament_lint/blob/ebd524bb9973d5ec1dc48a670ce54f958a5a0243/ament_flake8/ament_flake8/configuration/ament_flake8.ini\nextend-ignore = B902,C816,D100,D101,D102,D103,D104,D105,D106,D107,D203,D212,D404,I202,CNL100,E203,E501,Q000\nimport-order-style = pep8\nmax-line-length = 100\nshow-source = true\nstatistics = true\n\n[isort]\nprofile=black\nline_length=100\nforce_sort_within_sections=true\nforce_single_line=true\nreverse_relative=true\nknown_third_party=launch\n"
  },
  {
    "path": "src/.gitignore",
    "content": "# Ignore everything in this folder and all subdirectories\n*\n\n# EXCEPT: Re-include the necessary files.\n!README.md\n!.gitignore\n"
  },
  {
    "path": "src/README.md",
    "content": "# Where is the source code?\n\nAutoware uses **multiple Git repositories** managed through a meta-repository approach.\nThe `autoware` repository itself **does not contain the full source code**. Instead, it references many separately maintained repositories.\n\nTo manage these repositories, Autoware uses **[vcs2l](https://github.com/ros-infrastructure/vcs2l)** (`vcs`), which allows you to clone and keep multiple repositories in sync using manifest files under [repositories](../repositories) folder.\n\n## Repository structure\n\n- [`repositories/autoware.repos`](../repositories/autoware.repos) ➡️ The manifest file that lists essential Autoware repositories and their versions\n- `src/` (here) ➡️ The directory where all Autoware source repositories will be cloned\n\n⭐ Check the [**🔗 Repository structure and versioning documentation**](https://autowarefoundation.github.io/autoware-documentation/main/design/repository-structure/) for more details.\n\n## Cloning the essential Autoware source code\n\n⭐ Check the [**🔗‍ Installation guide**](https://autowarefoundation.github.io/autoware-documentation/main/installation/) for detailed setup instructions.\n\nHere is a brief summary of the steps:\n\n```bash\n# Navigate to the repository root\ncd autoware\n\n# Clone the Autoware source code into src/\nvcs import src < repositories/autoware.repos\n```\n\nThis command will clone and check out the correct versions as defined in [`autoware.repos`](../repositories/autoware.repos)\n\n> **Note**\n> Make sure `vcs2l` is installed before running this command:\n>\n> ```bash\n> sudo apt install python3-vcs2l\n> ```\n\nIn the future, to update all source repositories to their latest versions as defined in the manifest file, run:\n\n```bash\nvcs pull src\n```\n"
  }
]