From f33979228a57fa72c8a3cce9cd190f71fd8e9f49 Mon Sep 17 00:00:00 2001 From: Andrew Halberstadt Date: Thu, 18 Apr 2024 17:50:50 +0000 Subject: [PATCH] Bug 1868440 - [ci] Upgrade taskcluster-taskgraph to v7.4.0, r=perftest-reviewers,geckoview-reviewers,ci-and-tooling,devtools-reviewers,taskgraph-reviewers,releng-reviewers,mach-reviewers,omc-reviewers,jmaher,hneiva,aminomancer,jari,dom-storage-reviewers,afinder,asuth,bhearsum,owlish Differential Revision: https://phabricator.services.mozilla.com/D206260 --- build/build-clang/README | 2 +- build/docs/sccache-dist.rst | 2 +- build/docs/toolchains.rst | 2 +- build/sparse-profiles/sphinx-docs | 2 +- .../client/aboutdebugging/test/node/README.md | 2 +- .../client/accessibility/test/node/README.md | 2 +- .../client/bin/devtools-node-test-runner.js | 2 +- devtools/client/framework/test/node/README.md | 2 +- devtools/docs/contributor/tests/node-tests.md | 2 +- docs/code-quality/lint/create.rst | 2 +- .../lint/linters/condprof-addons.rst | 10 +- .../code-quality/static-analysis/existing.rst | 2 +- .../signing/signing_macos_build.rst | 4 +- .../workersAndStorage/PerformanceTesting.rst | 6 +- dom/indexedDB/test/perfdocs/index.rst | 2 +- intl/l10n/docs/crosschannel/repositories.rst | 2 +- .../docs/shared/android/device_testing.md | 2 +- python/mozbuild/mozbuild/backend/common.py | 2 +- python/mozbuild/mozbuild/toolchains.py | 4 +- .../mozperftest/mozperftest/mach_commands.py | 2 +- taskcluster/android_taskgraph/target_tasks.py | 12 +- taskcluster/{ci => }/config.yml | 0 taskcluster/docker/updatebot/windows-setup.sh | 4 +- taskcluster/docs/howto/index.rst | 4 +- taskcluster/docs/kinds.rst | 2 +- taskcluster/docs/kinds/test.rst | 2 +- taskcluster/docs/partner-attribution.rst | 2 +- taskcluster/docs/partner-repacks.rst | 2 +- taskcluster/docs/taskgraph.rst | 6 +- taskcluster/docs/versioncontrol.rst | 2 +- taskcluster/gecko_taskgraph/main.py | 6 +- taskcluster/gecko_taskgraph/target_tasks.py | 114 ++++----- taskcluster/gecko_taskgraph/test/conftest.py | 2 +- .../gecko_taskgraph/test/test_actions_util.py | 1 + .../test/test_transforms_job.py | 2 +- .../gecko_taskgraph/transforms/diffoscope.py | 2 +- .../transforms/reprocess_symbols.py | 2 +- .../gecko_taskgraph/transforms/task.py | 6 +- .../transforms/upload_generated_sources.py | 2 +- .../transforms/upload_symbols.py | 2 +- taskcluster/gecko_taskgraph/util/chunking.py | 4 +- taskcluster/gecko_taskgraph/util/docker.py | 2 +- taskcluster/gecko_taskgraph/util/partners.py | 2 +- taskcluster/{ci => kinds}/addon/kind.yml | 0 .../{ci => kinds}/android-l10n/kind.yml | 0 .../android-startup-test/kind.yml | 0 .../{ci => kinds}/artifact-build/kind.yml | 0 .../{ci => kinds}/attribution-l10n/kind.yml | 0 .../{ci => kinds}/attribution/kind.yml | 0 taskcluster/{ci => kinds}/balrog/kind.yml | 0 .../beetmover-android-app/kind.yml | 0 .../{ci => kinds}/beetmover-apt/kind.yml | 0 .../beetmover-checksums/kind.yml | 0 .../beetmover-components/kind.yml | 0 .../beetmover-geckoview/kind.yml | 0 .../beetmover-repackage/kind.yml | 0 .../{ci => kinds}/beetmover-source/kind.yml | 0 taskcluster/{ci => kinds}/bootstrap/kind.yml | 0 .../{ci => kinds}/bouncer-locations/kind.yml | 0 taskcluster/{ci => kinds}/build-apk/kind.yml | 0 .../{ci => kinds}/build-bundle/kind.yml | 0 .../{ci => kinds}/build-components/kind.yml | 0 .../{ci => kinds}/build-fat-aar/kind.yml | 0 .../build-mac-notarization/kind.yml | 0 .../{ci => kinds}/build-mac-signing/kind.yml | 0 .../build-samples-browser/kind.yml | 0 .../{ci => kinds}/build-signing/kind.yml | 0 .../{ci => kinds}/build/android-asan.yml | 0 .../{ci => kinds}/build/android-stuff.yml | 0 taskcluster/{ci => kinds}/build/android.yml | 0 taskcluster/{ci => kinds}/build/ios.yml | 0 taskcluster/{ci => kinds}/build/kind.yml | 0 .../build/linux-base-toolchains.yml | 0 taskcluster/{ci => kinds}/build/linux.yml | 0 .../{ci => kinds}/build/macosx-native.yml | 0 taskcluster/{ci => kinds}/build/macosx.yml | 0 .../{ci => kinds}/build/windows-mingw.yml | 0 taskcluster/{ci => kinds}/build/windows.yml | 0 .../{ci => kinds}/code-review/kind.yml | 0 taskcluster/{ci => kinds}/condprof/kind.yml | 0 .../{ci => kinds}/cron-bouncer-check/kind.yml | 0 .../{ci => kinds}/diffoscope/artifacts.yml | 0 taskcluster/{ci => kinds}/diffoscope/kind.yml | 0 .../{ci => kinds}/diffoscope/reproducible.yml | 0 .../{ci => kinds}/docker-image/kind.yml | 0 .../{ci => kinds}/fetch/benchmarks.yml | 0 .../{ci => kinds}/fetch/browsertime.yml | 0 .../{ci => kinds}/fetch/chromium-fetch.yml | 0 taskcluster/{ci => kinds}/fetch/kind.yml | 0 taskcluster/{ci => kinds}/fetch/moz.build | 0 .../{ci => kinds}/fetch/resource-monitor.yml | 0 .../fetch/toolchain-clang-tidy-external.yml | 0 .../{ci => kinds}/fetch/toolchains.yml | 0 taskcluster/{ci => kinds}/fetch/updatebot.yml | 0 taskcluster/{ci => kinds}/fuzzing/kind.yml | 0 taskcluster/{ci => kinds}/fxrecord/kind.yml | 0 .../geckodriver-mac-notarization/kind.yml | 0 .../geckodriver-signing/kind.yml | 0 .../{ci => kinds}/generate-profile/kind.yml | 0 taskcluster/{ci => kinds}/hazard/kind.yml | 0 .../{ci => kinds}/instrumented-build/kind.yml | 0 taskcluster/{ci => kinds}/l10n-bump/kind.yml | 0 .../{ci => kinds}/l10n-cross-channel/kind.yml | 0 taskcluster/{ci => kinds}/l10n/kind.yml | 0 .../mar-signing-autograph-stage/kind.yml | 0 .../{ci => kinds}/mar-signing-l10n/kind.yml | 0 .../{ci => kinds}/mar-signing/kind.yml | 0 .../{ci => kinds}/maybe-release/kind.yml | 0 .../{ci => kinds}/merge-automation/kind.yml | 0 .../{ci => kinds}/openh264-plugin/kind.yml | 0 .../{ci => kinds}/openh264-signing/kind.yml | 0 taskcluster/{ci => kinds}/packages/debian.yml | 0 taskcluster/{ci => kinds}/packages/kind.yml | 0 taskcluster/{ci => kinds}/packages/ubuntu.yml | 0 .../{ci => kinds}/partials-signing/kind.yml | 0 taskcluster/{ci => kinds}/partials/kind.yml | 0 .../{ci => kinds}/perftest/android.yml | 0 taskcluster/{ci => kinds}/perftest/kind.yml | 0 taskcluster/{ci => kinds}/perftest/linux.yml | 0 taskcluster/{ci => kinds}/perftest/macosx.yml | 0 .../{ci => kinds}/perftest/windows.yml | 0 .../{ci => kinds}/post-balrog-dummy/kind.yml | 0 .../post-beetmover-checksums-dummy/kind.yml | 0 .../post-beetmover-components-dummy/kind.yml | 0 .../post-beetmover-dummy/kind.yml | 0 .../post-langpack-dummy/kind.yml | 0 .../{ci => kinds}/post-signing/kind.yml | 0 .../post-update-verify-dummy/kind.yml | 0 .../{ci => kinds}/push-bundle/kind.yml | 0 .../release-balrog-scheduling/kind.yml | 0 .../release-balrog-submit-toplevel/kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../release-bouncer-aliases/kind.yml | 0 .../release-bouncer-check/kind.yml | 0 .../release-bouncer-sub/kind.yml | 0 .../release-early-tagging/kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../release-eme-free-repack/kind.yml | 0 .../release-final-verify/kind.yml | 0 .../release-flatpak-push/kind.yml | 0 .../release-flatpak-repackage/kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../release-generate-checksums/kind.yml | 0 .../release-mark-as-shipped/kind.yml | 0 .../{ci => kinds}/release-msix-push/kind.yml | 0 .../release-notify-av-announce/kind.yml | 0 .../release-notify-promote/kind.yml | 0 .../release-notify-push/kind.yml | 0 .../release-notify-ship/kind.yml | 0 .../release-notify-started/kind.yml | 0 .../release-notify-testrail/kind.yml | 0 .../kind.yml | 0 .../release-partner-attribution/kind.yml | 0 .../release-partner-repack-beetmover/kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../release-partner-repack-repackage/kind.yml | 0 .../release-partner-repack/kind.yml | 0 .../release-push-langpacks/kind.yml | 0 .../kind.yml | 0 .../kind.yml | 0 .../release-secondary-final-verify/kind.yml | 0 .../release-secondary-flatpak-push/kind.yml | 0 .../release-secondary-notify-ship/kind.yml | 0 .../kind.yml | 0 .../release-secondary-update-verify/kind.yml | 0 .../release-snap-repackage/kind.yml | 0 .../release-source-checksums-signing/kind.yml | 0 .../release-source-signing/kind.yml | 0 .../{ci => kinds}/release-source/kind.yml | 0 .../kind.yml | 0 .../release-update-verify-config/kind.yml | 0 .../release-update-verify-next/kind.yml | 0 .../release-update-verify/kind.yml | 0 .../release-version-bump/kind.yml | 0 .../{ci => kinds}/repackage-deb-l10n/kind.yml | 0 .../{ci => kinds}/repackage-deb/kind.yml | 0 .../{ci => kinds}/repackage-l10n/kind.yml | 0 .../{ci => kinds}/repackage-msi/kind.yml | 0 .../{ci => kinds}/repackage-msix/kind.yml | 0 .../repackage-shippable-l10n-msix/kind.yml | 0 .../repackage-signing-l10n/kind.yml | 0 .../repackage-signing-msi/kind.yml | 0 .../repackage-signing-msix/kind.yml | 0 .../kind.yml | 0 .../{ci => kinds}/repackage-signing/kind.yml | 0 taskcluster/{ci => kinds}/repackage/kind.yml | 0 .../{ci => kinds}/repo-update/kind.yml | 0 .../scriptworker-canary/kind.yml | 0 taskcluster/{ci => kinds}/searchfox/kind.yml | 0 taskcluster/{ci => kinds}/sentry/kind.yml | 0 .../shippable-l10n-mac-notarization/kind.yml | 0 .../shippable-l10n-mac-signing/kind.yml | 0 .../shippable-l10n-signing/kind.yml | 0 .../{ci => kinds}/shippable-l10n/kind.yml | 0 .../{ci => kinds}/signing-apk/kind.yml | 0 .../{ci => kinds}/signing-bundle/kind.yml | 0 taskcluster/{ci => kinds}/signing/kind.yml | 0 .../snap-upstream-build/kind.yml | 0 .../{ci => kinds}/snap-upstream-test/kind.yml | 0 .../source-test/android-compare-locales.yml | 0 .../source-test/android-detekt.yml | 0 .../source-test/android-lint.yml | 0 .../{ci => kinds}/source-test/buildconfig.yml | 0 .../{ci => kinds}/source-test/clang.yml | 0 .../{ci => kinds}/source-test/cram.yml | 0 taskcluster/{ci => kinds}/source-test/doc.yml | 0 .../source-test/file-metadata.yml | 0 .../{ci => kinds}/source-test/jsshell.yml | 0 .../{ci => kinds}/source-test/kind.yml | 0 .../{ci => kinds}/source-test/ktlint.yml | 0 .../source-test/mozlint-android.yml | 0 .../{ci => kinds}/source-test/mozlint.yml | 0 .../{ci => kinds}/source-test/node.yml | 0 .../{ci => kinds}/source-test/puppeteer.yml | 0 .../{ci => kinds}/source-test/python.yml | 6 +- .../source-test/shadow-scheduler.yml | 0 .../{ci => kinds}/source-test/taskgraph.yml | 2 +- .../{ci => kinds}/source-test/vendor.yml | 0 .../{ci => kinds}/source-test/webcompat.yml | 0 .../{ci => kinds}/source-test/webidl.yml | 0 .../source-test/wpt-manifest.yml | 0 .../source-test/wpt-metadata.yml | 0 .../{ci => kinds}/spidermonkey/kind.yml | 2 +- .../{ci => kinds}/spidermonkey/linux.yml | 0 .../{ci => kinds}/spidermonkey/windows.yml | 0 .../{ci => kinds}/startup-test/kind.yml | 0 .../static-analysis-autotest/kind.yml | 0 .../system-symbols-reprocess/kind.yml | 0 .../system-symbols-upload/kind.yml | 0 .../{ci => kinds}/system-symbols/kind.yml | 0 taskcluster/{ci => kinds}/test-apk/kind.yml | 0 .../{ci => kinds}/test-components/kind.yml | 0 taskcluster/{ci => kinds}/test/awsy.yml | 0 .../test/browsertime-desktop.yml | 0 .../{ci => kinds}/test/browsertime-mobile.yml | 0 taskcluster/{ci => kinds}/test/compiled.yml | 0 taskcluster/{ci => kinds}/test/firefox-ui.yml | 0 taskcluster/{ci => kinds}/test/kind.yml | 0 taskcluster/{ci => kinds}/test/marionette.yml | 0 taskcluster/{ci => kinds}/test/misc.yml | 0 taskcluster/{ci => kinds}/test/mochitest.yml | 0 taskcluster/{ci => kinds}/test/reftest.yml | 0 taskcluster/{ci => kinds}/test/talos.yml | 0 .../{ci => kinds}/test/test-platforms.yml | 0 taskcluster/{ci => kinds}/test/test-sets.yml | 0 taskcluster/{ci => kinds}/test/variants.yml | 0 .../{ci => kinds}/test/web-platform.yml | 0 taskcluster/{ci => kinds}/test/xpcshell.yml | 0 .../{ci => kinds}/toolchain/android.yml | 0 .../{ci => kinds}/toolchain/cargo-vet.yml | 0 .../{ci => kinds}/toolchain/cbindgen.yml | 0 .../{ci => kinds}/toolchain/clang-tidy.yml | 0 taskcluster/{ci => kinds}/toolchain/clang.yml | 0 .../{ci => kinds}/toolchain/compiler-rt.yml | 0 .../toolchain/dist-toolchains.yml | 0 .../{ci => kinds}/toolchain/dump-syms.yml | 0 .../{ci => kinds}/toolchain/fix-stacks.yml | 0 taskcluster/{ci => kinds}/toolchain/gcc.yml | 0 .../{ci => kinds}/toolchain/geckodriver.yml | 0 taskcluster/{ci => kinds}/toolchain/gn.yml | 0 taskcluster/{ci => kinds}/toolchain/grcov.yml | 0 .../{ci => kinds}/toolchain/hostutils.yml | 0 taskcluster/{ci => kinds}/toolchain/kind.yml | 0 .../{ci => kinds}/toolchain/libunwind.yml | 0 .../toolchain/llvm-symbolizer.yml | 0 .../{ci => kinds}/toolchain/macos-sdk.yml | 0 taskcluster/{ci => kinds}/toolchain/mingw.yml | 0 .../toolchain/minidump-stackwalk.yml | 0 taskcluster/{ci => kinds}/toolchain/misc.yml | 0 taskcluster/{ci => kinds}/toolchain/nasm.yml | 0 taskcluster/{ci => kinds}/toolchain/node.yml | 0 .../{ci => kinds}/toolchain/pkgconf.yml | 0 .../{ci => kinds}/toolchain/python.yml | 0 .../toolchain/resourcemonitor.yml | 0 .../{ci => kinds}/toolchain/rust-size.yml | 0 taskcluster/{ci => kinds}/toolchain/rust.yml | 0 .../{ci => kinds}/toolchain/sccache.yml | 0 .../{ci => kinds}/toolchain/sysroot.yml | 0 .../trigger-comm-central/kind.yml | 0 .../{ci => kinds}/ui-test-apk/kind.yml | 0 taskcluster/{ci => kinds}/updatebot/kind.yml | 2 +- taskcluster/{ci => kinds}/updatebot/moz.build | 0 .../tooltool-manifests/updatebot.manifest | 0 .../upload-generated-sources-dummy/kind.yml | 0 .../upload-generated-sources/kind.yml | 0 .../upload-symbols-dummy/kind.yml | 0 .../{ci => kinds}/upload-symbols/kind.yml | 0 taskcluster/{ci => kinds}/valgrind/kind.yml | 0 taskcluster/{ci => kinds}/webrender/kind.yml | 0 taskcluster/test/params/mc-nightly-all.yml | 14 +- testing/condprofile/condprof/util.py | 2 +- testing/docs/tests-for-new-config/index.rst | 4 +- testing/docs/tests-for-new-config/manual.rst | 4 +- testing/mach_commands.py | 2 +- testing/perfdocs/generated/IndexedDB.rst | 2 +- testing/perfdocs/generated/debugging.rst | 4 +- testing/perfdocs/generated/mach-try-perf.rst | 2 +- testing/perfdocs/generated/talos.rst | 4 +- .../mach-try-perf/perfdocs/index.rst | 2 +- testing/raptor/raptor/perfdocs/debugging.rst | 4 +- testing/skipfails.py | 2 +- testing/talos/perfdocs/index.rst | 4 +- .../test/test_integration.py | 92 +++---- third_party/python/poetry.lock | 9 +- third_party/python/requirements.in | 2 +- third_party/python/requirements.txt | 7 +- .../METADATA | 28 --- .../RECORD | 80 ------- .../LICENSE | 0 .../METADATA | 123 ++++++++++ .../RECORD | 79 ++++++ .../WHEEL | 2 +- .../entry_points.txt | 0 .../top_level.txt | 0 .../taskgraph/__init__.py | 2 +- .../taskgraph/actions/add_new_jobs.py | 2 +- .../taskgraph/actions/cancel.py | 4 +- .../taskgraph/actions/cancel_all.py | 4 +- .../taskgraph/actions/rebuild_cached_tasks.py | 2 +- .../taskgraph/actions/registry.py | 34 ++- .../taskgraph/actions/retrigger.py | 26 +- .../taskgraph/actions/util.py | 15 +- .../taskcluster_taskgraph/taskgraph/config.py | 20 +- .../taskcluster_taskgraph/taskgraph/create.py | 2 +- .../taskgraph/decision.py | 20 +- .../taskcluster_taskgraph/taskgraph/docker.py | 11 +- .../taskgraph/files_changed.py | 1 + .../taskgraph/generator.py | 8 +- .../taskgraph/loader/default.py | 4 +- .../taskcluster_taskgraph/taskgraph/main.py | 39 ++- .../taskcluster_taskgraph/taskgraph/morph.py | 1 + .../taskgraph/optimize/base.py | 12 + .../taskgraph/optimize/strategies.py | 4 +- .../taskgraph/parameters.py | 2 +- .../taskgraph/run-task/run-task | 14 +- .../taskgraph/target_tasks.py | 8 +- .../taskgraph/transforms/__init__.py | 3 - .../taskgraph/transforms/base.py | 2 +- .../taskgraph/transforms/code_review.py | 10 +- .../taskgraph/transforms/docker_image.py | 16 +- .../taskgraph/transforms/fetch.py | 65 ++--- .../taskgraph/transforms/from_deps.py | 2 +- .../transforms/{job => run}/__init__.py | 225 +++++++++--------- .../transforms/{job => run}/common.py | 40 ++-- .../transforms/{job => run}/index_search.py | 8 +- .../transforms/{job => run}/run_task.py | 36 +-- .../transforms/{job => run}/toolchain.py | 38 +-- .../taskgraph/transforms/task.py | 61 +++-- .../taskgraph/transforms/task_context.py | 10 +- .../taskgraph/util/archive.py | 52 +++- .../taskgraph/util/cached_tasks.py | 47 ++-- .../taskgraph/util/decision.py | 79 ------ .../taskgraph/util/docker.py | 2 +- .../taskgraph/util/hash.py | 11 +- .../taskgraph/util/keyed_by.py | 16 +- .../taskgraph/util/parameterization.py | 14 +- .../taskgraph/util/schema.py | 12 +- .../taskgraph/util/shell.py | 2 +- .../taskgraph/util/taskcluster.py | 54 ++++- .../taskgraph/util/time.py | 4 +- .../taskgraph/util/treeherder.py | 15 +- .../taskgraph/util/vcs.py | 36 +-- .../taskgraph/util/verify.py | 27 +-- .../taskgraph/util/yaml.py | 5 +- .../messaging-system/schemas/index.rst | 2 +- tools/fuzzing/smoke/smoke.py | 2 +- tools/lint/condprof-addons.yml | 2 +- tools/lint/condprof-addons/__init__.py | 2 +- tools/lint/rejected-words.yml | 2 +- tools/signing/macos/mach_commands.py | 2 +- tools/tryselect/selectors/perf.py | 2 +- tools/tryselect/selectors/release.py | 2 +- tools/tryselect/task_config.py | 2 +- tools/tryselect/tasks.py | 2 +- 387 files changed, 999 insertions(+), 871 deletions(-) rename taskcluster/{ci => }/config.yml (100%) rename taskcluster/{ci => kinds}/addon/kind.yml (100%) rename taskcluster/{ci => kinds}/android-l10n/kind.yml (100%) rename taskcluster/{ci => kinds}/android-startup-test/kind.yml (100%) rename taskcluster/{ci => kinds}/artifact-build/kind.yml (100%) rename taskcluster/{ci => kinds}/attribution-l10n/kind.yml (100%) rename taskcluster/{ci => kinds}/attribution/kind.yml (100%) rename taskcluster/{ci => kinds}/balrog/kind.yml (100%) rename taskcluster/{ci => kinds}/beetmover-android-app/kind.yml (100%) rename taskcluster/{ci => kinds}/beetmover-apt/kind.yml (100%) rename taskcluster/{ci => kinds}/beetmover-checksums/kind.yml (100%) rename taskcluster/{ci => kinds}/beetmover-components/kind.yml (100%) rename taskcluster/{ci => kinds}/beetmover-geckoview/kind.yml (100%) rename taskcluster/{ci => kinds}/beetmover-repackage/kind.yml (100%) rename taskcluster/{ci => kinds}/beetmover-source/kind.yml (100%) rename taskcluster/{ci => kinds}/bootstrap/kind.yml (100%) rename taskcluster/{ci => kinds}/bouncer-locations/kind.yml (100%) rename taskcluster/{ci => kinds}/build-apk/kind.yml (100%) rename taskcluster/{ci => kinds}/build-bundle/kind.yml (100%) rename taskcluster/{ci => kinds}/build-components/kind.yml (100%) rename taskcluster/{ci => kinds}/build-fat-aar/kind.yml (100%) rename taskcluster/{ci => kinds}/build-mac-notarization/kind.yml (100%) rename taskcluster/{ci => kinds}/build-mac-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/build-samples-browser/kind.yml (100%) rename taskcluster/{ci => kinds}/build-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/build/android-asan.yml (100%) rename taskcluster/{ci => kinds}/build/android-stuff.yml (100%) rename taskcluster/{ci => kinds}/build/android.yml (100%) rename taskcluster/{ci => kinds}/build/ios.yml (100%) rename taskcluster/{ci => kinds}/build/kind.yml (100%) rename taskcluster/{ci => kinds}/build/linux-base-toolchains.yml (100%) rename taskcluster/{ci => kinds}/build/linux.yml (100%) rename taskcluster/{ci => kinds}/build/macosx-native.yml (100%) rename taskcluster/{ci => kinds}/build/macosx.yml (100%) rename taskcluster/{ci => kinds}/build/windows-mingw.yml (100%) rename taskcluster/{ci => kinds}/build/windows.yml (100%) rename taskcluster/{ci => kinds}/code-review/kind.yml (100%) rename taskcluster/{ci => kinds}/condprof/kind.yml (100%) rename taskcluster/{ci => kinds}/cron-bouncer-check/kind.yml (100%) rename taskcluster/{ci => kinds}/diffoscope/artifacts.yml (100%) rename taskcluster/{ci => kinds}/diffoscope/kind.yml (100%) rename taskcluster/{ci => kinds}/diffoscope/reproducible.yml (100%) rename taskcluster/{ci => kinds}/docker-image/kind.yml (100%) rename taskcluster/{ci => kinds}/fetch/benchmarks.yml (100%) rename taskcluster/{ci => kinds}/fetch/browsertime.yml (100%) rename taskcluster/{ci => kinds}/fetch/chromium-fetch.yml (100%) rename taskcluster/{ci => kinds}/fetch/kind.yml (100%) rename taskcluster/{ci => kinds}/fetch/moz.build (100%) rename taskcluster/{ci => kinds}/fetch/resource-monitor.yml (100%) rename taskcluster/{ci => kinds}/fetch/toolchain-clang-tidy-external.yml (100%) rename taskcluster/{ci => kinds}/fetch/toolchains.yml (100%) rename taskcluster/{ci => kinds}/fetch/updatebot.yml (100%) rename taskcluster/{ci => kinds}/fuzzing/kind.yml (100%) rename taskcluster/{ci => kinds}/fxrecord/kind.yml (100%) rename taskcluster/{ci => kinds}/geckodriver-mac-notarization/kind.yml (100%) rename taskcluster/{ci => kinds}/geckodriver-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/generate-profile/kind.yml (100%) rename taskcluster/{ci => kinds}/hazard/kind.yml (100%) rename taskcluster/{ci => kinds}/instrumented-build/kind.yml (100%) rename taskcluster/{ci => kinds}/l10n-bump/kind.yml (100%) rename taskcluster/{ci => kinds}/l10n-cross-channel/kind.yml (100%) rename taskcluster/{ci => kinds}/l10n/kind.yml (100%) rename taskcluster/{ci => kinds}/mar-signing-autograph-stage/kind.yml (100%) rename taskcluster/{ci => kinds}/mar-signing-l10n/kind.yml (100%) rename taskcluster/{ci => kinds}/mar-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/maybe-release/kind.yml (100%) rename taskcluster/{ci => kinds}/merge-automation/kind.yml (100%) rename taskcluster/{ci => kinds}/openh264-plugin/kind.yml (100%) rename taskcluster/{ci => kinds}/openh264-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/packages/debian.yml (100%) rename taskcluster/{ci => kinds}/packages/kind.yml (100%) rename taskcluster/{ci => kinds}/packages/ubuntu.yml (100%) rename taskcluster/{ci => kinds}/partials-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/partials/kind.yml (100%) rename taskcluster/{ci => kinds}/perftest/android.yml (100%) rename taskcluster/{ci => kinds}/perftest/kind.yml (100%) rename taskcluster/{ci => kinds}/perftest/linux.yml (100%) rename taskcluster/{ci => kinds}/perftest/macosx.yml (100%) rename taskcluster/{ci => kinds}/perftest/windows.yml (100%) rename taskcluster/{ci => kinds}/post-balrog-dummy/kind.yml (100%) rename taskcluster/{ci => kinds}/post-beetmover-checksums-dummy/kind.yml (100%) rename taskcluster/{ci => kinds}/post-beetmover-components-dummy/kind.yml (100%) rename taskcluster/{ci => kinds}/post-beetmover-dummy/kind.yml (100%) rename taskcluster/{ci => kinds}/post-langpack-dummy/kind.yml (100%) rename taskcluster/{ci => kinds}/post-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/post-update-verify-dummy/kind.yml (100%) rename taskcluster/{ci => kinds}/push-bundle/kind.yml (100%) rename taskcluster/{ci => kinds}/release-balrog-scheduling/kind.yml (100%) rename taskcluster/{ci => kinds}/release-balrog-submit-toplevel/kind.yml (100%) rename taskcluster/{ci => kinds}/release-beetmover-push-to-release/kind.yml (100%) rename taskcluster/{ci => kinds}/release-beetmover-signed-langpacks-checksums/kind.yml (100%) rename taskcluster/{ci => kinds}/release-beetmover-signed-langpacks/kind.yml (100%) rename taskcluster/{ci => kinds}/release-beetmover-source-checksums/kind.yml (100%) rename taskcluster/{ci => kinds}/release-bouncer-aliases/kind.yml (100%) rename taskcluster/{ci => kinds}/release-bouncer-check/kind.yml (100%) rename taskcluster/{ci => kinds}/release-bouncer-sub/kind.yml (100%) rename taskcluster/{ci => kinds}/release-early-tagging/kind.yml (100%) rename taskcluster/{ci => kinds}/release-eme-free-repack-beetmover-checksums/kind.yml (100%) rename taskcluster/{ci => kinds}/release-eme-free-repack-beetmover/kind.yml (100%) rename taskcluster/{ci => kinds}/release-eme-free-repack-mac-notarization/kind.yml (100%) rename taskcluster/{ci => kinds}/release-eme-free-repack-mac-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/release-eme-free-repack-repackage-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/release-eme-free-repack-repackage/kind.yml (100%) rename taskcluster/{ci => kinds}/release-eme-free-repack/kind.yml (100%) rename taskcluster/{ci => kinds}/release-final-verify/kind.yml (100%) rename taskcluster/{ci => kinds}/release-flatpak-push/kind.yml (100%) rename taskcluster/{ci => kinds}/release-flatpak-repackage/kind.yml (100%) rename taskcluster/{ci => kinds}/release-generate-checksums-beetmover/kind.yml (100%) rename taskcluster/{ci => kinds}/release-generate-checksums-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/release-generate-checksums/kind.yml (100%) rename taskcluster/{ci => kinds}/release-mark-as-shipped/kind.yml (100%) rename taskcluster/{ci => kinds}/release-msix-push/kind.yml (100%) rename taskcluster/{ci => kinds}/release-notify-av-announce/kind.yml (100%) rename taskcluster/{ci => kinds}/release-notify-promote/kind.yml (100%) rename taskcluster/{ci => kinds}/release-notify-push/kind.yml (100%) rename taskcluster/{ci => kinds}/release-notify-ship/kind.yml (100%) rename taskcluster/{ci => kinds}/release-notify-started/kind.yml (100%) rename taskcluster/{ci => kinds}/release-notify-testrail/kind.yml (100%) rename taskcluster/{ci => kinds}/release-partner-attribution-beetmover/kind.yml (100%) rename taskcluster/{ci => kinds}/release-partner-attribution/kind.yml (100%) rename taskcluster/{ci => kinds}/release-partner-repack-beetmover/kind.yml (100%) rename taskcluster/{ci => kinds}/release-partner-repack-bouncer-sub/kind.yml (100%) rename taskcluster/{ci => kinds}/release-partner-repack-chunking-dummy/kind.yml (100%) rename taskcluster/{ci => kinds}/release-partner-repack-mac-notarization/kind.yml (100%) rename taskcluster/{ci => kinds}/release-partner-repack-mac-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/release-partner-repack-repackage-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/release-partner-repack-repackage/kind.yml (100%) rename taskcluster/{ci => kinds}/release-partner-repack/kind.yml (100%) rename taskcluster/{ci => kinds}/release-push-langpacks/kind.yml (100%) rename taskcluster/{ci => kinds}/release-secondary-balrog-scheduling/kind.yml (100%) rename taskcluster/{ci => kinds}/release-secondary-balrog-submit-toplevel/kind.yml (100%) rename taskcluster/{ci => kinds}/release-secondary-final-verify/kind.yml (100%) rename taskcluster/{ci => kinds}/release-secondary-flatpak-push/kind.yml (100%) rename taskcluster/{ci => kinds}/release-secondary-notify-ship/kind.yml (100%) rename taskcluster/{ci => kinds}/release-secondary-update-verify-config/kind.yml (100%) rename taskcluster/{ci => kinds}/release-secondary-update-verify/kind.yml (100%) rename taskcluster/{ci => kinds}/release-snap-repackage/kind.yml (100%) rename taskcluster/{ci => kinds}/release-source-checksums-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/release-source-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/release-source/kind.yml (100%) rename taskcluster/{ci => kinds}/release-update-verify-config-next/kind.yml (100%) rename taskcluster/{ci => kinds}/release-update-verify-config/kind.yml (100%) rename taskcluster/{ci => kinds}/release-update-verify-next/kind.yml (100%) rename taskcluster/{ci => kinds}/release-update-verify/kind.yml (100%) rename taskcluster/{ci => kinds}/release-version-bump/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-deb-l10n/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-deb/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-l10n/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-msi/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-msix/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-shippable-l10n-msix/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-signing-l10n/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-signing-msi/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-signing-msix/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-signing-shippable-l10n-msix/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/repackage/kind.yml (100%) rename taskcluster/{ci => kinds}/repo-update/kind.yml (100%) rename taskcluster/{ci => kinds}/scriptworker-canary/kind.yml (100%) rename taskcluster/{ci => kinds}/searchfox/kind.yml (100%) rename taskcluster/{ci => kinds}/sentry/kind.yml (100%) rename taskcluster/{ci => kinds}/shippable-l10n-mac-notarization/kind.yml (100%) rename taskcluster/{ci => kinds}/shippable-l10n-mac-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/shippable-l10n-signing/kind.yml (100%) rename taskcluster/{ci => kinds}/shippable-l10n/kind.yml (100%) rename taskcluster/{ci => kinds}/signing-apk/kind.yml (100%) rename taskcluster/{ci => kinds}/signing-bundle/kind.yml (100%) rename taskcluster/{ci => kinds}/signing/kind.yml (100%) rename taskcluster/{ci => kinds}/snap-upstream-build/kind.yml (100%) rename taskcluster/{ci => kinds}/snap-upstream-test/kind.yml (100%) rename taskcluster/{ci => kinds}/source-test/android-compare-locales.yml (100%) rename taskcluster/{ci => kinds}/source-test/android-detekt.yml (100%) rename taskcluster/{ci => kinds}/source-test/android-lint.yml (100%) rename taskcluster/{ci => kinds}/source-test/buildconfig.yml (100%) rename taskcluster/{ci => kinds}/source-test/clang.yml (100%) rename taskcluster/{ci => kinds}/source-test/cram.yml (100%) rename taskcluster/{ci => kinds}/source-test/doc.yml (100%) rename taskcluster/{ci => kinds}/source-test/file-metadata.yml (100%) rename taskcluster/{ci => kinds}/source-test/jsshell.yml (100%) rename taskcluster/{ci => kinds}/source-test/kind.yml (100%) rename taskcluster/{ci => kinds}/source-test/ktlint.yml (100%) rename taskcluster/{ci => kinds}/source-test/mozlint-android.yml (100%) rename taskcluster/{ci => kinds}/source-test/mozlint.yml (100%) rename taskcluster/{ci => kinds}/source-test/node.yml (100%) rename taskcluster/{ci => kinds}/source-test/puppeteer.yml (100%) rename taskcluster/{ci => kinds}/source-test/python.yml (99%) rename taskcluster/{ci => kinds}/source-test/shadow-scheduler.yml (100%) rename taskcluster/{ci => kinds}/source-test/taskgraph.yml (97%) rename taskcluster/{ci => kinds}/source-test/vendor.yml (100%) rename taskcluster/{ci => kinds}/source-test/webcompat.yml (100%) rename taskcluster/{ci => kinds}/source-test/webidl.yml (100%) rename taskcluster/{ci => kinds}/source-test/wpt-manifest.yml (100%) rename taskcluster/{ci => kinds}/source-test/wpt-metadata.yml (100%) rename taskcluster/{ci => kinds}/spidermonkey/kind.yml (97%) rename taskcluster/{ci => kinds}/spidermonkey/linux.yml (100%) rename taskcluster/{ci => kinds}/spidermonkey/windows.yml (100%) rename taskcluster/{ci => kinds}/startup-test/kind.yml (100%) rename taskcluster/{ci => kinds}/static-analysis-autotest/kind.yml (100%) rename taskcluster/{ci => kinds}/system-symbols-reprocess/kind.yml (100%) rename taskcluster/{ci => kinds}/system-symbols-upload/kind.yml (100%) rename taskcluster/{ci => kinds}/system-symbols/kind.yml (100%) rename taskcluster/{ci => kinds}/test-apk/kind.yml (100%) rename taskcluster/{ci => kinds}/test-components/kind.yml (100%) rename taskcluster/{ci => kinds}/test/awsy.yml (100%) rename taskcluster/{ci => kinds}/test/browsertime-desktop.yml (100%) rename taskcluster/{ci => kinds}/test/browsertime-mobile.yml (100%) rename taskcluster/{ci => kinds}/test/compiled.yml (100%) rename taskcluster/{ci => kinds}/test/firefox-ui.yml (100%) rename taskcluster/{ci => kinds}/test/kind.yml (100%) rename taskcluster/{ci => kinds}/test/marionette.yml (100%) rename taskcluster/{ci => kinds}/test/misc.yml (100%) rename taskcluster/{ci => kinds}/test/mochitest.yml (100%) rename taskcluster/{ci => kinds}/test/reftest.yml (100%) rename taskcluster/{ci => kinds}/test/talos.yml (100%) rename taskcluster/{ci => kinds}/test/test-platforms.yml (100%) rename taskcluster/{ci => kinds}/test/test-sets.yml (100%) rename taskcluster/{ci => kinds}/test/variants.yml (100%) rename taskcluster/{ci => kinds}/test/web-platform.yml (100%) rename taskcluster/{ci => kinds}/test/xpcshell.yml (100%) rename taskcluster/{ci => kinds}/toolchain/android.yml (100%) rename taskcluster/{ci => kinds}/toolchain/cargo-vet.yml (100%) rename taskcluster/{ci => kinds}/toolchain/cbindgen.yml (100%) rename taskcluster/{ci => kinds}/toolchain/clang-tidy.yml (100%) rename taskcluster/{ci => kinds}/toolchain/clang.yml (100%) rename taskcluster/{ci => kinds}/toolchain/compiler-rt.yml (100%) rename taskcluster/{ci => kinds}/toolchain/dist-toolchains.yml (100%) rename taskcluster/{ci => kinds}/toolchain/dump-syms.yml (100%) rename taskcluster/{ci => kinds}/toolchain/fix-stacks.yml (100%) rename taskcluster/{ci => kinds}/toolchain/gcc.yml (100%) rename taskcluster/{ci => kinds}/toolchain/geckodriver.yml (100%) rename taskcluster/{ci => kinds}/toolchain/gn.yml (100%) rename taskcluster/{ci => kinds}/toolchain/grcov.yml (100%) rename taskcluster/{ci => kinds}/toolchain/hostutils.yml (100%) rename taskcluster/{ci => kinds}/toolchain/kind.yml (100%) rename taskcluster/{ci => kinds}/toolchain/libunwind.yml (100%) rename taskcluster/{ci => kinds}/toolchain/llvm-symbolizer.yml (100%) rename taskcluster/{ci => kinds}/toolchain/macos-sdk.yml (100%) rename taskcluster/{ci => kinds}/toolchain/mingw.yml (100%) rename taskcluster/{ci => kinds}/toolchain/minidump-stackwalk.yml (100%) rename taskcluster/{ci => kinds}/toolchain/misc.yml (100%) rename taskcluster/{ci => kinds}/toolchain/nasm.yml (100%) rename taskcluster/{ci => kinds}/toolchain/node.yml (100%) rename taskcluster/{ci => kinds}/toolchain/pkgconf.yml (100%) rename taskcluster/{ci => kinds}/toolchain/python.yml (100%) rename taskcluster/{ci => kinds}/toolchain/resourcemonitor.yml (100%) rename taskcluster/{ci => kinds}/toolchain/rust-size.yml (100%) rename taskcluster/{ci => kinds}/toolchain/rust.yml (100%) rename taskcluster/{ci => kinds}/toolchain/sccache.yml (100%) rename taskcluster/{ci => kinds}/toolchain/sysroot.yml (100%) rename taskcluster/{ci => kinds}/trigger-comm-central/kind.yml (100%) rename taskcluster/{ci => kinds}/ui-test-apk/kind.yml (100%) rename taskcluster/{ci => kinds}/updatebot/kind.yml (97%) rename taskcluster/{ci => kinds}/updatebot/moz.build (100%) rename taskcluster/{ci => kinds}/updatebot/tooltool-manifests/updatebot.manifest (100%) rename taskcluster/{ci => kinds}/upload-generated-sources-dummy/kind.yml (100%) rename taskcluster/{ci => kinds}/upload-generated-sources/kind.yml (100%) rename taskcluster/{ci => kinds}/upload-symbols-dummy/kind.yml (100%) rename taskcluster/{ci => kinds}/upload-symbols/kind.yml (100%) rename taskcluster/{ci => kinds}/valgrind/kind.yml (100%) rename taskcluster/{ci => kinds}/webrender/kind.yml (100%) delete mode 100644 third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/METADATA delete mode 100644 third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/RECORD rename third_party/python/taskcluster_taskgraph/{taskcluster_taskgraph-6.3.0.dist-info => taskcluster_taskgraph-7.4.0.dist-info}/LICENSE (100%) create mode 100644 third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/METADATA create mode 100644 third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/RECORD rename third_party/python/taskcluster_taskgraph/{taskcluster_taskgraph-6.3.0.dist-info => taskcluster_taskgraph-7.4.0.dist-info}/WHEEL (65%) rename third_party/python/taskcluster_taskgraph/{taskcluster_taskgraph-6.3.0.dist-info => taskcluster_taskgraph-7.4.0.dist-info}/entry_points.txt (100%) rename third_party/python/taskcluster_taskgraph/{taskcluster_taskgraph-6.3.0.dist-info => taskcluster_taskgraph-7.4.0.dist-info}/top_level.txt (100%) rename third_party/python/taskcluster_taskgraph/taskgraph/transforms/{job => run}/__init__.py (68%) rename third_party/python/taskcluster_taskgraph/taskgraph/transforms/{job => run}/common.py (79%) rename third_party/python/taskcluster_taskgraph/taskgraph/transforms/{job => run}/index_search.py (84%) rename third_party/python/taskcluster_taskgraph/taskgraph/transforms/{job => run}/run_task.py (91%) rename third_party/python/taskcluster_taskgraph/taskgraph/transforms/{job => run}/toolchain.py (83%) delete mode 100644 third_party/python/taskcluster_taskgraph/taskgraph/util/decision.py diff --git a/build/build-clang/README b/build/build-clang/README index 5b13edeeb91e..6badf9c59eef 100644 --- a/build/build-clang/README +++ b/build/build-clang/README @@ -43,7 +43,7 @@ build-clang.py accepts a JSON config format with the following fields: * assertions: Whether to enable LLVM assertions. The default is false. * pgo: Whether to build with PGO (requires stages == 4). The default is false. -The revisions are defined in taskcluster/ci/fetch/toolchains.yml. They are usually commit sha1s corresponding to upstream tags. +The revisions are defined in taskcluster/kinds/fetch/toolchains.yml. They are usually commit sha1s corresponding to upstream tags. Environment Variables --------------------- diff --git a/build/docs/sccache-dist.rst b/build/docs/sccache-dist.rst index edd9ead90904..594c19f5fdfe 100644 --- a/build/docs/sccache-dist.rst +++ b/build/docs/sccache-dist.rst @@ -68,7 +68,7 @@ must read:: will contain the version of ``rustc`` used by automation builds, which may lag behind stable for a few days after Rust releases, which is specified by the task definition in - `this file `_. + `this file `_. For instance, to specify 1.37.0 rather than the current stable, run ``rustup toolchain add 1.37.0`` and point to ``/path/to/home/.rustup/toolchains/1.37.0-x86_64-apple-darwin/bin/rustc`` in your diff --git a/build/docs/toolchains.rst b/build/docs/toolchains.rst index f43972b8f35f..c7b8fcd33310 100644 --- a/build/docs/toolchains.rst +++ b/build/docs/toolchains.rst @@ -209,7 +209,7 @@ its content and ensure that's what you're looking for. (...) Once you have found the SDK you want, you can create or update toolchain tasks -in ``taskcluster/ci/toolchain/macosx-sdk.yml``. +in ``taskcluster/kinds/toolchain/macosx-sdk.yml``. The ``taskcluster/scripts/misc/unpack-sdk.py`` script takes the url of a SDK package, the sha512 hash for its content, the path to the SDK in the package, diff --git a/build/sparse-profiles/sphinx-docs b/build/sparse-profiles/sphinx-docs index 491d18b0802d..081904bee586 100644 --- a/build/sparse-profiles/sphinx-docs +++ b/build/sparse-profiles/sphinx-docs @@ -36,7 +36,7 @@ glob:testing/perfdocs/generated/** # Python API docs. glob:**/*.py # Referenced by some python files. -path:taskcluster/ci/docker-image/kind.yml +path:taskcluster/kinds/docker-image/kind.yml # Included in ipc docs path:ipc/ipdl/test/ipdl/ok/PMyManaged.ipdl diff --git a/devtools/client/aboutdebugging/test/node/README.md b/devtools/client/aboutdebugging/test/node/README.md index 58cbe556914c..f6a37e260700 100644 --- a/devtools/client/aboutdebugging/test/node/README.md +++ b/devtools/client/aboutdebugging/test/node/README.md @@ -19,4 +19,4 @@ The tests run on try on linux64 platforms. The complete name of try job is `devt Adding the tests to a try push depends on the try selector you are using. - try fuzzy: look for the job named `source-test-node-devtools-tests` -The configuration file for try can be found at `taskcluster/ci/source-test/node.yml` +The configuration file for try can be found at `taskcluster/kinds/source-test/node.yml` diff --git a/devtools/client/accessibility/test/node/README.md b/devtools/client/accessibility/test/node/README.md index 4b40aacffe57..574f886e9451 100644 --- a/devtools/client/accessibility/test/node/README.md +++ b/devtools/client/accessibility/test/node/README.md @@ -19,4 +19,4 @@ The tests run on try on linux64 platforms. The complete name of try job is `devt Adding the tests to a try push depends on the try selector you are using. - try fuzzy: look for the job named `source-test-node-devtools-tests` -The configuration file for try can be found at `taskcluster/ci/source-test/node.yml` +The configuration file for try can be found at `taskcluster/kinds/source-test/node.yml` diff --git a/devtools/client/bin/devtools-node-test-runner.js b/devtools/client/bin/devtools-node-test-runner.js index 087664b95746..3c08b6577f47 100644 --- a/devtools/client/bin/devtools-node-test-runner.js +++ b/devtools/client/bin/devtools-node-test-runner.js @@ -10,7 +10,7 @@ * This is a test runner dedicated to run DevTools node tests continuous integration * platforms. It will parse the logs to output errors compliant with treeherder tooling. * - * See taskcluster/ci/source-test/node.yml for the definition of the task running those + * See taskcluster/kinds/source-test/node.yml for the definition of the task running those * tests on try. */ diff --git a/devtools/client/framework/test/node/README.md b/devtools/client/framework/test/node/README.md index 9fb86edfc556..6530aaf87357 100644 --- a/devtools/client/framework/test/node/README.md +++ b/devtools/client/framework/test/node/README.md @@ -19,4 +19,4 @@ The tests run on try on linux64 platforms. The complete name of the try job is ` Adding the tests to a try push depends on the try selector you are using. - try fuzzy: look for the job named `source-test-node-devtools-tests` -The configuration file for try can be found at `taskcluster/ci/source-test/node.yml` +The configuration file for try can be found at `taskcluster/kinds/source-test/node.yml` diff --git a/devtools/docs/contributor/tests/node-tests.md b/devtools/docs/contributor/tests/node-tests.md index ab682ef61c0f..a9ebc2637f7d 100644 --- a/devtools/docs/contributor/tests/node-tests.md +++ b/devtools/docs/contributor/tests/node-tests.md @@ -15,7 +15,7 @@ They are also run when using the "devtools" preset: `./mach try --preset devtool ### Node tests try job definition -The definition of those try jobs can be found at [taskcluster/ci/source-test/node.yml](https://searchfox.org/mozilla-central/source/taskcluster/ci/source-test/node.yml). +The definition of those try jobs can be found at [taskcluster/kinds/source-test/node.yml](https://searchfox.org/mozilla-central/source/taskcluster/kinds/source-test/node.yml). The definition also contains the list of files that will trigger the node test jobs. Currently the the devtools tests run when any file is modified under `devtools/client` or `devtools/shared`. diff --git a/docs/code-quality/lint/create.rst b/docs/code-quality/lint/create.rst index 4da59b83a0c2..f3afe59ab530 100644 --- a/docs/code-quality/lint/create.rst +++ b/docs/code-quality/lint/create.rst @@ -347,7 +347,7 @@ Adding the linter to the CI First, the job will have to be declared in Taskcluster. -This should be done in the `mozlint Taskcluster configuration `_. +This should be done in the `mozlint Taskcluster configuration `_. You will need to define a symbol, how it is executed and on what kind of change. For example, for ruff, the configuration is the following: diff --git a/docs/code-quality/lint/linters/condprof-addons.rst b/docs/code-quality/lint/linters/condprof-addons.rst index c302eef5bed2..ca9c869d091a 100644 --- a/docs/code-quality/lint/linters/condprof-addons.rst +++ b/docs/code-quality/lint/linters/condprof-addons.rst @@ -5,7 +5,7 @@ CondProf Addons is a linter for condprof customization JSON files (see :searchfo it reports linting errors if: - any of the addons required by the customization files (e.g. see :searchfox:`testing/condprofile/condprof/customization/webext.json`) - is not found in the tar file fetched through the `firefox-addons` fetch task (see :searchfox:`taskcluster/ci/fetch/browsertime.yml`) + is not found in the tar file fetched through the `firefox-addons` fetch task (see :searchfox:`taskcluster/kinds/fetch/browsertime.yml`) - or the expected `firefox-addons` fetch task has not been found Run Locally @@ -37,7 +37,7 @@ XPI file is missing from the firefox-addons.tar archive This linting errors is expected to be reported if the linter detected that a confprof customization file requires an addon but the related xpi filename is not included in the firefox-addons.tar file fetched -through the `firefox-addons` fetch task (see :searchfox:`taskcluster/ci/fetch/browsertime.yml`). +through the `firefox-addons` fetch task (see :searchfox:`taskcluster/kinds/fetch/browsertime.yml`). If the patch or phabricator revision is not meant to be landed, but only used as a temporary patch pushed on try or only applied locally (e.g. to run the tp6/tp6m webextensions perftests with a given @@ -50,14 +50,14 @@ the linting error have to be fixed before or along landing the change, either by - removing the addition to the customization file if it wasn't intended to include that addon to all runs of the tp6/tp6m webextensions perftests -- updating the `firefox-addons` fetch task as defined in :searchfox:`taskcluster/ci/fetch/browsertime.yml` +- updating the `firefox-addons` fetch task as defined in :searchfox:`taskcluster/kinds/fetch/browsertime.yml` by creating a pull request in the github repository where the asset is stored, and ask a review from a peer of the `#webextensions-reviewer` and `#perftests-reviewers` review groups. firefox-addons taskcluster config 'add-prefix' attribute should be set to 'firefox-addons/' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If this linting error is hit, then the `firefox-addons` task defined in :searchfox:`taskcluster/ci/fetch/browsertime.yml` +If this linting error is hit, then the `firefox-addons` task defined in :searchfox:`taskcluster/kinds/fetch/browsertime.yml` is missing the `add-prefix` attribute or its value is not set to the expected 'firefox-addons/' subdir name. This is enforced as a linting rule because when the condprof utility is going to build a conditioned profile @@ -69,7 +69,7 @@ names are already available in `$MOZ_FETCHES_DIR/firefox-addons`. firefox-addons taskcluser fetch config section not found ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -This linting error is hit if the linter does not find the expected `firefox-addons` task defined in :searchfox:`taskcluster/ci/fetch/browsertime.yml` +This linting error is hit if the linter does not find the expected `firefox-addons` task defined in :searchfox:`taskcluster/kinds/fetch/browsertime.yml` or it is missing the expected `fetch` attribute. Configuration diff --git a/docs/code-quality/static-analysis/existing.rst b/docs/code-quality/static-analysis/existing.rst index 9b20650ad0b0..dd38051dc7f2 100644 --- a/docs/code-quality/static-analysis/existing.rst +++ b/docs/code-quality/static-analysis/existing.rst @@ -96,7 +96,7 @@ Regression Testing In order to prevent regressions in our clang-tidy based static analysis, we have created a -:searchfox:`task ` +:searchfox:`task ` on automation. This task runs on each commit and launches a test suite that is integrated into mach. diff --git a/docs/contributing/signing/signing_macos_build.rst b/docs/contributing/signing/signing_macos_build.rst index 688a935bbef4..ef5e5f3ab3b0 100644 --- a/docs/contributing/signing/signing_macos_build.rst +++ b/docs/contributing/signing/signing_macos_build.rst @@ -127,7 +127,7 @@ Example: Re-Signing Official Nightly 0:00.20 Using ad-hoc signing identity 0:00.20 Using nightly channel signing configuration 0:00.20 Using developer entitlements - 0:00.20 Reading build config file /Users/me/r/mc/taskcluster/ci/config.yml + 0:00.20 Reading build config file /Users/me/r/mc/taskcluster/config.yml 0:00.23 Stripping existing xattrs and signatures 0:01.91 Signing with codesign 0:02.72 Verification of signed app /Users/me/Desktop/FirefoxNightly.app OK @@ -149,7 +149,7 @@ can be exported from Keychain Access in .p12 format. 0:00.26 Using pkcs12 signing identity 0:00.26 Using devedition channel signing configuration 0:00.26 Using developer entitlements - 0:00.26 Reading build config file /Users/me/r/mc/taskcluster/ci/config.yml + 0:00.26 Reading build config file /Users/me/r/mc/taskcluster/config.yml 0:00.29 Stripping existing xattrs and signatures 0:02.09 Signing with rcodesign 0:11.16 Verification of signed app /Users/me/Desktop/DevEdition.app OK diff --git a/dom/docs/workersAndStorage/PerformanceTesting.rst b/dom/docs/workersAndStorage/PerformanceTesting.rst index 8e464b8116a4..fc196ad6777f 100644 --- a/dom/docs/workersAndStorage/PerformanceTesting.rst +++ b/dom/docs/workersAndStorage/PerformanceTesting.rst @@ -27,8 +27,8 @@ Add files to `perftest.toml `_ as usual for mochitests. -Modify linux.yml, macosx.yml, and windows.yml under `taskcluster/ci/perftest -`_. +Modify linux.yml, macosx.yml, and windows.yml under `taskcluster/kinds/perftest +`_. Currently, each test needs to be added individually to the run command (`here `_, for example). kind.yml can be ignored–it provides some defaults. @@ -62,7 +62,7 @@ and `autoland `_. Look for linux-sw, macosx-sw, and win-sw (`example `_). -These symbol names are defined in the .yml files under taskcluster/ci/perftest. +These symbol names are defined in the .yml files under taskcluster/kinds/perftest. Contacts ======== diff --git a/dom/indexedDB/test/perfdocs/index.rst b/dom/indexedDB/test/perfdocs/index.rst index ec54211038f9..5d7d98e3de46 100644 --- a/dom/indexedDB/test/perfdocs/index.rst +++ b/dom/indexedDB/test/perfdocs/index.rst @@ -51,7 +51,7 @@ How to add more tests? * Under the ``[test_name]`` section, specity the test parameters as a sequence of ``--browsertime.key=value`` arguments as a value of ``browsertime_args =`` * Under the ``[test_name]`` section, override any other values as needed -* Add test as a subtest to run for Desktop ``taskcluster/ci/test/browsertime-desktop.yml`` (maybe also for mobile) +* Add test as a subtest to run for Desktop ``taskcluster/kinds/test/browsertime-desktop.yml`` (maybe also for mobile) * Add test documentation to ``testing/raptor/raptor/perfdocs/config.yml`` * Generated files: diff --git a/intl/l10n/docs/crosschannel/repositories.rst b/intl/l10n/docs/crosschannel/repositories.rst index 8461b32fbd88..8959c9377e09 100644 --- a/intl/l10n/docs/crosschannel/repositories.rst +++ b/intl/l10n/docs/crosschannel/repositories.rst @@ -11,4 +11,4 @@ https://hg.mozilla.org/l10n/gecko-strings-quarantine/. The code is in https://hg.mozilla.org/mozilla-central/file/tip/python/l10n/mozxchannel/, supported as a mach subcommand in https://hg.mozilla.org/mozilla-central/file/tip/tools/compare-locales/mach_commands.py, -as a taskcluster kind in https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/ci/l10n-cross-channel, and scheduled in cron in https://hg.mozilla.org/mozilla-central/file/tip/.cron.yml. +as a taskcluster kind in https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/kinds/l10n-cross-channel, and scheduled in cron in https://hg.mozilla.org/mozilla-central/file/tip/.cron.yml. diff --git a/mobile/android/docs/shared/android/device_testing.md b/mobile/android/docs/shared/android/device_testing.md index f2e89b1a9b02..ddf1c6c60135 100644 --- a/mobile/android/docs/shared/android/device_testing.md +++ b/mobile/android/docs/shared/android/device_testing.md @@ -18,7 +18,7 @@ By default the Fenix CI runs tests using virtual devices on `x86`. That's faster when the host is also a `x86(_64)` system, but most physical devices use the Arm platform. So first we need to instruct it to run tests on Arm. -Which platform to test on is defined in [`taskcluster/ci/ui-test/kind.yml`](https://github.com/mozilla-mobile/fenix/blob/58e12b18e6e9f4f67c059fe9c9bf9f02579a55db/taskcluster/ci/ui-test/kind.yml#L65). +Which platform to test on is defined in [`taskcluster/kinds/ui-test/kind.yml`](https://searchfox.org/mozilla-central/source/taskcluster/kinds/ui-test/kind.yml). Find the line where it downloads the `target.apk` produced in a previous step and change it from `x86` to `arm64-v8a`: ```patch diff --git a/python/mozbuild/mozbuild/backend/common.py b/python/mozbuild/mozbuild/backend/common.py index b1c90f31fddb..33d3f382b44a 100644 --- a/python/mozbuild/mozbuild/backend/common.py +++ b/python/mozbuild/mozbuild/backend/common.py @@ -182,7 +182,7 @@ class CommonBackend(BuildBackend): # the order is not consistent across multiple runs. # # Exclude this file in order to avoid breaking the - # taskcluster/ci/diffoscope/reproducible.yml jobs. + # taskcluster/kinds/diffoscope/reproducible.yml jobs. continue fullpath = ObjDirPath(obj._context, "!" + f).full_path self._handle_generated_sources([fullpath]) diff --git a/python/mozbuild/mozbuild/toolchains.py b/python/mozbuild/mozbuild/toolchains.py index c5418089bbfe..ca6b77852cb0 100644 --- a/python/mozbuild/mozbuild/toolchains.py +++ b/python/mozbuild/mozbuild/toolchains.py @@ -14,9 +14,7 @@ def toolchain_task_definitions(): # Don't import globally to allow this module being imported without # the taskgraph module being available (e.g. standalone js) params = {"level": os.environ.get("MOZ_SCM_LEVEL", "3")} - root_dir = os.path.join( - os.path.dirname(__file__), "..", "..", "..", "taskcluster", "ci" - ) + root_dir = os.path.join(os.path.dirname(__file__), "..", "..", "..", "taskcluster") toolchains = load_tasks_for_kind(params, "toolchain", root_dir=root_dir) aliased = {} for t in toolchains.values(): diff --git a/python/mozperftest/mozperftest/mach_commands.py b/python/mozperftest/mozperftest/mach_commands.py index 4ac39d6a9e78..42509db55695 100644 --- a/python/mozperftest/mozperftest/mach_commands.py +++ b/python/mozperftest/mozperftest/mach_commands.py @@ -125,7 +125,7 @@ def run_perftest(command_context, **kwargs): for plat in platform: if plat not in _TRY_PLATFORMS: # we can extend platform support here: linux, win, macOs - # by adding more jobs in taskcluster/ci/perftest/kind.yml + # by adding more jobs in taskcluster/kinds/perftest/kind.yml # then picking up the right one here raise NotImplementedError( "%r doesn't exist or is not yet supported" % plat diff --git a/taskcluster/android_taskgraph/target_tasks.py b/taskcluster/android_taskgraph/target_tasks.py index 38b1f7b77277..13cc8d87dd7a 100644 --- a/taskcluster/android_taskgraph/target_tasks.py +++ b/taskcluster/android_taskgraph/target_tasks.py @@ -2,12 +2,12 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -from taskgraph.target_tasks import _target_task +from taskgraph.target_tasks import register_target_task from android_taskgraph.release_type import does_task_match_release_type -@_target_task("promote_android") +@register_target_task("promote_android") def target_tasks_promote(full_task_graph, parameters, graph_config): return _filter_release_promotion( full_task_graph, @@ -17,7 +17,7 @@ def target_tasks_promote(full_task_graph, parameters, graph_config): ) -@_target_task("push_android") +@register_target_task("push_android") def target_tasks_push(full_task_graph, parameters, graph_config): filtered_for_candidates = target_tasks_promote( full_task_graph, @@ -29,7 +29,7 @@ def target_tasks_push(full_task_graph, parameters, graph_config): ) -@_target_task("ship_android") +@register_target_task("ship_android") def target_tasks_ship(full_task_graph, parameters, graph_config): filtered_for_candidates = target_tasks_push( full_task_graph, @@ -71,7 +71,7 @@ def _filter_release_promotion( return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] -@_target_task("screenshots") +@register_target_task("screenshots") def target_tasks_screnshots(full_task_graph, parameters, graph_config): """Select the set of tasks required to generate screenshots on a real device.""" @@ -81,7 +81,7 @@ def target_tasks_screnshots(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] -@_target_task("legacy_api_ui_tests") +@register_target_task("legacy_api_ui_tests") def target_tasks_legacy_api_ui_tests(full_task_graph, parameters, graph_config): """Select the set of tasks required to run select UI tests on other API.""" diff --git a/taskcluster/ci/config.yml b/taskcluster/config.yml similarity index 100% rename from taskcluster/ci/config.yml rename to taskcluster/config.yml diff --git a/taskcluster/docker/updatebot/windows-setup.sh b/taskcluster/docker/updatebot/windows-setup.sh index c04d0a6fbf7a..975aaea24969 100644 --- a/taskcluster/docker/updatebot/windows-setup.sh +++ b/taskcluster/docker/updatebot/windows-setup.sh @@ -27,7 +27,7 @@ mv depot_tools.git depot_tools # Generating a new version of the preloaded depot_tools download can be done by: # 1) Running the task, uncommenting the variable assignment below, uncommenting the -# _GENERATE_DEPOT_TOOLS_BINARIES_ section in taskcluster/ci/updatebot/kind.yml, +# _GENERATE_DEPOT_TOOLS_BINARIES_ section in taskcluster/kinds/updatebot/kind.yml, # and ensuring that an angle update will actually take place (so it downloads the depot_tools) # 2) Downloading and sanity-checking the depot_tools-preloaded-binaries-GIT_HASH-DATE.zip artifact # 3) Adding it to tooltool @@ -121,7 +121,7 @@ if test -n "$GENERATE_DEPOT_TOOLS_BINARIES"; then # Convoluted way to get the git hash, because we don't have a .git directory # Adding extra print statements just in case we need to debug it - GIT_HASH=$(grep depot_tools -A 1 "$GECKO_PATH/taskcluster/ci/fetch/updatebot.yml" | tee /dev/tty | grep revision | tee /dev/tty | awk -F': *' '{print $2}' | tee /dev/tty) + GIT_HASH=$(grep depot_tools -A 1 "$GECKO_PATH/taskcluster/kinds/fetch/updatebot.yml" | tee /dev/tty | grep revision | tee /dev/tty | awk -F': *' '{print $2}' | tee /dev/tty) DATE=$(date -I) mv depot_tools-preloaded-binaries.zip "depot_tools-preloaded-binaries-$GIT_HASH-$DATE.zip" diff --git a/taskcluster/docs/howto/index.rst b/taskcluster/docs/howto/index.rst index ab1010666b8d..c3a03ef16611 100644 --- a/taskcluster/docs/howto/index.rst +++ b/taskcluster/docs/howto/index.rst @@ -35,7 +35,7 @@ Changing Test Characteristics ............................. First, find the test description. This will be in -``taskcluster/ci/*/tests.yml``, for the appropriate kind (consult +``taskcluster/kinds/*/tests.yml``, for the appropriate kind (consult :ref:`kinds`). You will find a YAML stanza for each test suite, and each stanza defines the test's characteristics. For example, the ``chunks`` property gives the number of chunks to run. This can be specified as a simple @@ -65,7 +65,7 @@ Adding a Test Suite To add a new test suite, you will need to know the proper mozharness invocation for that suite, and which kind it fits into (consult :ref:`kinds`). -Add a new stanza to ``taskcluster/ci//tests.yml``, copying from the other +Add a new stanza to ``taskcluster/kinds//tests.yml``, copying from the other stanzas in that file. The meanings should be clear, but authoritative documentation is in ``taskcluster/gecko_taskgraph/transforms/test/__init__.py`` should you need diff --git a/taskcluster/docs/kinds.rst b/taskcluster/docs/kinds.rst index b05c9542bb07..76edaaa51190 100644 --- a/taskcluster/docs/kinds.rst +++ b/taskcluster/docs/kinds.rst @@ -684,7 +684,7 @@ diffoscope ---------- Tasks used to compare pairs of Firefox builds using https://diffoscope.org/. As of writing, this is mainly meant to be used in try builds, by editing -taskcluster/ci/diffoscope/kind.yml for your needs. +taskcluster/kinds/diffoscope/kind.yml for your needs. addon ----- diff --git a/taskcluster/docs/kinds/test.rst b/taskcluster/docs/kinds/test.rst index 20d3635c5c45..b577a4a993ff 100644 --- a/taskcluster/docs/kinds/test.rst +++ b/taskcluster/docs/kinds/test.rst @@ -120,7 +120,7 @@ manifest conditions pending the triage owner / manager to review. Please subscribe to alerts from `firefox-ci ` group in order to be aware of changes to the CI, scheduling, or the policy. -.. _variants.yml: https://searchfox.org/mozilla-central/source/taskcluster/ci/test/variants.yml +.. _variants.yml: https://searchfox.org/mozilla-central/source/taskcluster/kinds/test/variants.yml .. _json-e: https://json-e.js.org/ diff --git a/taskcluster/docs/partner-attribution.rst b/taskcluster/docs/partner-attribution.rst index f83eabb005e4..c283d4b5290f 100644 --- a/taskcluster/docs/partner-attribution.rst +++ b/taskcluster/docs/partner-attribution.rst @@ -27,7 +27,7 @@ partner repacks. logic. It's usually looked up during the release promotion action task, using the Github GraphQL API in the `get_partner_config_by_url() `_ function, with the -url defined in `taskcluster/ci/config.yml `_. +url defined in `taskcluster/config.yml `_. ``release_partner_build_number`` is an integer used to create unique upload paths in the firefox candidates directory, while ``release_partners`` is a list of partners that should be diff --git a/taskcluster/docs/partner-repacks.rst b/taskcluster/docs/partner-repacks.rst index 3ae352e06d63..6aa3db7da7fd 100644 --- a/taskcluster/docs/partner-repacks.rst +++ b/taskcluster/docs/partner-repacks.rst @@ -40,7 +40,7 @@ release. They're both true for Firefox betas >= b8 and releases, but otherwise d logic. It's usually looked up during the release promotion action task, using the Github GraphQL API in the `get_partner_config_by_url() `_ function, with the -url defined in `taskcluster/ci/config.yml `_. ``release_partner_build_number`` is an integer used to create unique upload paths in the firefox diff --git a/taskcluster/docs/taskgraph.rst b/taskcluster/docs/taskgraph.rst index 5b3ac836432f..dbb74f34996f 100644 --- a/taskcluster/docs/taskgraph.rst +++ b/taskcluster/docs/taskgraph.rst @@ -32,7 +32,7 @@ Kinds Generation starts with "kinds". These are yaml files that denote groupings of tasks that are loosely related to one another. For example, in Gecko there are ``build`` and ``test`` kinds. Each kind has its own directory under -`taskcluster/ci`_ which contains a ``kind.yml`` file. +`taskcluster/kinds`_ which contains a ``kind.yml`` file. For more information on kinds, see Taskgraph's `kind documentation`_. For a list of available kinds in ``mozilla-central``, see the :doc:`kinds reference @@ -114,7 +114,7 @@ Graph Configuration There are several configuration settings that are pertain to the entire taskgraph. These are specified in :file:`config.yml` at the root of the -taskgraph configuration (typically :file:`taskcluster/ci/`). The available +taskgraph configuration (typically :file:`taskcluster`). The available settings are documented inline in `taskcluster/gecko_taskgraph/config.py `_. @@ -131,7 +131,7 @@ For more information, see Taskgraph's `actions documentation`_. .. _graph generation documentation: https://taskcluster-taskgraph.readthedocs.io/en/latest/concepts/task-graphs.html .. _this guide: https://taskcluster-taskgraph.readthedocs.io/en/latest/howto/run-locally.html -.. _taskcluster/ci: https://searchfox.org/mozilla-central/source/taskcluster/ci +.. _taskcluster/kinds: https://searchfox.org/mozilla-central/source/taskcluster/kinds .. _kind documentation: https://taskcluster-taskgraph.readthedocs.io/en/latest/concepts/kind.html .. _loader documentation: https://taskcluster-taskgraph.readthedocs.io/en/latest/concepts/loading.html .. _transforms documentation: https://taskcluster-taskgraph.readthedocs.io/en/latest/concepts/transforms.html diff --git a/taskcluster/docs/versioncontrol.rst b/taskcluster/docs/versioncontrol.rst index 835f8915cf1c..c187ea7f64f4 100644 --- a/taskcluster/docs/versioncontrol.rst +++ b/taskcluster/docs/versioncontrol.rst @@ -35,7 +35,7 @@ The locations are as follows: Debian Packages for Debian and Ubuntu Based Docker Images --------------------------------------------------------- -``taskcluster/ci/packages/debian.yml`` and ``taskcluster/ci/packages/ubuntu.yml`` +``taskcluster/kinds/packages/debian.yml`` and ``taskcluster/kinds/packages/ubuntu.yml`` define custom Debian packages for Mercurial. These are installed in various Docker images. diff --git a/taskcluster/gecko_taskgraph/main.py b/taskcluster/gecko_taskgraph/main.py index e261f26c8008..10ca60d7280b 100644 --- a/taskcluster/gecko_taskgraph/main.py +++ b/taskcluster/gecko_taskgraph/main.py @@ -386,7 +386,7 @@ def show_taskgraph(options): output_file = options["output_file"] if options["diff"]: - # --root argument is taskgraph's config at /taskcluster/ci + # --root argument is taskgraph's config at /taskcluster repo_root = os.getcwd() if options["root"]: repo_root = f"{options['root']}/../.." @@ -707,7 +707,7 @@ def decision(options): @argument( "--root", "-r", - default="taskcluster/ci", + default="taskcluster", help="root of the taskgraph definition relative to topsrcdir", ) def action_callback(options): @@ -743,7 +743,7 @@ def action_callback(options): @argument( "--root", "-r", - default="taskcluster/ci", + default="taskcluster", help="root of the taskgraph definition relative to topsrcdir", ) @argument( diff --git a/taskcluster/gecko_taskgraph/target_tasks.py b/taskcluster/gecko_taskgraph/target_tasks.py index e004cfb3e29f..de23f83a0850 100644 --- a/taskcluster/gecko_taskgraph/target_tasks.py +++ b/taskcluster/gecko_taskgraph/target_tasks.py @@ -11,7 +11,7 @@ from datetime import datetime, timedelta from redo import retry from taskgraph.parameters import Parameters -from taskgraph.target_tasks import _target_task, get_method +from taskgraph.target_tasks import get_method, register_target_task from taskgraph.util.taskcluster import find_task_id from gecko_taskgraph import GECKO, try_option_syntax @@ -396,7 +396,7 @@ def _try_option_syntax(full_task_graph, parameters, graph_config): return target_tasks_labels -@_target_task("try_tasks") +@register_target_task("try_tasks") def target_tasks_try(full_task_graph, parameters, graph_config): try_mode = parameters["try_mode"] if try_mode == "try_task_config": @@ -408,13 +408,13 @@ def target_tasks_try(full_task_graph, parameters, graph_config): return [] -@_target_task("try_select_tasks") +@register_target_task("try_select_tasks") def target_tasks_try_select(full_task_graph, parameters, graph_config): tasks = target_tasks_try_select_uncommon(full_task_graph, parameters, graph_config) return [l for l in tasks if filter_by_uncommon_try_tasks(l)] -@_target_task("try_select_tasks_uncommon") +@register_target_task("try_select_tasks_uncommon") def target_tasks_try_select_uncommon(full_task_graph, parameters, graph_config): from gecko_taskgraph.decision import PER_PROJECT_PARAMETERS @@ -440,7 +440,7 @@ def target_tasks_try_select_uncommon(full_task_graph, parameters, graph_config): return sorted(tasks) -@_target_task("try_auto") +@register_target_task("try_auto") def target_tasks_try_auto(full_task_graph, parameters, graph_config): """Target the tasks which have indicated they should be run on autoland (rather than try) via the `run_on_projects` attributes. @@ -471,7 +471,7 @@ def target_tasks_try_auto(full_task_graph, parameters, graph_config): ] -@_target_task("default") +@register_target_task("default") def target_tasks_default(full_task_graph, parameters, graph_config): """Target the tasks which have indicated they should be run on this project via the `run_on_projects` attributes.""" @@ -484,7 +484,7 @@ def target_tasks_default(full_task_graph, parameters, graph_config): ] -@_target_task("autoland_tasks") +@register_target_task("autoland_tasks") def target_tasks_autoland(full_task_graph, parameters, graph_config): """In addition to doing the filtering by project that the 'default' filter does, also remove any tests running against shippable builds @@ -510,7 +510,7 @@ def target_tasks_autoland(full_task_graph, parameters, graph_config): return [l for l in filtered_for_project if filter(full_task_graph[l])] -@_target_task("mozilla_central_tasks") +@register_target_task("mozilla_central_tasks") def target_tasks_mozilla_central(full_task_graph, parameters, graph_config): """In addition to doing the filtering by project that the 'default' filter does, also remove any tests running against regular (aka not shippable, @@ -550,7 +550,7 @@ def target_tasks_mozilla_central(full_task_graph, parameters, graph_config): return [l for l in filtered_for_project if filter(full_task_graph[l])] -@_target_task("graphics_tasks") +@register_target_task("graphics_tasks") def target_tasks_graphics(full_task_graph, parameters, graph_config): """In addition to doing the filtering by project that the 'default' filter does, also remove artifact builds because we have csets on @@ -568,7 +568,7 @@ def target_tasks_graphics(full_task_graph, parameters, graph_config): return [l for l in filtered_for_project if filter(full_task_graph[l])] -@_target_task("mozilla_beta_tasks") +@register_target_task("mozilla_beta_tasks") def target_tasks_mozilla_beta(full_task_graph, parameters, graph_config): """Select the set of tasks required for a promotable beta or release build of desktop, plus android CI. The candidates build process involves a pipeline @@ -581,7 +581,7 @@ def target_tasks_mozilla_beta(full_task_graph, parameters, graph_config): ] -@_target_task("mozilla_release_tasks") +@register_target_task("mozilla_release_tasks") def target_tasks_mozilla_release(full_task_graph, parameters, graph_config): """Select the set of tasks required for a promotable beta or release build of desktop, plus android CI. The candidates build process involves a pipeline @@ -594,7 +594,7 @@ def target_tasks_mozilla_release(full_task_graph, parameters, graph_config): ] -@_target_task("mozilla_esr115_tasks") +@register_target_task("mozilla_esr115_tasks") def target_tasks_mozilla_esr115(full_task_graph, parameters, graph_config): """Select the set of tasks required for a promotable beta or release build of desktop, without android CI. The candidates build process involves a pipeline @@ -618,7 +618,7 @@ def target_tasks_mozilla_esr115(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("promote_desktop") +@register_target_task("promote_desktop") def target_tasks_promote_desktop(full_task_graph, parameters, graph_config): """Select the superset of tasks required to promote a beta or release build of a desktop product. This should include all non-android @@ -642,7 +642,7 @@ def target_tasks_promote_desktop(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("push_desktop") +@register_target_task("push_desktop") def target_tasks_push_desktop(full_task_graph, parameters, graph_config): """Select the set of tasks required to push a build of desktop to cdns. Previous build deps will be optimized out via action task.""" @@ -668,7 +668,7 @@ def target_tasks_push_desktop(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("ship_desktop") +@register_target_task("ship_desktop") def target_tasks_ship_desktop(full_task_graph, parameters, graph_config): """Select the set of tasks required to ship desktop. Previous build deps will be optimized out via action task.""" @@ -709,7 +709,7 @@ def target_tasks_ship_desktop(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("pine_tasks") +@register_target_task("pine_tasks") def target_tasks_pine(full_task_graph, parameters, graph_config): """Bug 1879960 - no reftests or wpt needed""" filtered_for_project = target_tasks_default( @@ -725,7 +725,7 @@ def target_tasks_pine(full_task_graph, parameters, graph_config): return [l for l in filtered_for_project if filter(full_task_graph[l])] -@_target_task("larch_tasks") +@register_target_task("larch_tasks") def target_tasks_larch(full_task_graph, parameters, graph_config): """Bug 1879213 - only run necessary tasks on larch""" filtered_for_project = target_tasks_default( @@ -749,7 +749,7 @@ def target_tasks_larch(full_task_graph, parameters, graph_config): return [l for l in filtered_for_project if filter(full_task_graph[l])] -@_target_task("kaios_tasks") +@register_target_task("kaios_tasks") def target_tasks_kaios(full_task_graph, parameters, graph_config): """The set of tasks to run for kaios integration""" @@ -760,7 +760,7 @@ def target_tasks_kaios(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("custom-car_perf_testing") +@register_target_task("custom-car_perf_testing") def target_tasks_custom_car_perf_testing(full_task_graph, parameters, graph_config): """Select tasks required for running daily performance tests for custom chromium-as-release.""" @@ -787,7 +787,7 @@ def target_tasks_custom_car_perf_testing(full_task_graph, parameters, graph_conf return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("general_perf_testing") +@register_target_task("general_perf_testing") def target_tasks_general_perf_testing(full_task_graph, parameters, graph_config): """ Select tasks required for running performance tests 3 times a week. @@ -910,7 +910,7 @@ def make_desktop_nightly_filter(platforms): return filter -@_target_task("sp-perftests") +@register_target_task("sp-perftests") def target_tasks_speedometer_tests(full_task_graph, parameters, graph_config): def filter(task): platform = task.attributes.get("test_platform") @@ -934,7 +934,7 @@ def target_tasks_speedometer_tests(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("nightly_linux") +@register_target_task("nightly_linux") def target_tasks_nightly_linux(full_task_graph, parameters, graph_config): """Select the set of tasks required for a nightly build of linux. The nightly build process involves a pipeline of builds, signing, @@ -945,7 +945,7 @@ def target_tasks_nightly_linux(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] -@_target_task("nightly_macosx") +@register_target_task("nightly_macosx") def target_tasks_nightly_macosx(full_task_graph, parameters, graph_config): """Select the set of tasks required for a nightly build of macosx. The nightly build process involves a pipeline of builds, signing, @@ -954,7 +954,7 @@ def target_tasks_nightly_macosx(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] -@_target_task("nightly_win32") +@register_target_task("nightly_win32") def target_tasks_nightly_win32(full_task_graph, parameters, graph_config): """Select the set of tasks required for a nightly build of win32 and win64. The nightly build process involves a pipeline of builds, signing, @@ -963,7 +963,7 @@ def target_tasks_nightly_win32(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] -@_target_task("nightly_win64") +@register_target_task("nightly_win64") def target_tasks_nightly_win64(full_task_graph, parameters, graph_config): """Select the set of tasks required for a nightly build of win32 and win64. The nightly build process involves a pipeline of builds, signing, @@ -972,7 +972,7 @@ def target_tasks_nightly_win64(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] -@_target_task("nightly_win64_aarch64") +@register_target_task("nightly_win64_aarch64") def target_tasks_nightly_win64_aarch64(full_task_graph, parameters, graph_config): """Select the set of tasks required for a nightly build of win32 and win64. The nightly build process involves a pipeline of builds, signing, @@ -981,7 +981,7 @@ def target_tasks_nightly_win64_aarch64(full_task_graph, parameters, graph_config return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] -@_target_task("nightly_asan") +@register_target_task("nightly_asan") def target_tasks_nightly_asan(full_task_graph, parameters, graph_config): """Select the set of tasks required for a nightly build of asan. The nightly build process involves a pipeline of builds, signing, @@ -992,7 +992,7 @@ def target_tasks_nightly_asan(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] -@_target_task("daily_releases") +@register_target_task("daily_releases") def target_tasks_daily_releases(full_task_graph, parameters, graph_config): """Select the set of tasks required to identify if we should release. If we determine that we should the task will communicate to ship-it to @@ -1004,7 +1004,7 @@ def target_tasks_daily_releases(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("nightly_desktop") +@register_target_task("nightly_desktop") def target_tasks_nightly_desktop(full_task_graph, parameters, graph_config): """Select the set of tasks required for a nightly build of linux, mac, windows.""" @@ -1042,7 +1042,7 @@ def target_tasks_nightly_desktop(full_task_graph, parameters, graph_config): ) -@_target_task("nightly_all") +@register_target_task("nightly_all") def target_tasks_nightly_all(full_task_graph, parameters, graph_config): """Select the set of tasks required for a nightly build of firefox desktop and android""" index_path = ( @@ -1065,7 +1065,7 @@ def target_tasks_nightly_all(full_task_graph, parameters, graph_config): # Run Searchfox analysis once daily. -@_target_task("searchfox_index") +@register_target_task("searchfox_index") def target_tasks_searchfox(full_task_graph, parameters, graph_config): """Select tasks required for indexing Firefox for Searchfox web site each day""" return [ @@ -1081,7 +1081,7 @@ def target_tasks_searchfox(full_task_graph, parameters, graph_config): # Run build linux64-plain-clang-trunk/opt on mozilla-central/beta with perf tests -@_target_task("linux64_clang_trunk_perf") +@register_target_task("linux64_clang_trunk_perf") def target_tasks_build_linux64_clang_trunk_perf( full_task_graph, parameters, graph_config ): @@ -1097,19 +1097,19 @@ def target_tasks_build_linux64_clang_trunk_perf( # Run Updatebot's cron job 4 times daily. -@_target_task("updatebot_cron") +@register_target_task("updatebot_cron") def target_tasks_updatebot_cron(full_task_graph, parameters, graph_config): """Select tasks required to run Updatebot's cron job""" return ["updatebot-cron"] -@_target_task("customv8_update") +@register_target_task("customv8_update") def target_tasks_customv8_update(full_task_graph, parameters, graph_config): """Select tasks required for building latest d8/v8 version.""" return ["toolchain-linux64-custom-v8"] -@_target_task("file_update") +@register_target_task("file_update") def target_tasks_file_update(full_task_graph, parameters, graph_config): """Select the set of tasks required to perform nightly in-tree file updates""" @@ -1120,7 +1120,7 @@ def target_tasks_file_update(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("l10n_bump") +@register_target_task("l10n_bump") def target_tasks_l10n_bump(full_task_graph, parameters, graph_config): """Select the set of tasks required to perform l10n bumping.""" @@ -1131,7 +1131,7 @@ def target_tasks_l10n_bump(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("merge_automation") +@register_target_task("merge_automation") def target_tasks_merge_automation(full_task_graph, parameters, graph_config): """Select the set of tasks required to perform repository merges.""" @@ -1142,7 +1142,7 @@ def target_tasks_merge_automation(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("scriptworker_canary") +@register_target_task("scriptworker_canary") def target_tasks_scriptworker_canary(full_task_graph, parameters, graph_config): """Select the set of tasks required to run scriptworker canaries.""" @@ -1153,7 +1153,7 @@ def target_tasks_scriptworker_canary(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("cron_bouncer_check") +@register_target_task("cron_bouncer_check") def target_tasks_bouncer_check(full_task_graph, parameters, graph_config): """Select the set of tasks required to perform bouncer version verification.""" @@ -1166,7 +1166,7 @@ def target_tasks_bouncer_check(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("staging_release_builds") +@register_target_task("staging_release_builds") def target_tasks_staging_release(full_task_graph, parameters, graph_config): """ Select all builds that are part of releases. @@ -1190,7 +1190,7 @@ def target_tasks_staging_release(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("release_simulation") +@register_target_task("release_simulation") def target_tasks_release_simulation(full_task_graph, parameters, graph_config): """ Select builds that would run on push on a release branch. @@ -1227,7 +1227,7 @@ def target_tasks_release_simulation(full_task_graph, parameters, graph_config): ] -@_target_task("codereview") +@register_target_task("codereview") def target_tasks_codereview(full_task_graph, parameters, graph_config): """Select all code review tasks needed to produce a report""" @@ -1245,13 +1245,13 @@ def target_tasks_codereview(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("nothing") +@register_target_task("nothing") def target_tasks_nothing(full_task_graph, parameters, graph_config): """Select nothing, for DONTBUILD pushes""" return [] -@_target_task("daily_beta_perf") +@register_target_task("daily_beta_perf") def target_tasks_daily_beta_perf(full_task_graph, parameters, graph_config): """ Select performance tests on the beta branch to be run daily @@ -1353,7 +1353,7 @@ def target_tasks_daily_beta_perf(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("weekly_release_perf") +@register_target_task("weekly_release_perf") def target_tasks_weekly_release_perf(full_task_graph, parameters, graph_config): """ Select performance tests on the release branch to be run weekly @@ -1421,7 +1421,7 @@ def target_tasks_weekly_release_perf(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("raptor_tp6m") +@register_target_task("raptor_tp6m") def target_tasks_raptor_tp6m(full_task_graph, parameters, graph_config): """ Select tasks required for running raptor cold page-load tests on fenix and refbrow @@ -1448,7 +1448,7 @@ def target_tasks_raptor_tp6m(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("backfill_all_browsertime") +@register_target_task("backfill_all_browsertime") def target_tasks_backfill_all_browsertime(full_task_graph, parameters, graph_config): """ Search for revisions that contains patches that were reviewed by perftest reviewers @@ -1516,7 +1516,7 @@ def target_tasks_backfill_all_browsertime(full_task_graph, parameters, graph_con return [] -@_target_task("condprof") +@register_target_task("condprof") def target_tasks_condprof(full_task_graph, parameters, graph_config): """ Select tasks required for building conditioned profiles. @@ -1527,7 +1527,7 @@ def target_tasks_condprof(full_task_graph, parameters, graph_config): yield name -@_target_task("system_symbols") +@register_target_task("system_symbols") def target_tasks_system_symbols(full_task_graph, parameters, graph_config): """ Select tasks for scraping and uploading system symbols. @@ -1541,7 +1541,7 @@ def target_tasks_system_symbols(full_task_graph, parameters, graph_config): yield name -@_target_task("perftest") +@register_target_task("perftest") def target_tasks_perftest(full_task_graph, parameters, graph_config): """ Select perftest tasks we want to run daily @@ -1553,7 +1553,7 @@ def target_tasks_perftest(full_task_graph, parameters, graph_config): yield name -@_target_task("perftest-on-autoland") +@register_target_task("perftest-on-autoland") def target_tasks_perftest_autoland(full_task_graph, parameters, graph_config): """ Select perftest tasks we want to run daily @@ -1567,7 +1567,7 @@ def target_tasks_perftest_autoland(full_task_graph, parameters, graph_config): yield name -@_target_task("l10n-cross-channel") +@register_target_task("l10n-cross-channel") def target_tasks_l10n_cross_channel(full_task_graph, parameters, graph_config): """Select the set of tasks required to run l10n cross-channel.""" @@ -1577,7 +1577,7 @@ def target_tasks_l10n_cross_channel(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("eslint-build") +@register_target_task("eslint-build") def target_tasks_eslint_build(full_task_graph, parameters, graph_config): """Select the task to run additional ESLint rules which require a build.""" @@ -1588,7 +1588,7 @@ def target_tasks_eslint_build(full_task_graph, parameters, graph_config): yield name -@_target_task("holly_tasks") +@register_target_task("holly_tasks") def target_tasks_holly(full_task_graph, parameters, graph_config): """Bug 1814661: only run updatebot tasks on holly""" @@ -1598,7 +1598,7 @@ def target_tasks_holly(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t)] -@_target_task("snap_upstream_tests") +@register_target_task("snap_upstream_tests") def target_tasks_snap_upstream_tests(full_task_graph, parameters, graph_config): """ Select tasks for testing Snap package built as upstream. Omit -try because @@ -1609,7 +1609,7 @@ def target_tasks_snap_upstream_tests(full_task_graph, parameters, graph_config): yield name -@_target_task("nightly-android") +@register_target_task("nightly-android") def target_tasks_nightly_android(full_task_graph, parameters, graph_config): def filter(task, parameters): # geckoview @@ -1645,7 +1645,7 @@ def target_tasks_nightly_android(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] -@_target_task("android-l10n-import") +@register_target_task("android-l10n-import") def target_tasks_android_l10n_import(full_task_graph, parameters, graph_config): return [l for l, t in full_task_graph.tasks.items() if l == "android-l10n-import"] diff --git a/taskcluster/gecko_taskgraph/test/conftest.py b/taskcluster/gecko_taskgraph/test/conftest.py index ff3d6ce2bd76..758d3402b51a 100644 --- a/taskcluster/gecko_taskgraph/test/conftest.py +++ b/taskcluster/gecko_taskgraph/test/conftest.py @@ -47,7 +47,7 @@ def enable_logging(): @pytest.fixture(scope="session") def graph_config(): - return load_graph_config(os.path.join(GECKO, "taskcluster", "ci")) + return load_graph_config(os.path.join(GECKO, "taskcluster")) @pytest.fixture(scope="session") diff --git a/taskcluster/gecko_taskgraph/test/test_actions_util.py b/taskcluster/gecko_taskgraph/test/test_actions_util.py index 7c38caea577a..5d88490eaedd 100644 --- a/taskcluster/gecko_taskgraph/test/test_actions_util.py +++ b/taskcluster/gecko_taskgraph/test/test_actions_util.py @@ -155,6 +155,7 @@ def is_subset(subset, superset): def test_extract_applicable_action( responses, monkeypatch, actions_json, task_def, expected ): + actions.util.get_task_definition.clear() base_url = "https://taskcluster" decision_task_id = "dddd" task_id = "tttt" diff --git a/taskcluster/gecko_taskgraph/test/test_transforms_job.py b/taskcluster/gecko_taskgraph/test/test_transforms_job.py index b032307ea6b6..6161a3605457 100644 --- a/taskcluster/gecko_taskgraph/test/test_transforms_job.py +++ b/taskcluster/gecko_taskgraph/test/test_transforms_job.py @@ -37,7 +37,7 @@ TASK_DEFAULTS = { @pytest.fixture(scope="module") def config(): - graph_config = load_graph_config(os.path.join(GECKO, "taskcluster", "ci")) + graph_config = load_graph_config(os.path.join(GECKO, "taskcluster")) params = FakeParameters( { "base_repository": "http://hg.example.com", diff --git a/taskcluster/gecko_taskgraph/transforms/diffoscope.py b/taskcluster/gecko_taskgraph/transforms/diffoscope.py index b74dc5bb8fbb..05c661795041 100644 --- a/taskcluster/gecko_taskgraph/transforms/diffoscope.py +++ b/taskcluster/gecko_taskgraph/transforms/diffoscope.py @@ -32,7 +32,7 @@ diff_description_schema = Schema( Required("original"): index_or_string, Required("new"): index_or_string, # Arguments to pass to diffoscope, used for job-defaults in - # taskcluster/ci/diffoscope/kind.yml + # taskcluster/kinds/diffoscope/kind.yml Optional("args"): str, # Extra arguments to pass to diffoscope, that can be set per job. Optional("extra-args"): str, diff --git a/taskcluster/gecko_taskgraph/transforms/reprocess_symbols.py b/taskcluster/gecko_taskgraph/transforms/reprocess_symbols.py index ea2cac3a68ea..48465b3ab727 100644 --- a/taskcluster/gecko_taskgraph/transforms/reprocess_symbols.py +++ b/taskcluster/gecko_taskgraph/transforms/reprocess_symbols.py @@ -3,7 +3,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. """ Transform the reprocess-symbols task description template, -taskcluster/ci/reprocess-symbols/job-template.yml into an actual task description. +taskcluster/kinds/reprocess-symbols/job-template.yml into an actual task description. """ diff --git a/taskcluster/gecko_taskgraph/transforms/task.py b/taskcluster/gecko_taskgraph/transforms/task.py index 4bfe0e9f6dc3..f7a9dd1d2d5a 100644 --- a/taskcluster/gecko_taskgraph/transforms/task.py +++ b/taskcluster/gecko_taskgraph/transforms/task.py @@ -208,7 +208,7 @@ TC_TREEHERDER_SCHEMA_URL = ( UNKNOWN_GROUP_NAME = ( - "Treeherder group {} (from {}) has no name; " "add it to taskcluster/ci/config.yml" + "Treeherder group {} (from {}) has no name; " "add it to taskcluster/config.yml" ) V2_ROUTE_TEMPLATES = [ @@ -313,7 +313,7 @@ def index_builder(name): UNSUPPORTED_INDEX_PRODUCT_ERROR = """\ The gecko-v2 product {product} is not in the list of configured products in -`taskcluster/ci/config.yml'. +`taskcluster/config.yml'. """ @@ -1612,7 +1612,7 @@ def task_name_from_label(config, tasks): UNSUPPORTED_SHIPPING_PRODUCT_ERROR = """\ The shipping product {product} is not in the list of configured products in -`taskcluster/ci/config.yml'. +`taskcluster/config.yml'. """ diff --git a/taskcluster/gecko_taskgraph/transforms/upload_generated_sources.py b/taskcluster/gecko_taskgraph/transforms/upload_generated_sources.py index aea948f90eb9..3828e912ecee 100644 --- a/taskcluster/gecko_taskgraph/transforms/upload_generated_sources.py +++ b/taskcluster/gecko_taskgraph/transforms/upload_generated_sources.py @@ -3,7 +3,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. """ Transform the upload-generated-files task description template, -taskcluster/ci/upload-generated-sources/kind.yml, into an actual task description. +taskcluster/kinds/upload-generated-sources/kind.yml, into an actual task description. """ from taskgraph.transforms.base import TransformSequence diff --git a/taskcluster/gecko_taskgraph/transforms/upload_symbols.py b/taskcluster/gecko_taskgraph/transforms/upload_symbols.py index 5c0bf18cb0a2..b216d2c8e16f 100644 --- a/taskcluster/gecko_taskgraph/transforms/upload_symbols.py +++ b/taskcluster/gecko_taskgraph/transforms/upload_symbols.py @@ -3,7 +3,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. """ Transform the upload-symbols task description template, -taskcluster/ci/upload-symbols/job-template.yml into an actual task description. +taskcluster/kinds/upload-symbols/job-template.yml into an actual task description. """ diff --git a/taskcluster/gecko_taskgraph/util/chunking.py b/taskcluster/gecko_taskgraph/util/chunking.py index a8ae4d8b6b55..9d8b98e07b71 100644 --- a/taskcluster/gecko_taskgraph/util/chunking.py +++ b/taskcluster/gecko_taskgraph/util/chunking.py @@ -24,8 +24,8 @@ here = os.path.abspath(os.path.dirname(__file__)) resolver = TestResolver.from_environment(cwd=here, loader_cls=TestManifestLoader) TEST_VARIANTS = {} -if os.path.exists(os.path.join(GECKO, "taskcluster", "ci", "test", "variants.yml")): - TEST_VARIANTS = load_yaml(GECKO, "taskcluster", "ci", "test", "variants.yml") +if os.path.exists(os.path.join(GECKO, "taskcluster", "kinds", "test", "variants.yml")): + TEST_VARIANTS = load_yaml(GECKO, "taskcluster", "kinds", "test", "variants.yml") WPT_SUBSUITES = { "canvas": "html/canvas", diff --git a/taskcluster/gecko_taskgraph/util/docker.py b/taskcluster/gecko_taskgraph/util/docker.py index e8de7d1fdb36..51e3f7e4842e 100644 --- a/taskcluster/gecko_taskgraph/util/docker.py +++ b/taskcluster/gecko_taskgraph/util/docker.py @@ -298,7 +298,7 @@ class ImagePathsMap(Mapping): self.__update_image_paths(jobs, image_dir) -image_paths = ImagePathsMap("taskcluster/ci/docker-image/kind.yml") +image_paths = ImagePathsMap("taskcluster/kinds/docker-image/kind.yml") def image_path(name): diff --git a/taskcluster/gecko_taskgraph/util/partners.py b/taskcluster/gecko_taskgraph/util/partners.py index 2546e1ae88b2..f4b8b187cfa8 100644 --- a/taskcluster/gecko_taskgraph/util/partners.py +++ b/taskcluster/gecko_taskgraph/util/partners.py @@ -523,7 +523,7 @@ def apply_partner_priority(config, jobs): # Reduce the priority of the partner repack jobs because they don't block QE. Meanwhile # leave EME-free jobs alone because they do, and they'll get the branch priority like the rest # of the release. Only bother with this in production, not on staging releases on try. - # medium is the same as mozilla-central, see taskcluster/ci/config.yml. ie higher than + # medium is the same as mozilla-central, see taskcluster/config.yml. ie higher than # integration branches because we don't want to wait a lot for the graph to be done, but # for multiple releases the partner tasks always wait for non-partner. if ( diff --git a/taskcluster/ci/addon/kind.yml b/taskcluster/kinds/addon/kind.yml similarity index 100% rename from taskcluster/ci/addon/kind.yml rename to taskcluster/kinds/addon/kind.yml diff --git a/taskcluster/ci/android-l10n/kind.yml b/taskcluster/kinds/android-l10n/kind.yml similarity index 100% rename from taskcluster/ci/android-l10n/kind.yml rename to taskcluster/kinds/android-l10n/kind.yml diff --git a/taskcluster/ci/android-startup-test/kind.yml b/taskcluster/kinds/android-startup-test/kind.yml similarity index 100% rename from taskcluster/ci/android-startup-test/kind.yml rename to taskcluster/kinds/android-startup-test/kind.yml diff --git a/taskcluster/ci/artifact-build/kind.yml b/taskcluster/kinds/artifact-build/kind.yml similarity index 100% rename from taskcluster/ci/artifact-build/kind.yml rename to taskcluster/kinds/artifact-build/kind.yml diff --git a/taskcluster/ci/attribution-l10n/kind.yml b/taskcluster/kinds/attribution-l10n/kind.yml similarity index 100% rename from taskcluster/ci/attribution-l10n/kind.yml rename to taskcluster/kinds/attribution-l10n/kind.yml diff --git a/taskcluster/ci/attribution/kind.yml b/taskcluster/kinds/attribution/kind.yml similarity index 100% rename from taskcluster/ci/attribution/kind.yml rename to taskcluster/kinds/attribution/kind.yml diff --git a/taskcluster/ci/balrog/kind.yml b/taskcluster/kinds/balrog/kind.yml similarity index 100% rename from taskcluster/ci/balrog/kind.yml rename to taskcluster/kinds/balrog/kind.yml diff --git a/taskcluster/ci/beetmover-android-app/kind.yml b/taskcluster/kinds/beetmover-android-app/kind.yml similarity index 100% rename from taskcluster/ci/beetmover-android-app/kind.yml rename to taskcluster/kinds/beetmover-android-app/kind.yml diff --git a/taskcluster/ci/beetmover-apt/kind.yml b/taskcluster/kinds/beetmover-apt/kind.yml similarity index 100% rename from taskcluster/ci/beetmover-apt/kind.yml rename to taskcluster/kinds/beetmover-apt/kind.yml diff --git a/taskcluster/ci/beetmover-checksums/kind.yml b/taskcluster/kinds/beetmover-checksums/kind.yml similarity index 100% rename from taskcluster/ci/beetmover-checksums/kind.yml rename to taskcluster/kinds/beetmover-checksums/kind.yml diff --git a/taskcluster/ci/beetmover-components/kind.yml b/taskcluster/kinds/beetmover-components/kind.yml similarity index 100% rename from taskcluster/ci/beetmover-components/kind.yml rename to taskcluster/kinds/beetmover-components/kind.yml diff --git a/taskcluster/ci/beetmover-geckoview/kind.yml b/taskcluster/kinds/beetmover-geckoview/kind.yml similarity index 100% rename from taskcluster/ci/beetmover-geckoview/kind.yml rename to taskcluster/kinds/beetmover-geckoview/kind.yml diff --git a/taskcluster/ci/beetmover-repackage/kind.yml b/taskcluster/kinds/beetmover-repackage/kind.yml similarity index 100% rename from taskcluster/ci/beetmover-repackage/kind.yml rename to taskcluster/kinds/beetmover-repackage/kind.yml diff --git a/taskcluster/ci/beetmover-source/kind.yml b/taskcluster/kinds/beetmover-source/kind.yml similarity index 100% rename from taskcluster/ci/beetmover-source/kind.yml rename to taskcluster/kinds/beetmover-source/kind.yml diff --git a/taskcluster/ci/bootstrap/kind.yml b/taskcluster/kinds/bootstrap/kind.yml similarity index 100% rename from taskcluster/ci/bootstrap/kind.yml rename to taskcluster/kinds/bootstrap/kind.yml diff --git a/taskcluster/ci/bouncer-locations/kind.yml b/taskcluster/kinds/bouncer-locations/kind.yml similarity index 100% rename from taskcluster/ci/bouncer-locations/kind.yml rename to taskcluster/kinds/bouncer-locations/kind.yml diff --git a/taskcluster/ci/build-apk/kind.yml b/taskcluster/kinds/build-apk/kind.yml similarity index 100% rename from taskcluster/ci/build-apk/kind.yml rename to taskcluster/kinds/build-apk/kind.yml diff --git a/taskcluster/ci/build-bundle/kind.yml b/taskcluster/kinds/build-bundle/kind.yml similarity index 100% rename from taskcluster/ci/build-bundle/kind.yml rename to taskcluster/kinds/build-bundle/kind.yml diff --git a/taskcluster/ci/build-components/kind.yml b/taskcluster/kinds/build-components/kind.yml similarity index 100% rename from taskcluster/ci/build-components/kind.yml rename to taskcluster/kinds/build-components/kind.yml diff --git a/taskcluster/ci/build-fat-aar/kind.yml b/taskcluster/kinds/build-fat-aar/kind.yml similarity index 100% rename from taskcluster/ci/build-fat-aar/kind.yml rename to taskcluster/kinds/build-fat-aar/kind.yml diff --git a/taskcluster/ci/build-mac-notarization/kind.yml b/taskcluster/kinds/build-mac-notarization/kind.yml similarity index 100% rename from taskcluster/ci/build-mac-notarization/kind.yml rename to taskcluster/kinds/build-mac-notarization/kind.yml diff --git a/taskcluster/ci/build-mac-signing/kind.yml b/taskcluster/kinds/build-mac-signing/kind.yml similarity index 100% rename from taskcluster/ci/build-mac-signing/kind.yml rename to taskcluster/kinds/build-mac-signing/kind.yml diff --git a/taskcluster/ci/build-samples-browser/kind.yml b/taskcluster/kinds/build-samples-browser/kind.yml similarity index 100% rename from taskcluster/ci/build-samples-browser/kind.yml rename to taskcluster/kinds/build-samples-browser/kind.yml diff --git a/taskcluster/ci/build-signing/kind.yml b/taskcluster/kinds/build-signing/kind.yml similarity index 100% rename from taskcluster/ci/build-signing/kind.yml rename to taskcluster/kinds/build-signing/kind.yml diff --git a/taskcluster/ci/build/android-asan.yml b/taskcluster/kinds/build/android-asan.yml similarity index 100% rename from taskcluster/ci/build/android-asan.yml rename to taskcluster/kinds/build/android-asan.yml diff --git a/taskcluster/ci/build/android-stuff.yml b/taskcluster/kinds/build/android-stuff.yml similarity index 100% rename from taskcluster/ci/build/android-stuff.yml rename to taskcluster/kinds/build/android-stuff.yml diff --git a/taskcluster/ci/build/android.yml b/taskcluster/kinds/build/android.yml similarity index 100% rename from taskcluster/ci/build/android.yml rename to taskcluster/kinds/build/android.yml diff --git a/taskcluster/ci/build/ios.yml b/taskcluster/kinds/build/ios.yml similarity index 100% rename from taskcluster/ci/build/ios.yml rename to taskcluster/kinds/build/ios.yml diff --git a/taskcluster/ci/build/kind.yml b/taskcluster/kinds/build/kind.yml similarity index 100% rename from taskcluster/ci/build/kind.yml rename to taskcluster/kinds/build/kind.yml diff --git a/taskcluster/ci/build/linux-base-toolchains.yml b/taskcluster/kinds/build/linux-base-toolchains.yml similarity index 100% rename from taskcluster/ci/build/linux-base-toolchains.yml rename to taskcluster/kinds/build/linux-base-toolchains.yml diff --git a/taskcluster/ci/build/linux.yml b/taskcluster/kinds/build/linux.yml similarity index 100% rename from taskcluster/ci/build/linux.yml rename to taskcluster/kinds/build/linux.yml diff --git a/taskcluster/ci/build/macosx-native.yml b/taskcluster/kinds/build/macosx-native.yml similarity index 100% rename from taskcluster/ci/build/macosx-native.yml rename to taskcluster/kinds/build/macosx-native.yml diff --git a/taskcluster/ci/build/macosx.yml b/taskcluster/kinds/build/macosx.yml similarity index 100% rename from taskcluster/ci/build/macosx.yml rename to taskcluster/kinds/build/macosx.yml diff --git a/taskcluster/ci/build/windows-mingw.yml b/taskcluster/kinds/build/windows-mingw.yml similarity index 100% rename from taskcluster/ci/build/windows-mingw.yml rename to taskcluster/kinds/build/windows-mingw.yml diff --git a/taskcluster/ci/build/windows.yml b/taskcluster/kinds/build/windows.yml similarity index 100% rename from taskcluster/ci/build/windows.yml rename to taskcluster/kinds/build/windows.yml diff --git a/taskcluster/ci/code-review/kind.yml b/taskcluster/kinds/code-review/kind.yml similarity index 100% rename from taskcluster/ci/code-review/kind.yml rename to taskcluster/kinds/code-review/kind.yml diff --git a/taskcluster/ci/condprof/kind.yml b/taskcluster/kinds/condprof/kind.yml similarity index 100% rename from taskcluster/ci/condprof/kind.yml rename to taskcluster/kinds/condprof/kind.yml diff --git a/taskcluster/ci/cron-bouncer-check/kind.yml b/taskcluster/kinds/cron-bouncer-check/kind.yml similarity index 100% rename from taskcluster/ci/cron-bouncer-check/kind.yml rename to taskcluster/kinds/cron-bouncer-check/kind.yml diff --git a/taskcluster/ci/diffoscope/artifacts.yml b/taskcluster/kinds/diffoscope/artifacts.yml similarity index 100% rename from taskcluster/ci/diffoscope/artifacts.yml rename to taskcluster/kinds/diffoscope/artifacts.yml diff --git a/taskcluster/ci/diffoscope/kind.yml b/taskcluster/kinds/diffoscope/kind.yml similarity index 100% rename from taskcluster/ci/diffoscope/kind.yml rename to taskcluster/kinds/diffoscope/kind.yml diff --git a/taskcluster/ci/diffoscope/reproducible.yml b/taskcluster/kinds/diffoscope/reproducible.yml similarity index 100% rename from taskcluster/ci/diffoscope/reproducible.yml rename to taskcluster/kinds/diffoscope/reproducible.yml diff --git a/taskcluster/ci/docker-image/kind.yml b/taskcluster/kinds/docker-image/kind.yml similarity index 100% rename from taskcluster/ci/docker-image/kind.yml rename to taskcluster/kinds/docker-image/kind.yml diff --git a/taskcluster/ci/fetch/benchmarks.yml b/taskcluster/kinds/fetch/benchmarks.yml similarity index 100% rename from taskcluster/ci/fetch/benchmarks.yml rename to taskcluster/kinds/fetch/benchmarks.yml diff --git a/taskcluster/ci/fetch/browsertime.yml b/taskcluster/kinds/fetch/browsertime.yml similarity index 100% rename from taskcluster/ci/fetch/browsertime.yml rename to taskcluster/kinds/fetch/browsertime.yml diff --git a/taskcluster/ci/fetch/chromium-fetch.yml b/taskcluster/kinds/fetch/chromium-fetch.yml similarity index 100% rename from taskcluster/ci/fetch/chromium-fetch.yml rename to taskcluster/kinds/fetch/chromium-fetch.yml diff --git a/taskcluster/ci/fetch/kind.yml b/taskcluster/kinds/fetch/kind.yml similarity index 100% rename from taskcluster/ci/fetch/kind.yml rename to taskcluster/kinds/fetch/kind.yml diff --git a/taskcluster/ci/fetch/moz.build b/taskcluster/kinds/fetch/moz.build similarity index 100% rename from taskcluster/ci/fetch/moz.build rename to taskcluster/kinds/fetch/moz.build diff --git a/taskcluster/ci/fetch/resource-monitor.yml b/taskcluster/kinds/fetch/resource-monitor.yml similarity index 100% rename from taskcluster/ci/fetch/resource-monitor.yml rename to taskcluster/kinds/fetch/resource-monitor.yml diff --git a/taskcluster/ci/fetch/toolchain-clang-tidy-external.yml b/taskcluster/kinds/fetch/toolchain-clang-tidy-external.yml similarity index 100% rename from taskcluster/ci/fetch/toolchain-clang-tidy-external.yml rename to taskcluster/kinds/fetch/toolchain-clang-tidy-external.yml diff --git a/taskcluster/ci/fetch/toolchains.yml b/taskcluster/kinds/fetch/toolchains.yml similarity index 100% rename from taskcluster/ci/fetch/toolchains.yml rename to taskcluster/kinds/fetch/toolchains.yml diff --git a/taskcluster/ci/fetch/updatebot.yml b/taskcluster/kinds/fetch/updatebot.yml similarity index 100% rename from taskcluster/ci/fetch/updatebot.yml rename to taskcluster/kinds/fetch/updatebot.yml diff --git a/taskcluster/ci/fuzzing/kind.yml b/taskcluster/kinds/fuzzing/kind.yml similarity index 100% rename from taskcluster/ci/fuzzing/kind.yml rename to taskcluster/kinds/fuzzing/kind.yml diff --git a/taskcluster/ci/fxrecord/kind.yml b/taskcluster/kinds/fxrecord/kind.yml similarity index 100% rename from taskcluster/ci/fxrecord/kind.yml rename to taskcluster/kinds/fxrecord/kind.yml diff --git a/taskcluster/ci/geckodriver-mac-notarization/kind.yml b/taskcluster/kinds/geckodriver-mac-notarization/kind.yml similarity index 100% rename from taskcluster/ci/geckodriver-mac-notarization/kind.yml rename to taskcluster/kinds/geckodriver-mac-notarization/kind.yml diff --git a/taskcluster/ci/geckodriver-signing/kind.yml b/taskcluster/kinds/geckodriver-signing/kind.yml similarity index 100% rename from taskcluster/ci/geckodriver-signing/kind.yml rename to taskcluster/kinds/geckodriver-signing/kind.yml diff --git a/taskcluster/ci/generate-profile/kind.yml b/taskcluster/kinds/generate-profile/kind.yml similarity index 100% rename from taskcluster/ci/generate-profile/kind.yml rename to taskcluster/kinds/generate-profile/kind.yml diff --git a/taskcluster/ci/hazard/kind.yml b/taskcluster/kinds/hazard/kind.yml similarity index 100% rename from taskcluster/ci/hazard/kind.yml rename to taskcluster/kinds/hazard/kind.yml diff --git a/taskcluster/ci/instrumented-build/kind.yml b/taskcluster/kinds/instrumented-build/kind.yml similarity index 100% rename from taskcluster/ci/instrumented-build/kind.yml rename to taskcluster/kinds/instrumented-build/kind.yml diff --git a/taskcluster/ci/l10n-bump/kind.yml b/taskcluster/kinds/l10n-bump/kind.yml similarity index 100% rename from taskcluster/ci/l10n-bump/kind.yml rename to taskcluster/kinds/l10n-bump/kind.yml diff --git a/taskcluster/ci/l10n-cross-channel/kind.yml b/taskcluster/kinds/l10n-cross-channel/kind.yml similarity index 100% rename from taskcluster/ci/l10n-cross-channel/kind.yml rename to taskcluster/kinds/l10n-cross-channel/kind.yml diff --git a/taskcluster/ci/l10n/kind.yml b/taskcluster/kinds/l10n/kind.yml similarity index 100% rename from taskcluster/ci/l10n/kind.yml rename to taskcluster/kinds/l10n/kind.yml diff --git a/taskcluster/ci/mar-signing-autograph-stage/kind.yml b/taskcluster/kinds/mar-signing-autograph-stage/kind.yml similarity index 100% rename from taskcluster/ci/mar-signing-autograph-stage/kind.yml rename to taskcluster/kinds/mar-signing-autograph-stage/kind.yml diff --git a/taskcluster/ci/mar-signing-l10n/kind.yml b/taskcluster/kinds/mar-signing-l10n/kind.yml similarity index 100% rename from taskcluster/ci/mar-signing-l10n/kind.yml rename to taskcluster/kinds/mar-signing-l10n/kind.yml diff --git a/taskcluster/ci/mar-signing/kind.yml b/taskcluster/kinds/mar-signing/kind.yml similarity index 100% rename from taskcluster/ci/mar-signing/kind.yml rename to taskcluster/kinds/mar-signing/kind.yml diff --git a/taskcluster/ci/maybe-release/kind.yml b/taskcluster/kinds/maybe-release/kind.yml similarity index 100% rename from taskcluster/ci/maybe-release/kind.yml rename to taskcluster/kinds/maybe-release/kind.yml diff --git a/taskcluster/ci/merge-automation/kind.yml b/taskcluster/kinds/merge-automation/kind.yml similarity index 100% rename from taskcluster/ci/merge-automation/kind.yml rename to taskcluster/kinds/merge-automation/kind.yml diff --git a/taskcluster/ci/openh264-plugin/kind.yml b/taskcluster/kinds/openh264-plugin/kind.yml similarity index 100% rename from taskcluster/ci/openh264-plugin/kind.yml rename to taskcluster/kinds/openh264-plugin/kind.yml diff --git a/taskcluster/ci/openh264-signing/kind.yml b/taskcluster/kinds/openh264-signing/kind.yml similarity index 100% rename from taskcluster/ci/openh264-signing/kind.yml rename to taskcluster/kinds/openh264-signing/kind.yml diff --git a/taskcluster/ci/packages/debian.yml b/taskcluster/kinds/packages/debian.yml similarity index 100% rename from taskcluster/ci/packages/debian.yml rename to taskcluster/kinds/packages/debian.yml diff --git a/taskcluster/ci/packages/kind.yml b/taskcluster/kinds/packages/kind.yml similarity index 100% rename from taskcluster/ci/packages/kind.yml rename to taskcluster/kinds/packages/kind.yml diff --git a/taskcluster/ci/packages/ubuntu.yml b/taskcluster/kinds/packages/ubuntu.yml similarity index 100% rename from taskcluster/ci/packages/ubuntu.yml rename to taskcluster/kinds/packages/ubuntu.yml diff --git a/taskcluster/ci/partials-signing/kind.yml b/taskcluster/kinds/partials-signing/kind.yml similarity index 100% rename from taskcluster/ci/partials-signing/kind.yml rename to taskcluster/kinds/partials-signing/kind.yml diff --git a/taskcluster/ci/partials/kind.yml b/taskcluster/kinds/partials/kind.yml similarity index 100% rename from taskcluster/ci/partials/kind.yml rename to taskcluster/kinds/partials/kind.yml diff --git a/taskcluster/ci/perftest/android.yml b/taskcluster/kinds/perftest/android.yml similarity index 100% rename from taskcluster/ci/perftest/android.yml rename to taskcluster/kinds/perftest/android.yml diff --git a/taskcluster/ci/perftest/kind.yml b/taskcluster/kinds/perftest/kind.yml similarity index 100% rename from taskcluster/ci/perftest/kind.yml rename to taskcluster/kinds/perftest/kind.yml diff --git a/taskcluster/ci/perftest/linux.yml b/taskcluster/kinds/perftest/linux.yml similarity index 100% rename from taskcluster/ci/perftest/linux.yml rename to taskcluster/kinds/perftest/linux.yml diff --git a/taskcluster/ci/perftest/macosx.yml b/taskcluster/kinds/perftest/macosx.yml similarity index 100% rename from taskcluster/ci/perftest/macosx.yml rename to taskcluster/kinds/perftest/macosx.yml diff --git a/taskcluster/ci/perftest/windows.yml b/taskcluster/kinds/perftest/windows.yml similarity index 100% rename from taskcluster/ci/perftest/windows.yml rename to taskcluster/kinds/perftest/windows.yml diff --git a/taskcluster/ci/post-balrog-dummy/kind.yml b/taskcluster/kinds/post-balrog-dummy/kind.yml similarity index 100% rename from taskcluster/ci/post-balrog-dummy/kind.yml rename to taskcluster/kinds/post-balrog-dummy/kind.yml diff --git a/taskcluster/ci/post-beetmover-checksums-dummy/kind.yml b/taskcluster/kinds/post-beetmover-checksums-dummy/kind.yml similarity index 100% rename from taskcluster/ci/post-beetmover-checksums-dummy/kind.yml rename to taskcluster/kinds/post-beetmover-checksums-dummy/kind.yml diff --git a/taskcluster/ci/post-beetmover-components-dummy/kind.yml b/taskcluster/kinds/post-beetmover-components-dummy/kind.yml similarity index 100% rename from taskcluster/ci/post-beetmover-components-dummy/kind.yml rename to taskcluster/kinds/post-beetmover-components-dummy/kind.yml diff --git a/taskcluster/ci/post-beetmover-dummy/kind.yml b/taskcluster/kinds/post-beetmover-dummy/kind.yml similarity index 100% rename from taskcluster/ci/post-beetmover-dummy/kind.yml rename to taskcluster/kinds/post-beetmover-dummy/kind.yml diff --git a/taskcluster/ci/post-langpack-dummy/kind.yml b/taskcluster/kinds/post-langpack-dummy/kind.yml similarity index 100% rename from taskcluster/ci/post-langpack-dummy/kind.yml rename to taskcluster/kinds/post-langpack-dummy/kind.yml diff --git a/taskcluster/ci/post-signing/kind.yml b/taskcluster/kinds/post-signing/kind.yml similarity index 100% rename from taskcluster/ci/post-signing/kind.yml rename to taskcluster/kinds/post-signing/kind.yml diff --git a/taskcluster/ci/post-update-verify-dummy/kind.yml b/taskcluster/kinds/post-update-verify-dummy/kind.yml similarity index 100% rename from taskcluster/ci/post-update-verify-dummy/kind.yml rename to taskcluster/kinds/post-update-verify-dummy/kind.yml diff --git a/taskcluster/ci/push-bundle/kind.yml b/taskcluster/kinds/push-bundle/kind.yml similarity index 100% rename from taskcluster/ci/push-bundle/kind.yml rename to taskcluster/kinds/push-bundle/kind.yml diff --git a/taskcluster/ci/release-balrog-scheduling/kind.yml b/taskcluster/kinds/release-balrog-scheduling/kind.yml similarity index 100% rename from taskcluster/ci/release-balrog-scheduling/kind.yml rename to taskcluster/kinds/release-balrog-scheduling/kind.yml diff --git a/taskcluster/ci/release-balrog-submit-toplevel/kind.yml b/taskcluster/kinds/release-balrog-submit-toplevel/kind.yml similarity index 100% rename from taskcluster/ci/release-balrog-submit-toplevel/kind.yml rename to taskcluster/kinds/release-balrog-submit-toplevel/kind.yml diff --git a/taskcluster/ci/release-beetmover-push-to-release/kind.yml b/taskcluster/kinds/release-beetmover-push-to-release/kind.yml similarity index 100% rename from taskcluster/ci/release-beetmover-push-to-release/kind.yml rename to taskcluster/kinds/release-beetmover-push-to-release/kind.yml diff --git a/taskcluster/ci/release-beetmover-signed-langpacks-checksums/kind.yml b/taskcluster/kinds/release-beetmover-signed-langpacks-checksums/kind.yml similarity index 100% rename from taskcluster/ci/release-beetmover-signed-langpacks-checksums/kind.yml rename to taskcluster/kinds/release-beetmover-signed-langpacks-checksums/kind.yml diff --git a/taskcluster/ci/release-beetmover-signed-langpacks/kind.yml b/taskcluster/kinds/release-beetmover-signed-langpacks/kind.yml similarity index 100% rename from taskcluster/ci/release-beetmover-signed-langpacks/kind.yml rename to taskcluster/kinds/release-beetmover-signed-langpacks/kind.yml diff --git a/taskcluster/ci/release-beetmover-source-checksums/kind.yml b/taskcluster/kinds/release-beetmover-source-checksums/kind.yml similarity index 100% rename from taskcluster/ci/release-beetmover-source-checksums/kind.yml rename to taskcluster/kinds/release-beetmover-source-checksums/kind.yml diff --git a/taskcluster/ci/release-bouncer-aliases/kind.yml b/taskcluster/kinds/release-bouncer-aliases/kind.yml similarity index 100% rename from taskcluster/ci/release-bouncer-aliases/kind.yml rename to taskcluster/kinds/release-bouncer-aliases/kind.yml diff --git a/taskcluster/ci/release-bouncer-check/kind.yml b/taskcluster/kinds/release-bouncer-check/kind.yml similarity index 100% rename from taskcluster/ci/release-bouncer-check/kind.yml rename to taskcluster/kinds/release-bouncer-check/kind.yml diff --git a/taskcluster/ci/release-bouncer-sub/kind.yml b/taskcluster/kinds/release-bouncer-sub/kind.yml similarity index 100% rename from taskcluster/ci/release-bouncer-sub/kind.yml rename to taskcluster/kinds/release-bouncer-sub/kind.yml diff --git a/taskcluster/ci/release-early-tagging/kind.yml b/taskcluster/kinds/release-early-tagging/kind.yml similarity index 100% rename from taskcluster/ci/release-early-tagging/kind.yml rename to taskcluster/kinds/release-early-tagging/kind.yml diff --git a/taskcluster/ci/release-eme-free-repack-beetmover-checksums/kind.yml b/taskcluster/kinds/release-eme-free-repack-beetmover-checksums/kind.yml similarity index 100% rename from taskcluster/ci/release-eme-free-repack-beetmover-checksums/kind.yml rename to taskcluster/kinds/release-eme-free-repack-beetmover-checksums/kind.yml diff --git a/taskcluster/ci/release-eme-free-repack-beetmover/kind.yml b/taskcluster/kinds/release-eme-free-repack-beetmover/kind.yml similarity index 100% rename from taskcluster/ci/release-eme-free-repack-beetmover/kind.yml rename to taskcluster/kinds/release-eme-free-repack-beetmover/kind.yml diff --git a/taskcluster/ci/release-eme-free-repack-mac-notarization/kind.yml b/taskcluster/kinds/release-eme-free-repack-mac-notarization/kind.yml similarity index 100% rename from taskcluster/ci/release-eme-free-repack-mac-notarization/kind.yml rename to taskcluster/kinds/release-eme-free-repack-mac-notarization/kind.yml diff --git a/taskcluster/ci/release-eme-free-repack-mac-signing/kind.yml b/taskcluster/kinds/release-eme-free-repack-mac-signing/kind.yml similarity index 100% rename from taskcluster/ci/release-eme-free-repack-mac-signing/kind.yml rename to taskcluster/kinds/release-eme-free-repack-mac-signing/kind.yml diff --git a/taskcluster/ci/release-eme-free-repack-repackage-signing/kind.yml b/taskcluster/kinds/release-eme-free-repack-repackage-signing/kind.yml similarity index 100% rename from taskcluster/ci/release-eme-free-repack-repackage-signing/kind.yml rename to taskcluster/kinds/release-eme-free-repack-repackage-signing/kind.yml diff --git a/taskcluster/ci/release-eme-free-repack-repackage/kind.yml b/taskcluster/kinds/release-eme-free-repack-repackage/kind.yml similarity index 100% rename from taskcluster/ci/release-eme-free-repack-repackage/kind.yml rename to taskcluster/kinds/release-eme-free-repack-repackage/kind.yml diff --git a/taskcluster/ci/release-eme-free-repack/kind.yml b/taskcluster/kinds/release-eme-free-repack/kind.yml similarity index 100% rename from taskcluster/ci/release-eme-free-repack/kind.yml rename to taskcluster/kinds/release-eme-free-repack/kind.yml diff --git a/taskcluster/ci/release-final-verify/kind.yml b/taskcluster/kinds/release-final-verify/kind.yml similarity index 100% rename from taskcluster/ci/release-final-verify/kind.yml rename to taskcluster/kinds/release-final-verify/kind.yml diff --git a/taskcluster/ci/release-flatpak-push/kind.yml b/taskcluster/kinds/release-flatpak-push/kind.yml similarity index 100% rename from taskcluster/ci/release-flatpak-push/kind.yml rename to taskcluster/kinds/release-flatpak-push/kind.yml diff --git a/taskcluster/ci/release-flatpak-repackage/kind.yml b/taskcluster/kinds/release-flatpak-repackage/kind.yml similarity index 100% rename from taskcluster/ci/release-flatpak-repackage/kind.yml rename to taskcluster/kinds/release-flatpak-repackage/kind.yml diff --git a/taskcluster/ci/release-generate-checksums-beetmover/kind.yml b/taskcluster/kinds/release-generate-checksums-beetmover/kind.yml similarity index 100% rename from taskcluster/ci/release-generate-checksums-beetmover/kind.yml rename to taskcluster/kinds/release-generate-checksums-beetmover/kind.yml diff --git a/taskcluster/ci/release-generate-checksums-signing/kind.yml b/taskcluster/kinds/release-generate-checksums-signing/kind.yml similarity index 100% rename from taskcluster/ci/release-generate-checksums-signing/kind.yml rename to taskcluster/kinds/release-generate-checksums-signing/kind.yml diff --git a/taskcluster/ci/release-generate-checksums/kind.yml b/taskcluster/kinds/release-generate-checksums/kind.yml similarity index 100% rename from taskcluster/ci/release-generate-checksums/kind.yml rename to taskcluster/kinds/release-generate-checksums/kind.yml diff --git a/taskcluster/ci/release-mark-as-shipped/kind.yml b/taskcluster/kinds/release-mark-as-shipped/kind.yml similarity index 100% rename from taskcluster/ci/release-mark-as-shipped/kind.yml rename to taskcluster/kinds/release-mark-as-shipped/kind.yml diff --git a/taskcluster/ci/release-msix-push/kind.yml b/taskcluster/kinds/release-msix-push/kind.yml similarity index 100% rename from taskcluster/ci/release-msix-push/kind.yml rename to taskcluster/kinds/release-msix-push/kind.yml diff --git a/taskcluster/ci/release-notify-av-announce/kind.yml b/taskcluster/kinds/release-notify-av-announce/kind.yml similarity index 100% rename from taskcluster/ci/release-notify-av-announce/kind.yml rename to taskcluster/kinds/release-notify-av-announce/kind.yml diff --git a/taskcluster/ci/release-notify-promote/kind.yml b/taskcluster/kinds/release-notify-promote/kind.yml similarity index 100% rename from taskcluster/ci/release-notify-promote/kind.yml rename to taskcluster/kinds/release-notify-promote/kind.yml diff --git a/taskcluster/ci/release-notify-push/kind.yml b/taskcluster/kinds/release-notify-push/kind.yml similarity index 100% rename from taskcluster/ci/release-notify-push/kind.yml rename to taskcluster/kinds/release-notify-push/kind.yml diff --git a/taskcluster/ci/release-notify-ship/kind.yml b/taskcluster/kinds/release-notify-ship/kind.yml similarity index 100% rename from taskcluster/ci/release-notify-ship/kind.yml rename to taskcluster/kinds/release-notify-ship/kind.yml diff --git a/taskcluster/ci/release-notify-started/kind.yml b/taskcluster/kinds/release-notify-started/kind.yml similarity index 100% rename from taskcluster/ci/release-notify-started/kind.yml rename to taskcluster/kinds/release-notify-started/kind.yml diff --git a/taskcluster/ci/release-notify-testrail/kind.yml b/taskcluster/kinds/release-notify-testrail/kind.yml similarity index 100% rename from taskcluster/ci/release-notify-testrail/kind.yml rename to taskcluster/kinds/release-notify-testrail/kind.yml diff --git a/taskcluster/ci/release-partner-attribution-beetmover/kind.yml b/taskcluster/kinds/release-partner-attribution-beetmover/kind.yml similarity index 100% rename from taskcluster/ci/release-partner-attribution-beetmover/kind.yml rename to taskcluster/kinds/release-partner-attribution-beetmover/kind.yml diff --git a/taskcluster/ci/release-partner-attribution/kind.yml b/taskcluster/kinds/release-partner-attribution/kind.yml similarity index 100% rename from taskcluster/ci/release-partner-attribution/kind.yml rename to taskcluster/kinds/release-partner-attribution/kind.yml diff --git a/taskcluster/ci/release-partner-repack-beetmover/kind.yml b/taskcluster/kinds/release-partner-repack-beetmover/kind.yml similarity index 100% rename from taskcluster/ci/release-partner-repack-beetmover/kind.yml rename to taskcluster/kinds/release-partner-repack-beetmover/kind.yml diff --git a/taskcluster/ci/release-partner-repack-bouncer-sub/kind.yml b/taskcluster/kinds/release-partner-repack-bouncer-sub/kind.yml similarity index 100% rename from taskcluster/ci/release-partner-repack-bouncer-sub/kind.yml rename to taskcluster/kinds/release-partner-repack-bouncer-sub/kind.yml diff --git a/taskcluster/ci/release-partner-repack-chunking-dummy/kind.yml b/taskcluster/kinds/release-partner-repack-chunking-dummy/kind.yml similarity index 100% rename from taskcluster/ci/release-partner-repack-chunking-dummy/kind.yml rename to taskcluster/kinds/release-partner-repack-chunking-dummy/kind.yml diff --git a/taskcluster/ci/release-partner-repack-mac-notarization/kind.yml b/taskcluster/kinds/release-partner-repack-mac-notarization/kind.yml similarity index 100% rename from taskcluster/ci/release-partner-repack-mac-notarization/kind.yml rename to taskcluster/kinds/release-partner-repack-mac-notarization/kind.yml diff --git a/taskcluster/ci/release-partner-repack-mac-signing/kind.yml b/taskcluster/kinds/release-partner-repack-mac-signing/kind.yml similarity index 100% rename from taskcluster/ci/release-partner-repack-mac-signing/kind.yml rename to taskcluster/kinds/release-partner-repack-mac-signing/kind.yml diff --git a/taskcluster/ci/release-partner-repack-repackage-signing/kind.yml b/taskcluster/kinds/release-partner-repack-repackage-signing/kind.yml similarity index 100% rename from taskcluster/ci/release-partner-repack-repackage-signing/kind.yml rename to taskcluster/kinds/release-partner-repack-repackage-signing/kind.yml diff --git a/taskcluster/ci/release-partner-repack-repackage/kind.yml b/taskcluster/kinds/release-partner-repack-repackage/kind.yml similarity index 100% rename from taskcluster/ci/release-partner-repack-repackage/kind.yml rename to taskcluster/kinds/release-partner-repack-repackage/kind.yml diff --git a/taskcluster/ci/release-partner-repack/kind.yml b/taskcluster/kinds/release-partner-repack/kind.yml similarity index 100% rename from taskcluster/ci/release-partner-repack/kind.yml rename to taskcluster/kinds/release-partner-repack/kind.yml diff --git a/taskcluster/ci/release-push-langpacks/kind.yml b/taskcluster/kinds/release-push-langpacks/kind.yml similarity index 100% rename from taskcluster/ci/release-push-langpacks/kind.yml rename to taskcluster/kinds/release-push-langpacks/kind.yml diff --git a/taskcluster/ci/release-secondary-balrog-scheduling/kind.yml b/taskcluster/kinds/release-secondary-balrog-scheduling/kind.yml similarity index 100% rename from taskcluster/ci/release-secondary-balrog-scheduling/kind.yml rename to taskcluster/kinds/release-secondary-balrog-scheduling/kind.yml diff --git a/taskcluster/ci/release-secondary-balrog-submit-toplevel/kind.yml b/taskcluster/kinds/release-secondary-balrog-submit-toplevel/kind.yml similarity index 100% rename from taskcluster/ci/release-secondary-balrog-submit-toplevel/kind.yml rename to taskcluster/kinds/release-secondary-balrog-submit-toplevel/kind.yml diff --git a/taskcluster/ci/release-secondary-final-verify/kind.yml b/taskcluster/kinds/release-secondary-final-verify/kind.yml similarity index 100% rename from taskcluster/ci/release-secondary-final-verify/kind.yml rename to taskcluster/kinds/release-secondary-final-verify/kind.yml diff --git a/taskcluster/ci/release-secondary-flatpak-push/kind.yml b/taskcluster/kinds/release-secondary-flatpak-push/kind.yml similarity index 100% rename from taskcluster/ci/release-secondary-flatpak-push/kind.yml rename to taskcluster/kinds/release-secondary-flatpak-push/kind.yml diff --git a/taskcluster/ci/release-secondary-notify-ship/kind.yml b/taskcluster/kinds/release-secondary-notify-ship/kind.yml similarity index 100% rename from taskcluster/ci/release-secondary-notify-ship/kind.yml rename to taskcluster/kinds/release-secondary-notify-ship/kind.yml diff --git a/taskcluster/ci/release-secondary-update-verify-config/kind.yml b/taskcluster/kinds/release-secondary-update-verify-config/kind.yml similarity index 100% rename from taskcluster/ci/release-secondary-update-verify-config/kind.yml rename to taskcluster/kinds/release-secondary-update-verify-config/kind.yml diff --git a/taskcluster/ci/release-secondary-update-verify/kind.yml b/taskcluster/kinds/release-secondary-update-verify/kind.yml similarity index 100% rename from taskcluster/ci/release-secondary-update-verify/kind.yml rename to taskcluster/kinds/release-secondary-update-verify/kind.yml diff --git a/taskcluster/ci/release-snap-repackage/kind.yml b/taskcluster/kinds/release-snap-repackage/kind.yml similarity index 100% rename from taskcluster/ci/release-snap-repackage/kind.yml rename to taskcluster/kinds/release-snap-repackage/kind.yml diff --git a/taskcluster/ci/release-source-checksums-signing/kind.yml b/taskcluster/kinds/release-source-checksums-signing/kind.yml similarity index 100% rename from taskcluster/ci/release-source-checksums-signing/kind.yml rename to taskcluster/kinds/release-source-checksums-signing/kind.yml diff --git a/taskcluster/ci/release-source-signing/kind.yml b/taskcluster/kinds/release-source-signing/kind.yml similarity index 100% rename from taskcluster/ci/release-source-signing/kind.yml rename to taskcluster/kinds/release-source-signing/kind.yml diff --git a/taskcluster/ci/release-source/kind.yml b/taskcluster/kinds/release-source/kind.yml similarity index 100% rename from taskcluster/ci/release-source/kind.yml rename to taskcluster/kinds/release-source/kind.yml diff --git a/taskcluster/ci/release-update-verify-config-next/kind.yml b/taskcluster/kinds/release-update-verify-config-next/kind.yml similarity index 100% rename from taskcluster/ci/release-update-verify-config-next/kind.yml rename to taskcluster/kinds/release-update-verify-config-next/kind.yml diff --git a/taskcluster/ci/release-update-verify-config/kind.yml b/taskcluster/kinds/release-update-verify-config/kind.yml similarity index 100% rename from taskcluster/ci/release-update-verify-config/kind.yml rename to taskcluster/kinds/release-update-verify-config/kind.yml diff --git a/taskcluster/ci/release-update-verify-next/kind.yml b/taskcluster/kinds/release-update-verify-next/kind.yml similarity index 100% rename from taskcluster/ci/release-update-verify-next/kind.yml rename to taskcluster/kinds/release-update-verify-next/kind.yml diff --git a/taskcluster/ci/release-update-verify/kind.yml b/taskcluster/kinds/release-update-verify/kind.yml similarity index 100% rename from taskcluster/ci/release-update-verify/kind.yml rename to taskcluster/kinds/release-update-verify/kind.yml diff --git a/taskcluster/ci/release-version-bump/kind.yml b/taskcluster/kinds/release-version-bump/kind.yml similarity index 100% rename from taskcluster/ci/release-version-bump/kind.yml rename to taskcluster/kinds/release-version-bump/kind.yml diff --git a/taskcluster/ci/repackage-deb-l10n/kind.yml b/taskcluster/kinds/repackage-deb-l10n/kind.yml similarity index 100% rename from taskcluster/ci/repackage-deb-l10n/kind.yml rename to taskcluster/kinds/repackage-deb-l10n/kind.yml diff --git a/taskcluster/ci/repackage-deb/kind.yml b/taskcluster/kinds/repackage-deb/kind.yml similarity index 100% rename from taskcluster/ci/repackage-deb/kind.yml rename to taskcluster/kinds/repackage-deb/kind.yml diff --git a/taskcluster/ci/repackage-l10n/kind.yml b/taskcluster/kinds/repackage-l10n/kind.yml similarity index 100% rename from taskcluster/ci/repackage-l10n/kind.yml rename to taskcluster/kinds/repackage-l10n/kind.yml diff --git a/taskcluster/ci/repackage-msi/kind.yml b/taskcluster/kinds/repackage-msi/kind.yml similarity index 100% rename from taskcluster/ci/repackage-msi/kind.yml rename to taskcluster/kinds/repackage-msi/kind.yml diff --git a/taskcluster/ci/repackage-msix/kind.yml b/taskcluster/kinds/repackage-msix/kind.yml similarity index 100% rename from taskcluster/ci/repackage-msix/kind.yml rename to taskcluster/kinds/repackage-msix/kind.yml diff --git a/taskcluster/ci/repackage-shippable-l10n-msix/kind.yml b/taskcluster/kinds/repackage-shippable-l10n-msix/kind.yml similarity index 100% rename from taskcluster/ci/repackage-shippable-l10n-msix/kind.yml rename to taskcluster/kinds/repackage-shippable-l10n-msix/kind.yml diff --git a/taskcluster/ci/repackage-signing-l10n/kind.yml b/taskcluster/kinds/repackage-signing-l10n/kind.yml similarity index 100% rename from taskcluster/ci/repackage-signing-l10n/kind.yml rename to taskcluster/kinds/repackage-signing-l10n/kind.yml diff --git a/taskcluster/ci/repackage-signing-msi/kind.yml b/taskcluster/kinds/repackage-signing-msi/kind.yml similarity index 100% rename from taskcluster/ci/repackage-signing-msi/kind.yml rename to taskcluster/kinds/repackage-signing-msi/kind.yml diff --git a/taskcluster/ci/repackage-signing-msix/kind.yml b/taskcluster/kinds/repackage-signing-msix/kind.yml similarity index 100% rename from taskcluster/ci/repackage-signing-msix/kind.yml rename to taskcluster/kinds/repackage-signing-msix/kind.yml diff --git a/taskcluster/ci/repackage-signing-shippable-l10n-msix/kind.yml b/taskcluster/kinds/repackage-signing-shippable-l10n-msix/kind.yml similarity index 100% rename from taskcluster/ci/repackage-signing-shippable-l10n-msix/kind.yml rename to taskcluster/kinds/repackage-signing-shippable-l10n-msix/kind.yml diff --git a/taskcluster/ci/repackage-signing/kind.yml b/taskcluster/kinds/repackage-signing/kind.yml similarity index 100% rename from taskcluster/ci/repackage-signing/kind.yml rename to taskcluster/kinds/repackage-signing/kind.yml diff --git a/taskcluster/ci/repackage/kind.yml b/taskcluster/kinds/repackage/kind.yml similarity index 100% rename from taskcluster/ci/repackage/kind.yml rename to taskcluster/kinds/repackage/kind.yml diff --git a/taskcluster/ci/repo-update/kind.yml b/taskcluster/kinds/repo-update/kind.yml similarity index 100% rename from taskcluster/ci/repo-update/kind.yml rename to taskcluster/kinds/repo-update/kind.yml diff --git a/taskcluster/ci/scriptworker-canary/kind.yml b/taskcluster/kinds/scriptworker-canary/kind.yml similarity index 100% rename from taskcluster/ci/scriptworker-canary/kind.yml rename to taskcluster/kinds/scriptworker-canary/kind.yml diff --git a/taskcluster/ci/searchfox/kind.yml b/taskcluster/kinds/searchfox/kind.yml similarity index 100% rename from taskcluster/ci/searchfox/kind.yml rename to taskcluster/kinds/searchfox/kind.yml diff --git a/taskcluster/ci/sentry/kind.yml b/taskcluster/kinds/sentry/kind.yml similarity index 100% rename from taskcluster/ci/sentry/kind.yml rename to taskcluster/kinds/sentry/kind.yml diff --git a/taskcluster/ci/shippable-l10n-mac-notarization/kind.yml b/taskcluster/kinds/shippable-l10n-mac-notarization/kind.yml similarity index 100% rename from taskcluster/ci/shippable-l10n-mac-notarization/kind.yml rename to taskcluster/kinds/shippable-l10n-mac-notarization/kind.yml diff --git a/taskcluster/ci/shippable-l10n-mac-signing/kind.yml b/taskcluster/kinds/shippable-l10n-mac-signing/kind.yml similarity index 100% rename from taskcluster/ci/shippable-l10n-mac-signing/kind.yml rename to taskcluster/kinds/shippable-l10n-mac-signing/kind.yml diff --git a/taskcluster/ci/shippable-l10n-signing/kind.yml b/taskcluster/kinds/shippable-l10n-signing/kind.yml similarity index 100% rename from taskcluster/ci/shippable-l10n-signing/kind.yml rename to taskcluster/kinds/shippable-l10n-signing/kind.yml diff --git a/taskcluster/ci/shippable-l10n/kind.yml b/taskcluster/kinds/shippable-l10n/kind.yml similarity index 100% rename from taskcluster/ci/shippable-l10n/kind.yml rename to taskcluster/kinds/shippable-l10n/kind.yml diff --git a/taskcluster/ci/signing-apk/kind.yml b/taskcluster/kinds/signing-apk/kind.yml similarity index 100% rename from taskcluster/ci/signing-apk/kind.yml rename to taskcluster/kinds/signing-apk/kind.yml diff --git a/taskcluster/ci/signing-bundle/kind.yml b/taskcluster/kinds/signing-bundle/kind.yml similarity index 100% rename from taskcluster/ci/signing-bundle/kind.yml rename to taskcluster/kinds/signing-bundle/kind.yml diff --git a/taskcluster/ci/signing/kind.yml b/taskcluster/kinds/signing/kind.yml similarity index 100% rename from taskcluster/ci/signing/kind.yml rename to taskcluster/kinds/signing/kind.yml diff --git a/taskcluster/ci/snap-upstream-build/kind.yml b/taskcluster/kinds/snap-upstream-build/kind.yml similarity index 100% rename from taskcluster/ci/snap-upstream-build/kind.yml rename to taskcluster/kinds/snap-upstream-build/kind.yml diff --git a/taskcluster/ci/snap-upstream-test/kind.yml b/taskcluster/kinds/snap-upstream-test/kind.yml similarity index 100% rename from taskcluster/ci/snap-upstream-test/kind.yml rename to taskcluster/kinds/snap-upstream-test/kind.yml diff --git a/taskcluster/ci/source-test/android-compare-locales.yml b/taskcluster/kinds/source-test/android-compare-locales.yml similarity index 100% rename from taskcluster/ci/source-test/android-compare-locales.yml rename to taskcluster/kinds/source-test/android-compare-locales.yml diff --git a/taskcluster/ci/source-test/android-detekt.yml b/taskcluster/kinds/source-test/android-detekt.yml similarity index 100% rename from taskcluster/ci/source-test/android-detekt.yml rename to taskcluster/kinds/source-test/android-detekt.yml diff --git a/taskcluster/ci/source-test/android-lint.yml b/taskcluster/kinds/source-test/android-lint.yml similarity index 100% rename from taskcluster/ci/source-test/android-lint.yml rename to taskcluster/kinds/source-test/android-lint.yml diff --git a/taskcluster/ci/source-test/buildconfig.yml b/taskcluster/kinds/source-test/buildconfig.yml similarity index 100% rename from taskcluster/ci/source-test/buildconfig.yml rename to taskcluster/kinds/source-test/buildconfig.yml diff --git a/taskcluster/ci/source-test/clang.yml b/taskcluster/kinds/source-test/clang.yml similarity index 100% rename from taskcluster/ci/source-test/clang.yml rename to taskcluster/kinds/source-test/clang.yml diff --git a/taskcluster/ci/source-test/cram.yml b/taskcluster/kinds/source-test/cram.yml similarity index 100% rename from taskcluster/ci/source-test/cram.yml rename to taskcluster/kinds/source-test/cram.yml diff --git a/taskcluster/ci/source-test/doc.yml b/taskcluster/kinds/source-test/doc.yml similarity index 100% rename from taskcluster/ci/source-test/doc.yml rename to taskcluster/kinds/source-test/doc.yml diff --git a/taskcluster/ci/source-test/file-metadata.yml b/taskcluster/kinds/source-test/file-metadata.yml similarity index 100% rename from taskcluster/ci/source-test/file-metadata.yml rename to taskcluster/kinds/source-test/file-metadata.yml diff --git a/taskcluster/ci/source-test/jsshell.yml b/taskcluster/kinds/source-test/jsshell.yml similarity index 100% rename from taskcluster/ci/source-test/jsshell.yml rename to taskcluster/kinds/source-test/jsshell.yml diff --git a/taskcluster/ci/source-test/kind.yml b/taskcluster/kinds/source-test/kind.yml similarity index 100% rename from taskcluster/ci/source-test/kind.yml rename to taskcluster/kinds/source-test/kind.yml diff --git a/taskcluster/ci/source-test/ktlint.yml b/taskcluster/kinds/source-test/ktlint.yml similarity index 100% rename from taskcluster/ci/source-test/ktlint.yml rename to taskcluster/kinds/source-test/ktlint.yml diff --git a/taskcluster/ci/source-test/mozlint-android.yml b/taskcluster/kinds/source-test/mozlint-android.yml similarity index 100% rename from taskcluster/ci/source-test/mozlint-android.yml rename to taskcluster/kinds/source-test/mozlint-android.yml diff --git a/taskcluster/ci/source-test/mozlint.yml b/taskcluster/kinds/source-test/mozlint.yml similarity index 100% rename from taskcluster/ci/source-test/mozlint.yml rename to taskcluster/kinds/source-test/mozlint.yml diff --git a/taskcluster/ci/source-test/node.yml b/taskcluster/kinds/source-test/node.yml similarity index 100% rename from taskcluster/ci/source-test/node.yml rename to taskcluster/kinds/source-test/node.yml diff --git a/taskcluster/ci/source-test/puppeteer.yml b/taskcluster/kinds/source-test/puppeteer.yml similarity index 100% rename from taskcluster/ci/source-test/puppeteer.yml rename to taskcluster/kinds/source-test/puppeteer.yml diff --git a/taskcluster/ci/source-test/python.yml b/taskcluster/kinds/source-test/python.yml similarity index 99% rename from taskcluster/ci/source-test/python.yml rename to taskcluster/kinds/source-test/python.yml index 43680aacadcd..c8214d17d5fb 100644 --- a/taskcluster/ci/source-test/python.yml +++ b/taskcluster/kinds/source-test/python.yml @@ -47,7 +47,7 @@ firefox-ci: when: files-changed: - '.taskcluster.yml' - - 'taskcluster/ci/**' + - 'taskcluster/kinds/**' - 'taskcluster/**/*.py' - 'tools/tryselect/selectors/auto.py' @@ -359,8 +359,8 @@ tryselect: subsuite: try when: files-changed: - - 'taskcluster/ci/config.yml' - - 'taskcluster/ci/test/**' + - 'taskcluster/config.yml' + - 'taskcluster/kinds/test/**' - 'taskcluster/gecko_taskgraph/transforms/**' - 'tools/tryselect/**' diff --git a/taskcluster/ci/source-test/shadow-scheduler.yml b/taskcluster/kinds/source-test/shadow-scheduler.yml similarity index 100% rename from taskcluster/ci/source-test/shadow-scheduler.yml rename to taskcluster/kinds/source-test/shadow-scheduler.yml diff --git a/taskcluster/ci/source-test/taskgraph.yml b/taskcluster/kinds/source-test/taskgraph.yml similarity index 97% rename from taskcluster/ci/source-test/taskgraph.yml rename to taskcluster/kinds/source-test/taskgraph.yml index 3065c8048236..da3b27d33b11 100644 --- a/taskcluster/ci/source-test/taskgraph.yml +++ b/taskcluster/kinds/source-test/taskgraph.yml @@ -38,5 +38,5 @@ diff: python taskcluster/scripts/misc/summarize-tgdiff.py /builds/worker/artifacts/diffs/ 20 when: files-changed: - - 'taskcluster/ci/**' + - 'taskcluster/kinds/**' - 'taskcluster/**/*.py' diff --git a/taskcluster/ci/source-test/vendor.yml b/taskcluster/kinds/source-test/vendor.yml similarity index 100% rename from taskcluster/ci/source-test/vendor.yml rename to taskcluster/kinds/source-test/vendor.yml diff --git a/taskcluster/ci/source-test/webcompat.yml b/taskcluster/kinds/source-test/webcompat.yml similarity index 100% rename from taskcluster/ci/source-test/webcompat.yml rename to taskcluster/kinds/source-test/webcompat.yml diff --git a/taskcluster/ci/source-test/webidl.yml b/taskcluster/kinds/source-test/webidl.yml similarity index 100% rename from taskcluster/ci/source-test/webidl.yml rename to taskcluster/kinds/source-test/webidl.yml diff --git a/taskcluster/ci/source-test/wpt-manifest.yml b/taskcluster/kinds/source-test/wpt-manifest.yml similarity index 100% rename from taskcluster/ci/source-test/wpt-manifest.yml rename to taskcluster/kinds/source-test/wpt-manifest.yml diff --git a/taskcluster/ci/source-test/wpt-metadata.yml b/taskcluster/kinds/source-test/wpt-metadata.yml similarity index 100% rename from taskcluster/ci/source-test/wpt-metadata.yml rename to taskcluster/kinds/source-test/wpt-metadata.yml diff --git a/taskcluster/ci/spidermonkey/kind.yml b/taskcluster/kinds/spidermonkey/kind.yml similarity index 97% rename from taskcluster/ci/spidermonkey/kind.yml rename to taskcluster/kinds/spidermonkey/kind.yml index 358ffeeb3ff0..95344a9f067b 100644 --- a/taskcluster/ci/spidermonkey/kind.yml +++ b/taskcluster/kinds/spidermonkey/kind.yml @@ -50,7 +50,7 @@ job-defaults: - nsprpub/** - python/** - taskcluster/moz.build - - taskcluster/ci/spidermonkey/kind.yml + - taskcluster/kinds/spidermonkey/kind.yml - testing/mozbase/** - testing/web-platform/** - test.mozbuild diff --git a/taskcluster/ci/spidermonkey/linux.yml b/taskcluster/kinds/spidermonkey/linux.yml similarity index 100% rename from taskcluster/ci/spidermonkey/linux.yml rename to taskcluster/kinds/spidermonkey/linux.yml diff --git a/taskcluster/ci/spidermonkey/windows.yml b/taskcluster/kinds/spidermonkey/windows.yml similarity index 100% rename from taskcluster/ci/spidermonkey/windows.yml rename to taskcluster/kinds/spidermonkey/windows.yml diff --git a/taskcluster/ci/startup-test/kind.yml b/taskcluster/kinds/startup-test/kind.yml similarity index 100% rename from taskcluster/ci/startup-test/kind.yml rename to taskcluster/kinds/startup-test/kind.yml diff --git a/taskcluster/ci/static-analysis-autotest/kind.yml b/taskcluster/kinds/static-analysis-autotest/kind.yml similarity index 100% rename from taskcluster/ci/static-analysis-autotest/kind.yml rename to taskcluster/kinds/static-analysis-autotest/kind.yml diff --git a/taskcluster/ci/system-symbols-reprocess/kind.yml b/taskcluster/kinds/system-symbols-reprocess/kind.yml similarity index 100% rename from taskcluster/ci/system-symbols-reprocess/kind.yml rename to taskcluster/kinds/system-symbols-reprocess/kind.yml diff --git a/taskcluster/ci/system-symbols-upload/kind.yml b/taskcluster/kinds/system-symbols-upload/kind.yml similarity index 100% rename from taskcluster/ci/system-symbols-upload/kind.yml rename to taskcluster/kinds/system-symbols-upload/kind.yml diff --git a/taskcluster/ci/system-symbols/kind.yml b/taskcluster/kinds/system-symbols/kind.yml similarity index 100% rename from taskcluster/ci/system-symbols/kind.yml rename to taskcluster/kinds/system-symbols/kind.yml diff --git a/taskcluster/ci/test-apk/kind.yml b/taskcluster/kinds/test-apk/kind.yml similarity index 100% rename from taskcluster/ci/test-apk/kind.yml rename to taskcluster/kinds/test-apk/kind.yml diff --git a/taskcluster/ci/test-components/kind.yml b/taskcluster/kinds/test-components/kind.yml similarity index 100% rename from taskcluster/ci/test-components/kind.yml rename to taskcluster/kinds/test-components/kind.yml diff --git a/taskcluster/ci/test/awsy.yml b/taskcluster/kinds/test/awsy.yml similarity index 100% rename from taskcluster/ci/test/awsy.yml rename to taskcluster/kinds/test/awsy.yml diff --git a/taskcluster/ci/test/browsertime-desktop.yml b/taskcluster/kinds/test/browsertime-desktop.yml similarity index 100% rename from taskcluster/ci/test/browsertime-desktop.yml rename to taskcluster/kinds/test/browsertime-desktop.yml diff --git a/taskcluster/ci/test/browsertime-mobile.yml b/taskcluster/kinds/test/browsertime-mobile.yml similarity index 100% rename from taskcluster/ci/test/browsertime-mobile.yml rename to taskcluster/kinds/test/browsertime-mobile.yml diff --git a/taskcluster/ci/test/compiled.yml b/taskcluster/kinds/test/compiled.yml similarity index 100% rename from taskcluster/ci/test/compiled.yml rename to taskcluster/kinds/test/compiled.yml diff --git a/taskcluster/ci/test/firefox-ui.yml b/taskcluster/kinds/test/firefox-ui.yml similarity index 100% rename from taskcluster/ci/test/firefox-ui.yml rename to taskcluster/kinds/test/firefox-ui.yml diff --git a/taskcluster/ci/test/kind.yml b/taskcluster/kinds/test/kind.yml similarity index 100% rename from taskcluster/ci/test/kind.yml rename to taskcluster/kinds/test/kind.yml diff --git a/taskcluster/ci/test/marionette.yml b/taskcluster/kinds/test/marionette.yml similarity index 100% rename from taskcluster/ci/test/marionette.yml rename to taskcluster/kinds/test/marionette.yml diff --git a/taskcluster/ci/test/misc.yml b/taskcluster/kinds/test/misc.yml similarity index 100% rename from taskcluster/ci/test/misc.yml rename to taskcluster/kinds/test/misc.yml diff --git a/taskcluster/ci/test/mochitest.yml b/taskcluster/kinds/test/mochitest.yml similarity index 100% rename from taskcluster/ci/test/mochitest.yml rename to taskcluster/kinds/test/mochitest.yml diff --git a/taskcluster/ci/test/reftest.yml b/taskcluster/kinds/test/reftest.yml similarity index 100% rename from taskcluster/ci/test/reftest.yml rename to taskcluster/kinds/test/reftest.yml diff --git a/taskcluster/ci/test/talos.yml b/taskcluster/kinds/test/talos.yml similarity index 100% rename from taskcluster/ci/test/talos.yml rename to taskcluster/kinds/test/talos.yml diff --git a/taskcluster/ci/test/test-platforms.yml b/taskcluster/kinds/test/test-platforms.yml similarity index 100% rename from taskcluster/ci/test/test-platforms.yml rename to taskcluster/kinds/test/test-platforms.yml diff --git a/taskcluster/ci/test/test-sets.yml b/taskcluster/kinds/test/test-sets.yml similarity index 100% rename from taskcluster/ci/test/test-sets.yml rename to taskcluster/kinds/test/test-sets.yml diff --git a/taskcluster/ci/test/variants.yml b/taskcluster/kinds/test/variants.yml similarity index 100% rename from taskcluster/ci/test/variants.yml rename to taskcluster/kinds/test/variants.yml diff --git a/taskcluster/ci/test/web-platform.yml b/taskcluster/kinds/test/web-platform.yml similarity index 100% rename from taskcluster/ci/test/web-platform.yml rename to taskcluster/kinds/test/web-platform.yml diff --git a/taskcluster/ci/test/xpcshell.yml b/taskcluster/kinds/test/xpcshell.yml similarity index 100% rename from taskcluster/ci/test/xpcshell.yml rename to taskcluster/kinds/test/xpcshell.yml diff --git a/taskcluster/ci/toolchain/android.yml b/taskcluster/kinds/toolchain/android.yml similarity index 100% rename from taskcluster/ci/toolchain/android.yml rename to taskcluster/kinds/toolchain/android.yml diff --git a/taskcluster/ci/toolchain/cargo-vet.yml b/taskcluster/kinds/toolchain/cargo-vet.yml similarity index 100% rename from taskcluster/ci/toolchain/cargo-vet.yml rename to taskcluster/kinds/toolchain/cargo-vet.yml diff --git a/taskcluster/ci/toolchain/cbindgen.yml b/taskcluster/kinds/toolchain/cbindgen.yml similarity index 100% rename from taskcluster/ci/toolchain/cbindgen.yml rename to taskcluster/kinds/toolchain/cbindgen.yml diff --git a/taskcluster/ci/toolchain/clang-tidy.yml b/taskcluster/kinds/toolchain/clang-tidy.yml similarity index 100% rename from taskcluster/ci/toolchain/clang-tidy.yml rename to taskcluster/kinds/toolchain/clang-tidy.yml diff --git a/taskcluster/ci/toolchain/clang.yml b/taskcluster/kinds/toolchain/clang.yml similarity index 100% rename from taskcluster/ci/toolchain/clang.yml rename to taskcluster/kinds/toolchain/clang.yml diff --git a/taskcluster/ci/toolchain/compiler-rt.yml b/taskcluster/kinds/toolchain/compiler-rt.yml similarity index 100% rename from taskcluster/ci/toolchain/compiler-rt.yml rename to taskcluster/kinds/toolchain/compiler-rt.yml diff --git a/taskcluster/ci/toolchain/dist-toolchains.yml b/taskcluster/kinds/toolchain/dist-toolchains.yml similarity index 100% rename from taskcluster/ci/toolchain/dist-toolchains.yml rename to taskcluster/kinds/toolchain/dist-toolchains.yml diff --git a/taskcluster/ci/toolchain/dump-syms.yml b/taskcluster/kinds/toolchain/dump-syms.yml similarity index 100% rename from taskcluster/ci/toolchain/dump-syms.yml rename to taskcluster/kinds/toolchain/dump-syms.yml diff --git a/taskcluster/ci/toolchain/fix-stacks.yml b/taskcluster/kinds/toolchain/fix-stacks.yml similarity index 100% rename from taskcluster/ci/toolchain/fix-stacks.yml rename to taskcluster/kinds/toolchain/fix-stacks.yml diff --git a/taskcluster/ci/toolchain/gcc.yml b/taskcluster/kinds/toolchain/gcc.yml similarity index 100% rename from taskcluster/ci/toolchain/gcc.yml rename to taskcluster/kinds/toolchain/gcc.yml diff --git a/taskcluster/ci/toolchain/geckodriver.yml b/taskcluster/kinds/toolchain/geckodriver.yml similarity index 100% rename from taskcluster/ci/toolchain/geckodriver.yml rename to taskcluster/kinds/toolchain/geckodriver.yml diff --git a/taskcluster/ci/toolchain/gn.yml b/taskcluster/kinds/toolchain/gn.yml similarity index 100% rename from taskcluster/ci/toolchain/gn.yml rename to taskcluster/kinds/toolchain/gn.yml diff --git a/taskcluster/ci/toolchain/grcov.yml b/taskcluster/kinds/toolchain/grcov.yml similarity index 100% rename from taskcluster/ci/toolchain/grcov.yml rename to taskcluster/kinds/toolchain/grcov.yml diff --git a/taskcluster/ci/toolchain/hostutils.yml b/taskcluster/kinds/toolchain/hostutils.yml similarity index 100% rename from taskcluster/ci/toolchain/hostutils.yml rename to taskcluster/kinds/toolchain/hostutils.yml diff --git a/taskcluster/ci/toolchain/kind.yml b/taskcluster/kinds/toolchain/kind.yml similarity index 100% rename from taskcluster/ci/toolchain/kind.yml rename to taskcluster/kinds/toolchain/kind.yml diff --git a/taskcluster/ci/toolchain/libunwind.yml b/taskcluster/kinds/toolchain/libunwind.yml similarity index 100% rename from taskcluster/ci/toolchain/libunwind.yml rename to taskcluster/kinds/toolchain/libunwind.yml diff --git a/taskcluster/ci/toolchain/llvm-symbolizer.yml b/taskcluster/kinds/toolchain/llvm-symbolizer.yml similarity index 100% rename from taskcluster/ci/toolchain/llvm-symbolizer.yml rename to taskcluster/kinds/toolchain/llvm-symbolizer.yml diff --git a/taskcluster/ci/toolchain/macos-sdk.yml b/taskcluster/kinds/toolchain/macos-sdk.yml similarity index 100% rename from taskcluster/ci/toolchain/macos-sdk.yml rename to taskcluster/kinds/toolchain/macos-sdk.yml diff --git a/taskcluster/ci/toolchain/mingw.yml b/taskcluster/kinds/toolchain/mingw.yml similarity index 100% rename from taskcluster/ci/toolchain/mingw.yml rename to taskcluster/kinds/toolchain/mingw.yml diff --git a/taskcluster/ci/toolchain/minidump-stackwalk.yml b/taskcluster/kinds/toolchain/minidump-stackwalk.yml similarity index 100% rename from taskcluster/ci/toolchain/minidump-stackwalk.yml rename to taskcluster/kinds/toolchain/minidump-stackwalk.yml diff --git a/taskcluster/ci/toolchain/misc.yml b/taskcluster/kinds/toolchain/misc.yml similarity index 100% rename from taskcluster/ci/toolchain/misc.yml rename to taskcluster/kinds/toolchain/misc.yml diff --git a/taskcluster/ci/toolchain/nasm.yml b/taskcluster/kinds/toolchain/nasm.yml similarity index 100% rename from taskcluster/ci/toolchain/nasm.yml rename to taskcluster/kinds/toolchain/nasm.yml diff --git a/taskcluster/ci/toolchain/node.yml b/taskcluster/kinds/toolchain/node.yml similarity index 100% rename from taskcluster/ci/toolchain/node.yml rename to taskcluster/kinds/toolchain/node.yml diff --git a/taskcluster/ci/toolchain/pkgconf.yml b/taskcluster/kinds/toolchain/pkgconf.yml similarity index 100% rename from taskcluster/ci/toolchain/pkgconf.yml rename to taskcluster/kinds/toolchain/pkgconf.yml diff --git a/taskcluster/ci/toolchain/python.yml b/taskcluster/kinds/toolchain/python.yml similarity index 100% rename from taskcluster/ci/toolchain/python.yml rename to taskcluster/kinds/toolchain/python.yml diff --git a/taskcluster/ci/toolchain/resourcemonitor.yml b/taskcluster/kinds/toolchain/resourcemonitor.yml similarity index 100% rename from taskcluster/ci/toolchain/resourcemonitor.yml rename to taskcluster/kinds/toolchain/resourcemonitor.yml diff --git a/taskcluster/ci/toolchain/rust-size.yml b/taskcluster/kinds/toolchain/rust-size.yml similarity index 100% rename from taskcluster/ci/toolchain/rust-size.yml rename to taskcluster/kinds/toolchain/rust-size.yml diff --git a/taskcluster/ci/toolchain/rust.yml b/taskcluster/kinds/toolchain/rust.yml similarity index 100% rename from taskcluster/ci/toolchain/rust.yml rename to taskcluster/kinds/toolchain/rust.yml diff --git a/taskcluster/ci/toolchain/sccache.yml b/taskcluster/kinds/toolchain/sccache.yml similarity index 100% rename from taskcluster/ci/toolchain/sccache.yml rename to taskcluster/kinds/toolchain/sccache.yml diff --git a/taskcluster/ci/toolchain/sysroot.yml b/taskcluster/kinds/toolchain/sysroot.yml similarity index 100% rename from taskcluster/ci/toolchain/sysroot.yml rename to taskcluster/kinds/toolchain/sysroot.yml diff --git a/taskcluster/ci/trigger-comm-central/kind.yml b/taskcluster/kinds/trigger-comm-central/kind.yml similarity index 100% rename from taskcluster/ci/trigger-comm-central/kind.yml rename to taskcluster/kinds/trigger-comm-central/kind.yml diff --git a/taskcluster/ci/ui-test-apk/kind.yml b/taskcluster/kinds/ui-test-apk/kind.yml similarity index 100% rename from taskcluster/ci/ui-test-apk/kind.yml rename to taskcluster/kinds/ui-test-apk/kind.yml diff --git a/taskcluster/ci/updatebot/kind.yml b/taskcluster/kinds/updatebot/kind.yml similarity index 97% rename from taskcluster/ci/updatebot/kind.yml rename to taskcluster/kinds/updatebot/kind.yml index 2a1bc00d4265..8b6ed560a1b6 100644 --- a/taskcluster/ci/updatebot/kind.yml +++ b/taskcluster/kinds/updatebot/kind.yml @@ -69,7 +69,7 @@ jobs: # path: build\src\obj-build\depot_tools # end _GENERATE_DEPOT_TOOLS_BINARIES_ env: - TOOLTOOL_MANIFEST: "taskcluster/ci/updatebot/tooltool-manifests/updatebot.manifest" + TOOLTOOL_MANIFEST: "taskcluster/kinds/updatebot/tooltool-manifests/updatebot.manifest" MSYSTEM: "MINGW64" run: using: run-task diff --git a/taskcluster/ci/updatebot/moz.build b/taskcluster/kinds/updatebot/moz.build similarity index 100% rename from taskcluster/ci/updatebot/moz.build rename to taskcluster/kinds/updatebot/moz.build diff --git a/taskcluster/ci/updatebot/tooltool-manifests/updatebot.manifest b/taskcluster/kinds/updatebot/tooltool-manifests/updatebot.manifest similarity index 100% rename from taskcluster/ci/updatebot/tooltool-manifests/updatebot.manifest rename to taskcluster/kinds/updatebot/tooltool-manifests/updatebot.manifest diff --git a/taskcluster/ci/upload-generated-sources-dummy/kind.yml b/taskcluster/kinds/upload-generated-sources-dummy/kind.yml similarity index 100% rename from taskcluster/ci/upload-generated-sources-dummy/kind.yml rename to taskcluster/kinds/upload-generated-sources-dummy/kind.yml diff --git a/taskcluster/ci/upload-generated-sources/kind.yml b/taskcluster/kinds/upload-generated-sources/kind.yml similarity index 100% rename from taskcluster/ci/upload-generated-sources/kind.yml rename to taskcluster/kinds/upload-generated-sources/kind.yml diff --git a/taskcluster/ci/upload-symbols-dummy/kind.yml b/taskcluster/kinds/upload-symbols-dummy/kind.yml similarity index 100% rename from taskcluster/ci/upload-symbols-dummy/kind.yml rename to taskcluster/kinds/upload-symbols-dummy/kind.yml diff --git a/taskcluster/ci/upload-symbols/kind.yml b/taskcluster/kinds/upload-symbols/kind.yml similarity index 100% rename from taskcluster/ci/upload-symbols/kind.yml rename to taskcluster/kinds/upload-symbols/kind.yml diff --git a/taskcluster/ci/valgrind/kind.yml b/taskcluster/kinds/valgrind/kind.yml similarity index 100% rename from taskcluster/ci/valgrind/kind.yml rename to taskcluster/kinds/valgrind/kind.yml diff --git a/taskcluster/ci/webrender/kind.yml b/taskcluster/kinds/webrender/kind.yml similarity index 100% rename from taskcluster/ci/webrender/kind.yml rename to taskcluster/kinds/webrender/kind.yml diff --git a/taskcluster/test/params/mc-nightly-all.yml b/taskcluster/test/params/mc-nightly-all.yml index 1e726aa539b8..8160c3413bce 100644 --- a/taskcluster/test/params/mc-nightly-all.yml +++ b/taskcluster/test/params/mc-nightly-all.yml @@ -4651,13 +4651,13 @@ existing_tasks: valgrind-linux64-valgrind-qr/opt-swr: SNO08UPaRoKwlQjHoyjb5A files_changed: - taskcluster/android_taskgraph/transforms/build_components.py - - taskcluster/ci/build-apk/kind.yml - - taskcluster/ci/build-bundle/kind.yml - - taskcluster/ci/build-components/kind.yml - - taskcluster/ci/build-samples-browser/kind.yml - - taskcluster/ci/test-apk/kind.yml - - taskcluster/ci/test-components/kind.yml - - taskcluster/ci/ui-test-apk/kind.yml + - taskcluster/kinds/build-apk/kind.yml + - taskcluster/kinds/build-bundle/kind.yml + - taskcluster/kinds/build-components/kind.yml + - taskcluster/kinds/build-samples-browser/kind.yml + - taskcluster/kinds/test-apk/kind.yml + - taskcluster/kinds/test-components/kind.yml + - taskcluster/kinds/ui-test-apk/kind.yml filters: - target_tasks_method head_ref: d9466bebb4c96b99a227f35b5a7e86bd0c8f5bb5 diff --git a/testing/condprofile/condprof/util.py b/testing/condprofile/condprof/util.py index 444398b9f486..eeda7482b331 100644 --- a/testing/condprofile/condprof/util.py +++ b/testing/condprofile/condprof/util.py @@ -124,7 +124,7 @@ def fresh_profile(profile, customization_data): logger.info("Downloading addon %s" % name) # When running on the CI, we expect the xpi files to have been # fetched by the firefox-addons fetch task dependency (see - # taskcluster/ci/fetch/browsertime.yml) and the condprof-addons + # taskcluster/kinds/fetch/browsertime.yml) and the condprof-addons # linter enforces the content of the archive to be unpacked into # a subdirectory named "firefox-addons". extension = download_file(url, mozfetches_subdir="firefox-addons") diff --git a/testing/docs/tests-for-new-config/index.rst b/testing/docs/tests-for-new-config/index.rst index 32fdf62b7ffc..bbd3b2339e59 100644 --- a/testing/docs/tests-for-new-config/index.rst +++ b/testing/docs/tests-for-new-config/index.rst @@ -110,8 +110,8 @@ Using our example of ``windows_1903``, this would be a new worker type that would require these edits: * `transforms/tests.py `__ (duplicate windows 10 entries) - * `test-platforms.py `__ (copy windows10 debug/opt/shippable/asan entries and make win10_1903) - * `test-sets.py `__ (ideally you need nothing, otherwise copy ``windows-tests`` and edit the test list) + * `test-platforms.py `__ (copy windows10 debug/opt/shippable/asan entries and make win10_1903) + * `test-sets.py `__ (ideally you need nothing, otherwise copy ``windows-tests`` and edit the test list) In general this should allow you to have tests scheduled with no custom flags in try server and all of these will be scheduled by default on diff --git a/testing/docs/tests-for-new-config/manual.rst b/testing/docs/tests-for-new-config/manual.rst index cf2485251afd..246d60111a32 100644 --- a/testing/docs/tests-for-new-config/manual.rst +++ b/testing/docs/tests-for-new-config/manual.rst @@ -204,8 +204,8 @@ Using our example of ``windows_1903``, this would be a new worker type that would require these edits: * `transforms/tests.py `__ (duplicate windows 10 entries) - * `test-platforms.py `__ (copy windows10 debug/opt/shippable/asan entries and make win10_1903) - * `test-sets.py `__ (ideally you need nothing, otherwise copy ``windows-tests`` and edit the test list) + * `test-platforms.py `__ (copy windows10 debug/opt/shippable/asan entries and make win10_1903) + * `test-sets.py `__ (ideally you need nothing, otherwise copy ``windows-tests`` and edit the test list) In general this should allow you to have tests scheduled with no custom flags in try server and all of these will be scheduled by default on diff --git a/testing/mach_commands.py b/testing/mach_commands.py index c2232f4c7d43..de1dff9828cf 100644 --- a/testing/mach_commands.py +++ b/testing/mach_commands.py @@ -1080,7 +1080,7 @@ def test_info_failures( # query VCS to get current list of variants: import yaml - url = "https://hg.mozilla.org/mozilla-central/raw-file/tip/taskcluster/ci/test/variants.yml" + url = "https://hg.mozilla.org/mozilla-central/raw-file/tip/taskcluster/kinds/test/variants.yml" r = requests.get(url, headers={"User-agent": "mach-test-info/1.0"}) variants = yaml.safe_load(r.text) diff --git a/testing/perfdocs/generated/IndexedDB.rst b/testing/perfdocs/generated/IndexedDB.rst index ec54211038f9..5d7d98e3de46 100644 --- a/testing/perfdocs/generated/IndexedDB.rst +++ b/testing/perfdocs/generated/IndexedDB.rst @@ -51,7 +51,7 @@ How to add more tests? * Under the ``[test_name]`` section, specity the test parameters as a sequence of ``--browsertime.key=value`` arguments as a value of ``browsertime_args =`` * Under the ``[test_name]`` section, override any other values as needed -* Add test as a subtest to run for Desktop ``taskcluster/ci/test/browsertime-desktop.yml`` (maybe also for mobile) +* Add test as a subtest to run for Desktop ``taskcluster/kinds/test/browsertime-desktop.yml`` (maybe also for mobile) * Add test documentation to ``testing/raptor/raptor/perfdocs/config.yml`` * Generated files: diff --git a/testing/perfdocs/generated/debugging.rst b/testing/perfdocs/generated/debugging.rst index 8cc799e8203c..87165765f8c7 100644 --- a/testing/perfdocs/generated/debugging.rst +++ b/testing/perfdocs/generated/debugging.rst @@ -14,9 +14,9 @@ As of now, there is no easy way to do this. Raptor was not built for debugging f To debug a functional failure in Raptor you can follow these steps: #. If bug 1653617 has not landed yet, apply the patch. -#. Add the --verbose flag to the extra-options list `here `__. +#. Add the --verbose flag to the extra-options list `here `__. #. If the --setenv doesn't exist yet (`bug 1494669 `_), then add your MOZ_LOG environment variables to give you additional logging `here `_. -#. If the flag does exist, then you can add the MOZ_LOG variables to the `raptor.yml `_ configuration file. +#. If the flag does exist, then you can add the MOZ_LOG variables to the `raptor.yml `_ configuration file. #. Push to try if you can't reproduce the failure locally. You can follow `bug 1655554 `_ as we work on improving this workflow. diff --git a/testing/perfdocs/generated/mach-try-perf.rst b/testing/perfdocs/generated/mach-try-perf.rst index a6377886247d..6fcd0e70f22d 100644 --- a/testing/perfdocs/generated/mach-try-perf.rst +++ b/testing/perfdocs/generated/mach-try-perf.rst @@ -39,7 +39,7 @@ The tool is built to be conservative about the number of tests to run, so if you at all relative to the existing GeckoView, and Fenix tasks, then you will need to make fixes in the associated taskcluster files (e.g. - taskcluster/ci/test/browsertime-mobile.yml). + taskcluster/kinds/test/browsertime-mobile.yml). Alternatively, set MOZ_FIREFOX_ANDROID_APK_OUTPUT to a path to an APK, and then run the command with --browsertime-upload-apk firefox-android. This option diff --git a/testing/perfdocs/generated/talos.rst b/testing/perfdocs/generated/talos.rst index 3a730e1035fd..9e9fc9af6e68 100644 --- a/testing/perfdocs/generated/talos.rst +++ b/testing/perfdocs/generated/talos.rst @@ -125,7 +125,7 @@ At a glance - Tests are defined in `testing/talos/talos/test.py `__ - Treeherder abbreviations are defined in - `taskcluster/ci/test/talos.yml `__ + `taskcluster/kinds/test/talos.yml `__ - Suites are defined for production in `testing/talos/talos.json `__ @@ -133,7 +133,7 @@ Test lifecycle ************** - Taskcluster schedules `talos - jobs `__ + jobs `__ - Taskcluster runs a Talos job on a hardware machine when one is available - this is bootstrapped by `mozharness `__ diff --git a/testing/performance/mach-try-perf/perfdocs/index.rst b/testing/performance/mach-try-perf/perfdocs/index.rst index a6377886247d..6fcd0e70f22d 100644 --- a/testing/performance/mach-try-perf/perfdocs/index.rst +++ b/testing/performance/mach-try-perf/perfdocs/index.rst @@ -39,7 +39,7 @@ The tool is built to be conservative about the number of tests to run, so if you at all relative to the existing GeckoView, and Fenix tasks, then you will need to make fixes in the associated taskcluster files (e.g. - taskcluster/ci/test/browsertime-mobile.yml). + taskcluster/kinds/test/browsertime-mobile.yml). Alternatively, set MOZ_FIREFOX_ANDROID_APK_OUTPUT to a path to an APK, and then run the command with --browsertime-upload-apk firefox-android. This option diff --git a/testing/raptor/raptor/perfdocs/debugging.rst b/testing/raptor/raptor/perfdocs/debugging.rst index 8cc799e8203c..87165765f8c7 100644 --- a/testing/raptor/raptor/perfdocs/debugging.rst +++ b/testing/raptor/raptor/perfdocs/debugging.rst @@ -14,9 +14,9 @@ As of now, there is no easy way to do this. Raptor was not built for debugging f To debug a functional failure in Raptor you can follow these steps: #. If bug 1653617 has not landed yet, apply the patch. -#. Add the --verbose flag to the extra-options list `here `__. +#. Add the --verbose flag to the extra-options list `here `__. #. If the --setenv doesn't exist yet (`bug 1494669 `_), then add your MOZ_LOG environment variables to give you additional logging `here `_. -#. If the flag does exist, then you can add the MOZ_LOG variables to the `raptor.yml `_ configuration file. +#. If the flag does exist, then you can add the MOZ_LOG variables to the `raptor.yml `_ configuration file. #. Push to try if you can't reproduce the failure locally. You can follow `bug 1655554 `_ as we work on improving this workflow. diff --git a/testing/skipfails.py b/testing/skipfails.py index 0d9f636632ac..3f308ed1e3c6 100644 --- a/testing/skipfails.py +++ b/testing/skipfails.py @@ -843,7 +843,7 @@ class Skipfails(object): """Get mozinfo for each test variants""" if len(self.variants) == 0: - variants_file = "taskcluster/ci/test/variants.yml" + variants_file = "taskcluster/kinds/test/variants.yml" variants_path = self.full_path(variants_file) fp = io.open(variants_path, "r", encoding="utf-8") raw_variants = load(fp, Loader=Loader) diff --git a/testing/talos/perfdocs/index.rst b/testing/talos/perfdocs/index.rst index e5e4ebe2a550..e1a2f150f052 100644 --- a/testing/talos/perfdocs/index.rst +++ b/testing/talos/perfdocs/index.rst @@ -125,7 +125,7 @@ At a glance - Tests are defined in `testing/talos/talos/test.py `__ - Treeherder abbreviations are defined in - `taskcluster/ci/test/talos.yml `__ + `taskcluster/kinds/test/talos.yml `__ - Suites are defined for production in `testing/talos/talos.json `__ @@ -133,7 +133,7 @@ Test lifecycle ************** - Taskcluster schedules `talos - jobs `__ + jobs `__ - Taskcluster runs a Talos job on a hardware machine when one is available - this is bootstrapped by `mozharness `__ diff --git a/third_party/python/mozilla_repo_urls/test/test_integration.py b/third_party/python/mozilla_repo_urls/test/test_integration.py index 200c492227c6..7fbaefd7a41f 100644 --- a/third_party/python/mozilla_repo_urls/test/test_integration.py +++ b/third_party/python/mozilla_repo_urls/test/test_integration.py @@ -138,24 +138,24 @@ import mozilla_repo_urls }, "user": "", "valid": True, - }, - ), - ( - "https://hg.mozilla.org/mozilla-central/raw-file/tip/taskcluster/ci/config.yml", # noqa: E501 - does_not_raise(), - { - "github": False, + }, + ), + ( + "https://hg.mozilla.org/mozilla-central/raw-file/tip/taskcluster/config.yml", # noqa: E501 + does_not_raise(), + { + "github": False, "git_cinnabar": False, "groups": [], - "hgmo": True, - "host": "hg.mozilla.org", - "name": "mozilla-central", - "normalized": "https://hg.mozilla.org/mozilla-central/raw-file/tip/taskcluster/ci/config.yml", # noqa: E501 - "path_raw": "/raw-file/tip/taskcluster/ci/config.yml", - "path": "tip/taskcluster/ci/config.yml", - "pathname": "/mozilla-central", - "platform": "hgmo", - "port": "", + "hgmo": True, + "host": "hg.mozilla.org", + "name": "mozilla-central", + "normalized": "https://hg.mozilla.org/mozilla-central/raw-file/tip/taskcluster/config.yml", # noqa: E501 + "path_raw": "/raw-file/tip/taskcluster/config.yml", + "path": "tip/taskcluster/config.yml", + "pathname": "/mozilla-central", + "platform": "hgmo", + "port": "", "protocol": "https", "protocols": ["https"], "repo": "mozilla-central", @@ -163,32 +163,32 @@ import mozilla_repo_urls "repo_path": "mozilla-central", "repo_type": "hg", "resource": "hg.mozilla.org", - "taskcluster_role_prefix": "repo:hg.mozilla.org/mozilla-central", - "urls": { - "hg": "hg://hg.mozilla.org:https/mozilla-central", - "https": "https://hg.mozilla.org/mozilla-central/raw-file/tip/taskcluster/ci/config.yml", # noqa: E501 - "ssh": "ssh://hg.mozilla.org/mozilla-central", - }, - "user": "", + "taskcluster_role_prefix": "repo:hg.mozilla.org/mozilla-central", + "urls": { + "hg": "hg://hg.mozilla.org:https/mozilla-central", + "https": "https://hg.mozilla.org/mozilla-central/raw-file/tip/taskcluster/config.yml", # noqa: E501 + "ssh": "ssh://hg.mozilla.org/mozilla-central", + }, + "user": "", "valid": True, - }, - ), - ( - "https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/ci/config.yml", # noqa: E501 - does_not_raise(), - { - "github": False, + }, + ), + ( + "https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/config.yml", # noqa: E501 + does_not_raise(), + { + "github": False, "git_cinnabar": False, "groups": [], - "hgmo": True, - "host": "hg.mozilla.org", - "name": "mozilla-central", - "normalized": "https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/ci/config.yml", # noqa: E501 - "path_raw": "/file/tip/taskcluster/ci/config.yml", - "path": "tip/taskcluster/ci/config.yml", - "pathname": "/mozilla-central", - "platform": "hgmo", - "port": "", + "hgmo": True, + "host": "hg.mozilla.org", + "name": "mozilla-central", + "normalized": "https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/config.yml", # noqa: E501 + "path_raw": "/file/tip/taskcluster/config.yml", + "path": "tip/taskcluster/config.yml", + "pathname": "/mozilla-central", + "platform": "hgmo", + "port": "", "protocol": "https", "protocols": ["https"], "repo": "mozilla-central", @@ -196,13 +196,13 @@ import mozilla_repo_urls "repo_path": "mozilla-central", "repo_type": "hg", "resource": "hg.mozilla.org", - "taskcluster_role_prefix": "repo:hg.mozilla.org/mozilla-central", - "urls": { - "hg": "hg://hg.mozilla.org:https/mozilla-central", - "https": "https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/ci/config.yml", # noqa: E501 - "ssh": "ssh://hg.mozilla.org/mozilla-central", - }, - "user": "", + "taskcluster_role_prefix": "repo:hg.mozilla.org/mozilla-central", + "urls": { + "hg": "hg://hg.mozilla.org:https/mozilla-central", + "https": "https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/config.yml", # noqa: E501 + "ssh": "ssh://hg.mozilla.org/mozilla-central", + }, + "user": "", "valid": True, }, ), diff --git a/third_party/python/poetry.lock b/third_party/python/poetry.lock index 97513f8ba509..9a67173617b6 100644 --- a/third_party/python/poetry.lock +++ b/third_party/python/poetry.lock @@ -1161,7 +1161,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -1376,14 +1375,14 @@ test = ["aiofiles", "coverage", "flake8", "httmock", "httptest", "hypothesis", " [[package]] name = "taskcluster-taskgraph" -version = "6.3.0" +version = "7.4.0" description = "Build taskcluster taskgraphs" category = "main" optional = false python-versions = "*" files = [ - {file = "taskcluster-taskgraph-6.3.0.tar.gz", hash = "sha256:a32ac3aad6aa90c593268bee8864d9f773e86e1f53d0b513d128d59b52c1e20b"}, - {file = "taskcluster_taskgraph-6.3.0-py3-none-any.whl", hash = "sha256:43ce187215ab8658c06ad80f46c4606ce51b9986f4365d541416eecf9d6a2c28"}, + {file = "taskcluster-taskgraph-7.4.0.tar.gz", hash = "sha256:457bcf5bcef0202435cdf01b8cbc67a97fc755d647e6d5c4f4ae69f00d9e98ad"}, + {file = "taskcluster_taskgraph-7.4.0-py3-none-any.whl", hash = "sha256:2dd814ca94d64d2663facbcb55bda18e9748ed142ef551803bba71a3e793f2ee"}, ] [package.dependencies] @@ -1625,4 +1624,4 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=4.6)", "pytest-black ( [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "cef77da3299e7849f5039e8d9017216048d4ca56af298209e5bf3db7f92c2d4c" +content-hash = "8dc66a54aad7ab1d775e5a94fb1d24c517a0970f0dab2fa12d0002e84641d5e4" diff --git a/third_party/python/requirements.in b/third_party/python/requirements.in index 9915e9195727..dd73035ecd9f 100644 --- a/third_party/python/requirements.in +++ b/third_party/python/requirements.in @@ -53,7 +53,7 @@ setuptools==68.0.0 six==1.16.0 slugid==2.0.0 taskcluster==44.2.2 -taskcluster-taskgraph==6.3.0 +taskcluster-taskgraph==7.4.0 taskcluster-urls==13.0.1 toml==0.10.2 tomlkit==0.12.3 diff --git a/third_party/python/requirements.txt b/third_party/python/requirements.txt index eedc022c50a9..d0e122e383a9 100644 --- a/third_party/python/requirements.txt +++ b/third_party/python/requirements.txt @@ -492,7 +492,6 @@ pyyaml==6.0.1 ; python_version >= "3.8" and python_version < "4.0" \ --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ - --hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \ --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ @@ -540,9 +539,9 @@ six==1.16.0 ; python_version >= "3.8" and python_version < "4.0" \ slugid==2.0.0 ; python_version >= "3.8" and python_version < "4.0" \ --hash=sha256:a950d98b72691178bdd4d6c52743c4a2aa039207cf7a97d71060a111ff9ba297 \ --hash=sha256:aec8b0e01c4ad32e38e12d609eab3ec912fd129aaf6b2ded0199b56a5f8fd67c -taskcluster-taskgraph==6.3.0 ; python_version >= "3.8" and python_version < "4.0" \ - --hash=sha256:43ce187215ab8658c06ad80f46c4606ce51b9986f4365d541416eecf9d6a2c28 \ - --hash=sha256:a32ac3aad6aa90c593268bee8864d9f773e86e1f53d0b513d128d59b52c1e20b +taskcluster-taskgraph==7.4.0 ; python_version >= "3.8" and python_version < "4.0" \ + --hash=sha256:2dd814ca94d64d2663facbcb55bda18e9748ed142ef551803bba71a3e793f2ee \ + --hash=sha256:457bcf5bcef0202435cdf01b8cbc67a97fc755d647e6d5c4f4ae69f00d9e98ad taskcluster-urls==13.0.1 ; python_version >= "3.8" and python_version < "4.0" \ --hash=sha256:5e25e7e6818e8877178b175ff43d2e6548afad72694aa125f404a7329ece0973 \ --hash=sha256:b25e122ecec249c4299ac7b20b08db76e3e2025bdaeb699a9d444556de5fd367 \ diff --git a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/METADATA b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/METADATA deleted file mode 100644 index 536b4274f691..000000000000 --- a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/METADATA +++ /dev/null @@ -1,28 +0,0 @@ -Metadata-Version: 2.1 -Name: taskcluster-taskgraph -Version: 6.3.0 -Summary: Build taskcluster taskgraphs -Home-page: https://github.com/taskcluster/taskgraph -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Console -Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Topic :: Software Development -License-File: LICENSE -Requires-Dist: appdirs (>=1.4) -Requires-Dist: cookiecutter (~=2.1) -Requires-Dist: json-e (>=2.7) -Requires-Dist: mozilla-repo-urls -Requires-Dist: PyYAML (>=5.3.1) -Requires-Dist: redo (>=2.0) -Requires-Dist: requests (>=2.25) -Requires-Dist: slugid (>=2.0) -Requires-Dist: taskcluster-urls (>=11.0) -Requires-Dist: voluptuous (>=0.12.1) -Provides-Extra: load-image -Requires-Dist: zstandard ; extra == 'load-image' - diff --git a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/RECORD b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/RECORD deleted file mode 100644 index 3a6dfdfc35d0..000000000000 --- a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/RECORD +++ /dev/null @@ -1,80 +0,0 @@ -taskgraph/__init__.py,sha256=ILqRnb_Cy7WBFggPsK8BML-nmWySW-capstDs3pWb-c,729 -taskgraph/config.py,sha256=XJYKaA9Egn7aiyZ0v70VCq3Kc-XkK08CK2LDsDfsDR8,4822 -taskgraph/create.py,sha256=MeWVr5gKJefjwK_3_xZUcDDu2NVH97gbUuu1dw_I9hA,5184 -taskgraph/decision.py,sha256=qARBTlLYJ7NVw3aflrspRn_hFmvKcrXJ058yao_4b7A,12882 -taskgraph/docker.py,sha256=6tdGVrKFNonznRJSP4IDZEhKnjV-wYKsR0nXnoDOvZk,7924 -taskgraph/files_changed.py,sha256=W3_gEgUT-mVH9DaaU_8X6gYpftrqBU3kgveGbzPLziU,2793 -taskgraph/filter_tasks.py,sha256=R7tYXiaVPGIkQ6O1c9-QJrKZ59m9pFXCloUlPraVnZU,866 -taskgraph/generator.py,sha256=AmkMCVNmj5spJhRfpSx7-zP3v8OU7i8zAbGMROLLEG8,15668 -taskgraph/graph.py,sha256=bHUsv2pPa2SSaWgBY-ItIj7REPd0o4fFYrwoQbwFKTY,4680 -taskgraph/main.py,sha256=UHSywURHwD56w2vGHgjA8O7K1yaCltgMXlJuuFfFjvY,26802 -taskgraph/morph.py,sha256=Q6weAi-xpJM4XoKA2mM6gVXQYLnE1YSws53vTZygMkY,9192 -taskgraph/parameters.py,sha256=xaEUElvdKhxHeJNRMF-6JBFDFiVO1Es2fm38PJQ1JA4,12134 -taskgraph/target_tasks.py,sha256=41BIVwiATy8DCQujPduTtnFmgHlKOfw6RPGL4b20WO8,3324 -taskgraph/task.py,sha256=tRr7WhJ2qjYXi-77wva17CpfK53m6W_cl-xzks_GGaQ,3240 -taskgraph/taskgraph.py,sha256=Fh5cX8LrgYmkpVP_uhpfRgHSKHfZjO-VGSmnFUjEru0,2434 -taskgraph/actions/__init__.py,sha256=lVP1e0YyELg7-_42MWWDbT0cKv_p53BApVE6vWOiPww,416 -taskgraph/actions/add_new_jobs.py,sha256=HAfuRDzFti_YmeudxqVl6hgrEbm-ki5-jSCDMC0HBDE,1836 -taskgraph/actions/cancel.py,sha256=UQSt_6y3S6PXNmUo_mNaUOuDvK2bixWjzdjTKXieEEg,1309 -taskgraph/actions/cancel_all.py,sha256=zrKgnW63gMGS5yldJieDt-GAR_XTiGRgybWAipIUCqQ,1941 -taskgraph/actions/rebuild_cached_tasks.py,sha256=UrVAvTmkkF4TAB5vNSpK1kJqMhMkKAMGmrifxH9kQJQ,1086 -taskgraph/actions/registry.py,sha256=xmhoEGMyYj6TTRFwMowZAUp0aqvtLvdVfmRWM7Yh7xo,13122 -taskgraph/actions/retrigger.py,sha256=wF08p_CgsfqraYelc3JLmPcqBFcO-Yt8gZZLlJZBixQ,9387 -taskgraph/actions/util.py,sha256=TxWxMWiKZeuKRwqiUawzjzpa5VF5AWgAKCLy7YaKG80,10661 -taskgraph/loader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -taskgraph/loader/default.py,sha256=ND_Sx7yx7io1B-6rWEGkg3UIy7iO3DvSLMXwcEqF1N8,1185 -taskgraph/loader/transform.py,sha256=olUBPjxk3eEIg25sduxlcyqhjoig4ts5kPlT_zs6g9g,2147 -taskgraph/optimize/__init__.py,sha256=Oqpq1RW8QzOcu7zaMlNQ3BHT9ws9e_93FWfCqzNcQps,123 -taskgraph/optimize/base.py,sha256=WvoDNewyHG46IQbG3th-aau9OxSKegsYNfvdOEmunbA,18341 -taskgraph/optimize/strategies.py,sha256=IifMlxppVrIABsvn6UBwQYBFUdxkmyZz_FOtK6yNPps,2380 -taskgraph/run-task/fetch-content,sha256=G1aAvZlTg0yWHqxhSxi4RvfxW-KBJ5JwnGtWRqfH_bg,29990 -taskgraph/run-task/hgrc,sha256=BybWLDR89bWi3pE5T05UqmDHs02CbLypE-omLZWU6Uk,896 -taskgraph/run-task/robustcheckout.py,sha256=vPKvHb3fIIJli9ZVZG88XYoa8Sohy2JrpmH6pDgBDHI,30813 -taskgraph/run-task/run-task,sha256=Mpr195iq9eOh6B4MBpPzEDlxeNyJq0Fa2yrtlJunlXE,45434 -taskgraph/transforms/__init__.py,sha256=aw1dz2sRWZcbTILl6SVDuqIEw0mDdjSYu3LCVs-RLXE,110 -taskgraph/transforms/base.py,sha256=LFw2NwhrSriI3vbcCttArTFb7uHxckQpHeFZmatofvM,5146 -taskgraph/transforms/cached_tasks.py,sha256=Z10VD1kEBVXJvj8qSsNTq2mYpklh0V1EN8OT6QK3v_E,2607 -taskgraph/transforms/chunking.py,sha256=7z9oXiA2dDguYwJPaZYCi-fEzbc--O9avZAFS3vP_kg,2592 -taskgraph/transforms/code_review.py,sha256=eE2xrDtdD_n3HT3caQ2HGAkPm6Uutdm4hDCpCoFjEps,707 -taskgraph/transforms/docker_image.py,sha256=AUuWMx43FcQfgbXy4_2Sjae0cWrh5XWMMcJ3ItcoKes,7606 -taskgraph/transforms/fetch.py,sha256=ORnxpVidOQtI1q1xeHl1c1jlShXD8R_jTGC2CX3lLM4,10479 -taskgraph/transforms/from_deps.py,sha256=1mdjIWYshVI2zBywzB3JEqOyvqgVjFvarcQt9PLDSc4,8950 -taskgraph/transforms/notify.py,sha256=0sga-Ls9dhWLAsL0FBjXmVbbduee8LAZp_1pHBQR0iI,6019 -taskgraph/transforms/task.py,sha256=0oQYH7Upjus0-gzCrYbE0tUKZQUEv6Uq1adGBqiNM60,52254 -taskgraph/transforms/task_context.py,sha256=FxZwT69ozierogtlCTNvk7zCW52d0HdhCaJN7EDmI1s,4272 -taskgraph/transforms/job/__init__.py,sha256=JbNpqdoJRId24QVGe821r6u7Zvm2fTNvME_PMGunaoU,17706 -taskgraph/transforms/job/common.py,sha256=ldlbRI8sdEd-eUcre4GtXMerUg0RQZ_XSe9GwAkfI3I,5897 -taskgraph/transforms/job/index_search.py,sha256=Ngh9FFu1bx2kHVTChW2vcrbnb3SzMneRHopXk18RfB4,1220 -taskgraph/transforms/job/run_task.py,sha256=s9gq1bPdzBB0j2OguXJpWn1-S5Ctltqo4aLsB4kzpUc,8385 -taskgraph/transforms/job/toolchain.py,sha256=GOqIvp1MgtV-6whi2ofgSCFB7GolikZbfLXz0C1h0vc,6015 -taskgraph/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -taskgraph/util/archive.py,sha256=nzYn8cQ3NfLAeV-2SuTNoeQ6hg8m40f6FQcSTyVIKwQ,2855 -taskgraph/util/attributes.py,sha256=pPOFmwkDQQ-IqfDpVghZ10YI_qXRY4Bi5JP3xr6XVvc,2964 -taskgraph/util/cached_tasks.py,sha256=o-yJ91wlWbzoDB2GvKPpGcDE27_IEMgczp_figEBjV8,3406 -taskgraph/util/decision.py,sha256=uTC143FpTKQkGff5jIz3voWRYXBCHgx-XAm7FMW53hE,2433 -taskgraph/util/dependencies.py,sha256=3Qba3zI87JYR5fk5FndGzEVW-5NIzzZrBf9rVYcnLD0,2734 -taskgraph/util/docker.py,sha256=rTbzUt8S6s3N1r8gmwHrqsIY9VZ7TDWBM-jZQ5w0P_U,7762 -taskgraph/util/hash.py,sha256=31sQmDwQOavA5hWsmzWDNFoFTaTp5a7qLSQLNTEALD8,1661 -taskgraph/util/keyed_by.py,sha256=cgBH4tG8eH5UUrm5q4ODG7A4fzkGAOI7feVoZy3V8Ho,3419 -taskgraph/util/memoize.py,sha256=XDlwc-56gzoY8QTwOoiCOYL-igX7JoMcY-9Ih80Euc8,1331 -taskgraph/util/parameterization.py,sha256=dzxh8Bc8MBKoDMwj2V2AQab9UrC-JcM3tg0hDVTWpjc,3184 -taskgraph/util/path.py,sha256=e-JloOQV2-Oua_pe335bv4xWAB07vb82TKpu_zCOl0w,4466 -taskgraph/util/python_path.py,sha256=ed4F5z2mId56LauVczgxm_LGxgQi8XlxlYDgXOPZyII,1576 -taskgraph/util/readonlydict.py,sha256=XzTG-gqGqWVlSkDxSyOL6Ur7Z0ONhIJ9DVLWV3q4q1w,787 -taskgraph/util/schema.py,sha256=JGd0Imjfv6JKCY_tjJtOYwI6uwKUaNgzAcvcZj5WE6A,8323 -taskgraph/util/shell.py,sha256=MB9zHVSvxgOuszgmKr2rWUDahANZkbHHNkjjagZG_3I,1317 -taskgraph/util/taskcluster.py,sha256=cGUGvkrefRHngjyZm_iQRYKRlGi4jMIr7ky0fi_YBrg,12445 -taskgraph/util/taskgraph.py,sha256=ecKEvTfmLVvEKLPO_0g34CqVvc0iCzuNMh3064BZNrE,1969 -taskgraph/util/templates.py,sha256=HGTaIKCpAwEzBDHq0cDai1HJjPJrdnHsjJz6N4LVpKI,2139 -taskgraph/util/time.py,sha256=pNFcTH-iYRfm2-okm1lMATc4B5wO-_FXbOFXEtXD27g,3390 -taskgraph/util/treeherder.py,sha256=A3rpPUQB60Gn1Yx-OZgKuWWGJ8x0-6tcdeeslzco9ag,2687 -taskgraph/util/vcs.py,sha256=54Haq2XyC5CmPnjrPRQZY5wUeoFsaV9pWTYvBjPcVMA,18917 -taskgraph/util/verify.py,sha256=cSd7EeP9hUvp-5WOvKDHrvpFAGb_LuiNPxPp0-YmNEA,8947 -taskgraph/util/workertypes.py,sha256=1wgM6vLrlgtyv8854anVIs0Bx11kV8JJJaKcOHJc2j0,2498 -taskgraph/util/yaml.py,sha256=hfKI_D8Q7dimq4_VvO3WEh8CJsTrsIMwN6set7HIQbY,990 -taskcluster_taskgraph-6.3.0.dist-info/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725 -taskcluster_taskgraph-6.3.0.dist-info/METADATA,sha256=MgIgtvNBRjc0CjnoD-7KHLPpz3sGlja2CZU3GzUMW84,1046 -taskcluster_taskgraph-6.3.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 -taskcluster_taskgraph-6.3.0.dist-info/entry_points.txt,sha256=2hxDzE3qq_sHh-J3ROqwpxgQgxO-196phWAQREl2-XA,50 -taskcluster_taskgraph-6.3.0.dist-info/top_level.txt,sha256=3JNeYn_hNiNXC7DrdH_vcv-WYSE7QdgGjdvUYvSjVp0,10 -taskcluster_taskgraph-6.3.0.dist-info/RECORD,, diff --git a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/LICENSE b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/LICENSE similarity index 100% rename from third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/LICENSE rename to third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/LICENSE diff --git a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/METADATA b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/METADATA new file mode 100644 index 000000000000..6ea72209d2fc --- /dev/null +++ b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/METADATA @@ -0,0 +1,123 @@ +Metadata-Version: 2.1 +Name: taskcluster-taskgraph +Version: 7.4.0 +Summary: Build taskcluster taskgraphs +Home-page: https://github.com/taskcluster/taskgraph +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Console +Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Topic :: Software Development +License-File: LICENSE +Requires-Dist: appdirs >=1.4 +Requires-Dist: cookiecutter ~=2.1 +Requires-Dist: json-e >=2.7 +Requires-Dist: mozilla-repo-urls +Requires-Dist: PyYAML >=5.3.1 +Requires-Dist: redo >=2.0 +Requires-Dist: requests >=2.25 +Requires-Dist: slugid >=2.0 +Requires-Dist: taskcluster-urls >=11.0 +Requires-Dist: voluptuous >=0.12.1 +Provides-Extra: load-image +Requires-Dist: zstandard ; extra == 'load-image' + + +.. image:: https://firefox-ci-tc.services.mozilla.com/api/github/v1/repository/taskcluster/taskgraph/main/badge.svg + :target: https://firefox-ci-tc.services.mozilla.com/api/github/v1/repository/taskcluster/taskgraph/main/latest + :alt: Task Status + +.. image:: https://results.pre-commit.ci/badge/github/taskcluster/taskgraph/main.svg + :target: https://results.pre-commit.ci/latest/github/taskcluster/taskgraph/main + :alt: pre-commit.ci status + +.. image:: https://codecov.io/gh/taskcluster/taskgraph/branch/main/graph/badge.svg?token=GJIV52ZQNP + :target: https://codecov.io/gh/taskcluster/taskgraph + :alt: Code Coverage + +.. image:: https://badge.fury.io/py/taskcluster-taskgraph.svg + :target: https://badge.fury.io/py/taskcluster-taskgraph + :alt: Pypi Version + +.. image:: https://readthedocs.org/projects/taskcluster-taskgraph/badge/?version=latest + :target: https://taskcluster-taskgraph.readthedocs.io/en/latest/?badge=latest + :alt: Documentation Status + +.. image:: https://img.shields.io/badge/license-MPL%202.0-orange.svg + :target: http://mozilla.org/MPL/2.0 + :alt: License + +Taskgraph +========= + +Taskgraph is a Python library to generate graphs of tasks for the `Taskcluster +CI`_ service. It is the recommended approach for configuring tasks once your +project outgrows a single `.taskcluster.yml`_ file and is what powers the over +30,000 tasks and counting that make up Firefox's CI. + +For more information and usage instructions, `see the docs`_. + +How It Works +------------ + +Taskgraph leverages the fact that Taskcluster is a generic task execution +platform. This means that tasks can be scheduled via its `comprehensive API`_, +and aren't limited to being triggered in response to supported events. + +Taskgraph leverages this execution platform to allow CI systems to scale to any +size or complexity. + +1. A *decision task* is created via Taskcluster's normal `.taskcluster.yml`_ + file. This task invokes ``taskgraph``. +2. Taskgraph evaluates a series of yaml based task definitions (similar to + those other CI offerings provide). +3. Taskgraph applies transforms on top of these task definitions. Transforms + are Python functions that can programmatically alter or even clone a task + definition. +4. Taskgraph applies some optional optimization logic to remove unnecessary + tasks. +5. Taskgraph submits the resulting *task graph* to Taskcluster via its API. + +Taskgraph's combination of declarative task configuration combined with +programmatic alteration are what allow it to support CI systems of any scale. +Taskgraph is the library that powers the 30,000+ tasks making up `Firefox's +CI`_. + +.. _Taskcluster CI: https://taskcluster.net/ +.. _comprehensive API: https://docs.taskcluster.net/docs/reference/platform/queue/api +.. _.taskcluster.yml: https://docs.taskcluster.net/docs/reference/integrations/github/taskcluster-yml-v1 +.. _Firefox's CI: https://treeherder.mozilla.org/jobs?repo=mozilla-central +.. _see the docs: https://taskcluster-taskgraph.readthedocs.io + +Installation +------------ + +Taskgraph supports Python 3.8 and up, and can be installed from Pypi: + +.. code-block:: + + pip install taskcluster-taskgraph + + +Alternatively, the repo can be cloned and installed directly: + +.. code-block:: + + git clone https://github.com/taskcluster/taskgraph + cd taskgraph + python setup.py install + +In both cases, it's recommended to use a Python `virtual environment`_. + +.. _virtual environment: https://docs.python.org/3/tutorial/venv.html + +Get Involved +------------ + +If you'd like to get involved, please see our `contributing docs`_! + +.. _contributing docs: https://github.com/taskcluster/taskgraph/blob/main/CONTRIBUTING.rst diff --git a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/RECORD b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/RECORD new file mode 100644 index 000000000000..fdaff5d7ad4d --- /dev/null +++ b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/RECORD @@ -0,0 +1,79 @@ +taskgraph/__init__.py,sha256=QRasIKfHsnA7UGvcc7IWf6yYUmAI0WPUc0SGEyQMTyw,729 +taskgraph/config.py,sha256=8vntWUrPwGds22mFKYAgcsD4Mr8hoONTv2ssGBcClLw,5108 +taskgraph/create.py,sha256=_zokjSM3ZaO04l2LiMhenE8qXDZVfYvueIIu5hGUhzc,5185 +taskgraph/decision.py,sha256=H6Tk7Im_FufBRi8ovY6YfiEbJUINXKd4ldj6BA-wHzs,12880 +taskgraph/docker.py,sha256=D4i1eyhv__YAyyiNUggAS4DdiqR9R5jyovX7VQM97f4,8016 +taskgraph/files_changed.py,sha256=WpMXQLZz-W860a8o7P14UB3Z1nTCSJ7Xh0P7k1wHZRQ,2829 +taskgraph/filter_tasks.py,sha256=R7tYXiaVPGIkQ6O1c9-QJrKZ59m9pFXCloUlPraVnZU,866 +taskgraph/generator.py,sha256=zrH1zfy-8akksKTSOf6e4FEsdOd5y7-h1Jne_2Jabcc,15703 +taskgraph/graph.py,sha256=bHUsv2pPa2SSaWgBY-ItIj7REPd0o4fFYrwoQbwFKTY,4680 +taskgraph/main.py,sha256=LXlQEDUakrZRI5_oXXAsqKYdhluxxrFy1fiOxKwpSOM,28293 +taskgraph/morph.py,sha256=bwkaSGdTZLcK_rhF2st2mCGv9EHN5WdbnDeuZcqp9UA,9208 +taskgraph/parameters.py,sha256=CUbvMFMh2IexUGW3h0m95Mfg3utgqebOwW5naBmwvEc,12126 +taskgraph/target_tasks.py,sha256=9_v66bzmQFELPsfIDGITXrqzsmEiLq1EeuJFhycKL0M,3356 +taskgraph/task.py,sha256=tRr7WhJ2qjYXi-77wva17CpfK53m6W_cl-xzks_GGaQ,3240 +taskgraph/taskgraph.py,sha256=Fh5cX8LrgYmkpVP_uhpfRgHSKHfZjO-VGSmnFUjEru0,2434 +taskgraph/actions/__init__.py,sha256=lVP1e0YyELg7-_42MWWDbT0cKv_p53BApVE6vWOiPww,416 +taskgraph/actions/add_new_jobs.py,sha256=c8vGWGXMr4qqW2Axz9rbBrDopabZB3gf3SVFLBZH8ak,1865 +taskgraph/actions/cancel.py,sha256=xrIzlB5KzcnQ4_HultoIcnlxtbQhUi7723g5K2iQoY0,1263 +taskgraph/actions/cancel_all.py,sha256=zNiHtOiSQQxLyNJYtaW0JKPazHXSgZrq1C6o8DGYxG8,1887 +taskgraph/actions/rebuild_cached_tasks.py,sha256=r1QTri2ey30TdEztUgc-nkiHdJPe8Sbn7FvKeR_kt0Y,1115 +taskgraph/actions/registry.py,sha256=hubblOhL3fbWDRtKv7_6HiD0P94hzQrpjdMkj23CGCg,13564 +taskgraph/actions/retrigger.py,sha256=MKkoZDAe0SKIq6fHqwAc1Ici_wIGRd7MxeBNhwoDEGE,9388 +taskgraph/actions/util.py,sha256=gB8MZb8juP1S7EsLHJivr6BBY2bf5IUiIpN7Mq9-kXo,10964 +taskgraph/loader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +taskgraph/loader/default.py,sha256=_bBJG6l04v44Jm5HSIEnVndC05NpNmq5L28QfJHk0wo,1185 +taskgraph/loader/transform.py,sha256=olUBPjxk3eEIg25sduxlcyqhjoig4ts5kPlT_zs6g9g,2147 +taskgraph/optimize/__init__.py,sha256=Oqpq1RW8QzOcu7zaMlNQ3BHT9ws9e_93FWfCqzNcQps,123 +taskgraph/optimize/base.py,sha256=wTViUwVmY9sZvlzSuGwkVrETCo0v2OfyNxFFgzJrDNc,18982 +taskgraph/optimize/strategies.py,sha256=MqLdZPyPnjVVLr3bPJQxqWiBe3Q4yidw__O1AiLO6b4,2334 +taskgraph/run-task/fetch-content,sha256=G1aAvZlTg0yWHqxhSxi4RvfxW-KBJ5JwnGtWRqfH_bg,29990 +taskgraph/run-task/hgrc,sha256=BybWLDR89bWi3pE5T05UqmDHs02CbLypE-omLZWU6Uk,896 +taskgraph/run-task/robustcheckout.py,sha256=vPKvHb3fIIJli9ZVZG88XYoa8Sohy2JrpmH6pDgBDHI,30813 +taskgraph/run-task/run-task,sha256=ev64Ud2X3482B05aurUcWD93_sZS1aW2N-eVutRHF5k,45753 +taskgraph/transforms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +taskgraph/transforms/base.py,sha256=z20Yh619srbwuQJWASRtG2_j6NUbWlCujTTCHWLa0GY,5147 +taskgraph/transforms/cached_tasks.py,sha256=Z10VD1kEBVXJvj8qSsNTq2mYpklh0V1EN8OT6QK3v_E,2607 +taskgraph/transforms/chunking.py,sha256=7z9oXiA2dDguYwJPaZYCi-fEzbc--O9avZAFS3vP_kg,2592 +taskgraph/transforms/code_review.py,sha256=tevRFQli3MkzW_0Zhr-hwlVti8hFaXEz94llwhBu_ns,713 +taskgraph/transforms/docker_image.py,sha256=GScS7Lld3YcS57eC30wp3DJM_ATLrmmVfZzINKgC1fM,7546 +taskgraph/transforms/fetch.py,sha256=u1M57LQOi0kHz6FFP1qah3yJh15eXYqQCF_F6r5qjh0,10662 +taskgraph/transforms/from_deps.py,sha256=3Qez_JcdGCJ5zaT4H-RI7qyWXjpK-FvBz_RScu5I1RQ,8950 +taskgraph/transforms/notify.py,sha256=0sga-Ls9dhWLAsL0FBjXmVbbduee8LAZp_1pHBQR0iI,6019 +taskgraph/transforms/task.py,sha256=nRzNAxLjA6BsFktZAA9Upqb_pSFNhjoCzKm0QDxvVgM,52586 +taskgraph/transforms/task_context.py,sha256=9v3ke967atAYCtQxIblSFucJA1tum9Q8QpXQeTwNIzU,4278 +taskgraph/transforms/run/__init__.py,sha256=hrolZSjeOB4QLvbl22Mlh9PngeNhiJ-inzO85hNKMZA,17731 +taskgraph/transforms/run/common.py,sha256=G3WdMHU5YWUfk1uR6xsxWY7MQKjU9tnqtRDmGttUqt4,5626 +taskgraph/transforms/run/index_search.py,sha256=ABIaX2FFx02o1StZgNAB_ZDXc1lTFO2aUIBH5BuUjtA,1224 +taskgraph/transforms/run/run_task.py,sha256=0GI8syzGtRDT07g_6SXG99JtxDBe09zsW5ltL-aUhYU,8403 +taskgraph/transforms/run/toolchain.py,sha256=KiuBfJ6CShwGYIIljy4i7iYSHFFXF_A_zSvRGUgYboA,6033 +taskgraph/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +taskgraph/util/archive.py,sha256=NIqg2Su5PUqOv4JM60uFixsMsOXN26u5paB1Uh6foSI,4707 +taskgraph/util/attributes.py,sha256=pPOFmwkDQQ-IqfDpVghZ10YI_qXRY4Bi5JP3xr6XVvc,2964 +taskgraph/util/cached_tasks.py,sha256=iTtPYal8yUHpzk4XuZEyZM2M_YQlNN7HIr0CWXfO8Y4,4171 +taskgraph/util/dependencies.py,sha256=3Qba3zI87JYR5fk5FndGzEVW-5NIzzZrBf9rVYcnLD0,2734 +taskgraph/util/docker.py,sha256=2rc1aIsBNE3LcWsEx2HKfJxCII74SCZXlamzqlUjKFA,7765 +taskgraph/util/hash.py,sha256=U5h6WwC3zs0ooX8odc7AjgPQKKFpDXL7PemoyENPJYo,1644 +taskgraph/util/keyed_by.py,sha256=EMWNRRqYB0AS7A4Y4lthYf2HB7G2ercGFf4hN9zwyaY,3348 +taskgraph/util/memoize.py,sha256=XDlwc-56gzoY8QTwOoiCOYL-igX7JoMcY-9Ih80Euc8,1331 +taskgraph/util/parameterization.py,sha256=2uMeszQTaJCqSZp_HOIB6vD6DYxjwgoDAAY5-8YWfgA,3413 +taskgraph/util/path.py,sha256=e-JloOQV2-Oua_pe335bv4xWAB07vb82TKpu_zCOl0w,4466 +taskgraph/util/python_path.py,sha256=ed4F5z2mId56LauVczgxm_LGxgQi8XlxlYDgXOPZyII,1576 +taskgraph/util/readonlydict.py,sha256=XzTG-gqGqWVlSkDxSyOL6Ur7Z0ONhIJ9DVLWV3q4q1w,787 +taskgraph/util/schema.py,sha256=HmbbJ_i5uxZZHZSJ8sVWaD-VMhZI4ymx0STNcjO5t2M,8260 +taskgraph/util/shell.py,sha256=nf__ly0Ikhj92AiEBCQtvyyckm8UfO_3DSgz0SU-7QA,1321 +taskgraph/util/taskcluster.py,sha256=uFfVqdHD3GznQXqAwfhRDBYSKP5yGpnzb9gQVlNiCCc,13584 +taskgraph/util/taskgraph.py,sha256=ecKEvTfmLVvEKLPO_0g34CqVvc0iCzuNMh3064BZNrE,1969 +taskgraph/util/templates.py,sha256=HGTaIKCpAwEzBDHq0cDai1HJjPJrdnHsjJz6N4LVpKI,2139 +taskgraph/util/time.py,sha256=XauJ0DbU0fyFvHLzJLG4ehHv9KaKixxETro89GPC1yk,3350 +taskgraph/util/treeherder.py,sha256=kc8jCy_lYduBxVMYOQzWpmI_6i2bRmkQLKq5DGmbiDI,2721 +taskgraph/util/vcs.py,sha256=FjS82fiTsoQ_ArjTCDOtDGfNdVUp_8zvVKB9SoAG3Rs,18019 +taskgraph/util/verify.py,sha256=htrNX7aXMMDzxymsFVcs0kaO5gErFHd62g9cQsZI_WE,8518 +taskgraph/util/workertypes.py,sha256=1wgM6vLrlgtyv8854anVIs0Bx11kV8JJJaKcOHJc2j0,2498 +taskgraph/util/yaml.py,sha256=-LaIf3RROuaSWckOOGN5Iviu-DHWxIChgHn9a7n6ec4,1059 +taskcluster_taskgraph-7.4.0.dist-info/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725 +taskcluster_taskgraph-7.4.0.dist-info/METADATA,sha256=-yFTcoQLOzk0qeFHmVj_SnVG3KTmIXeQwu-9Zoft1Wk,4688 +taskcluster_taskgraph-7.4.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92 +taskcluster_taskgraph-7.4.0.dist-info/entry_points.txt,sha256=2hxDzE3qq_sHh-J3ROqwpxgQgxO-196phWAQREl2-XA,50 +taskcluster_taskgraph-7.4.0.dist-info/top_level.txt,sha256=3JNeYn_hNiNXC7DrdH_vcv-WYSE7QdgGjdvUYvSjVp0,10 +taskcluster_taskgraph-7.4.0.dist-info/RECORD,, diff --git a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/WHEEL b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/WHEEL similarity index 65% rename from third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/WHEEL rename to third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/WHEEL index becc9a66ea73..bab98d675883 100644 --- a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/WHEEL +++ b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/WHEEL @@ -1,5 +1,5 @@ Wheel-Version: 1.0 -Generator: bdist_wheel (0.37.1) +Generator: bdist_wheel (0.43.0) Root-Is-Purelib: true Tag: py3-none-any diff --git a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/entry_points.txt b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/entry_points.txt similarity index 100% rename from third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/entry_points.txt rename to third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/entry_points.txt diff --git a/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/top_level.txt b/third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/top_level.txt similarity index 100% rename from third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-6.3.0.dist-info/top_level.txt rename to third_party/python/taskcluster_taskgraph/taskcluster_taskgraph-7.4.0.dist-info/top_level.txt diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/__init__.py b/third_party/python/taskcluster_taskgraph/taskgraph/__init__.py index 81cc7632308f..4c34b66d680f 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/__init__.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/__init__.py @@ -2,7 +2,7 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -__version__ = "6.3.0" +__version__ = "7.4.0" # Maximum number of dependencies a single task can have # https://docs.taskcluster.net/reference/platform/taskcluster-queue/references/api#createTask diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/actions/add_new_jobs.py b/third_party/python/taskcluster_taskgraph/taskgraph/actions/add_new_jobs.py index c5e18215462b..f63525008627 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/actions/add_new_jobs.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/actions/add_new_jobs.py @@ -40,7 +40,7 @@ from taskgraph.actions.util import ( ) def add_new_jobs_action(parameters, graph_config, input, task_group_id, task_id): decision_task_id, full_task_graph, label_to_taskid = fetch_graph_and_labels( - parameters, graph_config + parameters, graph_config, task_group_id=task_group_id ) to_run = [] diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/actions/cancel.py b/third_party/python/taskcluster_taskgraph/taskgraph/actions/cancel.py index 03788c653814..33a5394e68ff 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/actions/cancel.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/actions/cancel.py @@ -34,9 +34,7 @@ def cancel_action(parameters, graph_config, input, task_group_id, task_id): # cannot be cancelled at this time, but it's also not running # anymore, so we can ignore this error. logger.info( - 'Task "{}" is past its deadline and cannot be cancelled.'.format( - task_id - ) + f'Task "{task_id}" is past its deadline and cannot be cancelled.' ) return raise diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/actions/cancel_all.py b/third_party/python/taskcluster_taskgraph/taskgraph/actions/cancel_all.py index d3e0440839e2..55453b7624c5 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/actions/cancel_all.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/actions/cancel_all.py @@ -43,9 +43,7 @@ def cancel_all_action(parameters, graph_config, input, task_group_id, task_id): # cannot be cancelled at this time, but it's also not running # anymore, so we can ignore this error. logger.info( - "Task {} is past its deadline and cannot be cancelled.".format( - task_id - ) + f"Task {task_id} is past its deadline and cannot be cancelled." ) return raise diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/actions/rebuild_cached_tasks.py b/third_party/python/taskcluster_taskgraph/taskgraph/actions/rebuild_cached_tasks.py index 2b88e6a698b5..8ea2e3715022 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/actions/rebuild_cached_tasks.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/actions/rebuild_cached_tasks.py @@ -18,7 +18,7 @@ def rebuild_cached_tasks_action( parameters, graph_config, input, task_group_id, task_id ): decision_task_id, full_task_graph, label_to_taskid = fetch_graph_and_labels( - parameters, graph_config + parameters, graph_config, task_group_id=task_group_id ) cached_tasks = [ label diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/actions/registry.py b/third_party/python/taskcluster_taskgraph/taskgraph/actions/registry.py index 1e909d30c7ed..20955bd3f2eb 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/actions/registry.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/actions/registry.py @@ -154,9 +154,7 @@ def register_callback_action( ], "register_callback_action must be used as decorator" if not cb_name: cb_name = name - assert cb_name not in callbacks, "callback name {} is not unique".format( - cb_name - ) + assert cb_name not in callbacks, f"callback name {cb_name} is not unique" def action_builder(parameters, graph_config, decision_task_id): if not available(parameters): @@ -165,11 +163,11 @@ def register_callback_action( actionPerm = "generic" if generic else cb_name # gather up the common decision-task-supplied data for this action - repo_param = "head_repository" repository = { - "url": parameters[repo_param], + "url": parameters["head_repository"], "project": parameters["project"], "level": parameters["level"], + "base_url": parameters["base_repository"], } revision = parameters["head_rev"] @@ -181,6 +179,9 @@ def register_callback_action( branch = parameters.get("head_ref") if branch: push["branch"] = branch + base_branch = parameters.get("base_ref") + if base_branch and branch != base_branch: + push["base_branch"] = base_branch action = { "name": name, @@ -215,13 +216,16 @@ def register_callback_action( if "/" in actionPerm: raise Exception("`/` is not allowed in action names; use `-`") + if parameters["tasks_for"].startswith("github-pull-request"): + hookId = f"in-tree-pr-action-{level}-{actionPerm}/{tcyml_hash}" + else: + hookId = f"in-tree-action-{level}-{actionPerm}/{tcyml_hash}" + rv.update( { "kind": "hook", "hookGroupId": f"project-{trustDomain}", - "hookId": "in-tree-action-{}-{}/{}".format( - level, actionPerm, tcyml_hash - ), + "hookId": hookId, "hookPayload": { # provide the decision-task parameters as context for triggerHook "decision": { @@ -297,16 +301,20 @@ def sanity_check_task_scope(callback, parameters, graph_config): actionPerm = "generic" if action.generic else action.cb_name - repo_param = "head_repository" - raw_url = parameters[repo_param] + raw_url = parameters["base_repository"] parsed_url = parse(raw_url) - expected_scope = f"assume:{parsed_url.taskcluster_role_prefix}:action:{actionPerm}" + action_scope = f"assume:{parsed_url.taskcluster_role_prefix}:action:{actionPerm}" + pr_action_scope = ( + f"assume:{parsed_url.taskcluster_role_prefix}:pr-action:{actionPerm}" + ) # the scope should appear literally; no need for a satisfaction check. The use of # get_current_scopes here calls the auth service through the Taskcluster Proxy, giving # the precise scopes available to this task. - if expected_scope not in taskcluster.get_current_scopes(): - raise ValueError(f"Expected task scope {expected_scope} for this action") + if not set((action_scope, pr_action_scope)) & set(taskcluster.get_current_scopes()): + raise ValueError( + f"Expected task scope {action_scope} or {pr_action_scope} for this action" + ) def trigger_action_callback( diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/actions/retrigger.py b/third_party/python/taskcluster_taskgraph/taskgraph/actions/retrigger.py index fd488b35fcd5..6c6091a47a34 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/actions/retrigger.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/actions/retrigger.py @@ -33,9 +33,7 @@ def _should_retrigger(task_graph, label): """ if label not in task_graph: logger.info( - "Task {} not in full taskgraph, assuming task should not be retriggered.".format( - label - ) + f"Task {label} not in full taskgraph, assuming task should not be retriggered." ) return False return task_graph[label].attributes.get("retrigger", False) @@ -67,7 +65,9 @@ def retrigger_decision_action(parameters, graph_config, input, task_group_id, ta # absolute timestamps relative to the current time. task = taskcluster.get_task_definition(task_id) task = relativize_datestamps(task) - create_task_from_def(slugid(), task, parameters["level"]) + create_task_from_def( + slugid(), task, parameters["level"], graph_config["trust-domain"] + ) @register_callback_action( @@ -144,7 +144,7 @@ def retrigger_decision_action(parameters, graph_config, input, task_group_id, ta ) def retrigger_action(parameters, graph_config, input, task_group_id, task_id): decision_task_id, full_task_graph, label_to_taskid = fetch_graph_and_labels( - parameters, graph_config + parameters, graph_config, task_group_id=task_group_id ) task = taskcluster.get_task_definition(task_id) @@ -155,8 +155,8 @@ def retrigger_action(parameters, graph_config, input, task_group_id, task_id): if not input.get("force", None) and not _should_retrigger(full_task_graph, label): logger.info( - "Not retriggering task {}, task should not be retrigged " - "and force not specified.".format(label) + f"Not retriggering task {label}, task should not be retrigged " + "and force not specified." ) sys.exit(1) @@ -201,14 +201,12 @@ def rerun_action(parameters, graph_config, input, task_group_id, task_id): task = taskcluster.get_task_definition(task_id) parameters = dict(parameters) decision_task_id, full_task_graph, label_to_taskid = fetch_graph_and_labels( - parameters, graph_config + parameters, graph_config, task_group_id=task_group_id ) label = task["metadata"]["name"] if task_id not in label_to_taskid.values(): logger.error( - "Refusing to rerun {}: taskId {} not in decision task {} label_to_taskid!".format( - label, task_id, decision_task_id - ) + f"Refusing to rerun {label}: taskId {task_id} not in decision task {decision_task_id} label_to_taskid!" ) _rerun_task(task_id, label) @@ -218,9 +216,7 @@ def _rerun_task(task_id, label): state = taskcluster.state_task(task_id) if state not in RERUN_STATES: logger.warning( - "No need to rerun {}: state '{}' not in {}!".format( - label, state, RERUN_STATES - ) + f"No need to rerun {label}: state '{state}' not in {RERUN_STATES}!" ) return taskcluster.rerun_task(task_id) @@ -261,7 +257,7 @@ def _rerun_task(task_id, label): ) def retrigger_multiple(parameters, graph_config, input, task_group_id, task_id): decision_task_id, full_task_graph, label_to_taskid = fetch_graph_and_labels( - parameters, graph_config + parameters, graph_config, task_group_id=task_group_id ) suffixes = [] diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/actions/util.py b/third_party/python/taskcluster_taskgraph/taskgraph/actions/util.py index cf81029da287..41e3b035de16 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/actions/util.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/actions/util.py @@ -32,8 +32,15 @@ def get_parameters(decision_task_id): return get_artifact(decision_task_id, "public/parameters.yml") -def fetch_graph_and_labels(parameters, graph_config): - decision_task_id = find_decision_task(parameters, graph_config) +def fetch_graph_and_labels(parameters, graph_config, task_group_id=None): + try: + # Look up the decision_task id in the index + decision_task_id = find_decision_task(parameters, graph_config) + except KeyError: + if not task_group_id: + raise + # Not found (e.g. from github-pull-request), fall back to the task group id. + decision_task_id = task_group_id # First grab the graph and labels generated during the initial decision task full_task_graph = get_artifact(decision_task_id, "public/full-task-graph.json") @@ -90,7 +97,7 @@ def fetch_graph_and_labels(parameters, graph_config): return (decision_task_id, full_task_graph, label_to_taskid) -def create_task_from_def(task_id, task_def, level): +def create_task_from_def(task_id, task_def, level, trust_domain): """Create a new task from a definition rather than from a label that is already in the full-task-graph. The task definition will have {relative-datestamp': '..'} rendered just like in a decision task. @@ -98,7 +105,7 @@ def create_task_from_def(task_id, task_def, level): It is useful if you want to "edit" the full_task_graph and then hand it to this function. No dependencies will be scheduled. You must handle this yourself. Seeing how create_tasks handles it might prove helpful.""" - task_def["schedulerId"] = f"gecko-level-{level}" + task_def["schedulerId"] = f"{trust_domain}-level-{level}" label = task_def["metadata"]["name"] session = get_session() create.create_task(session, task_id, label, task_def) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/config.py b/third_party/python/taskcluster_taskgraph/taskgraph/config.py index 7ea7dc7b3370..ac384eab866d 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/config.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/config.py @@ -40,6 +40,11 @@ graph_config_schema = Schema( description="Default 'deadline' for tasks, in relative date format. " "Eg: '1 week'", ): optionally_keyed_by("project", str), + Optional( + "task-expires-after", + description="Default 'expires-after' for level 1 tasks, in relative date format. " + "Eg: '90 days'", + ): str, Required("workers"): { Required("aliases"): { str: { @@ -61,6 +66,10 @@ graph_config_schema = Schema( description="The taskcluster index prefix to use for caching tasks. " "Defaults to `trust-domain`.", ): str, + Optional( + "cache-pull-requests", + description="Should tasks from pull requests populate the cache", + ): bool, Optional( "index-path-regexes", description="Regular expressions matching index paths to be summarized.", @@ -102,28 +111,27 @@ class GraphConfig: Add the project's taskgraph directory to the python path, and register any extensions present. """ - modify_path = os.path.dirname(self.root_dir) if GraphConfig._PATH_MODIFIED: - if GraphConfig._PATH_MODIFIED == modify_path: + if GraphConfig._PATH_MODIFIED == self.root_dir: # Already modified path with the same root_dir. # We currently need to do this to enable actions to call # taskgraph_decision, e.g. relpro. return raise Exception("Can't register multiple directories on python path.") - GraphConfig._PATH_MODIFIED = modify_path - sys.path.insert(0, modify_path) + GraphConfig._PATH_MODIFIED = self.root_dir + sys.path.insert(0, self.root_dir) register_path = self["taskgraph"].get("register") if register_path: find_object(register_path)(self) @property def vcs_root(self): - if path.split(self.root_dir)[-2:] != ["taskcluster", "ci"]: + if path.split(self.root_dir)[-1:] != ["taskcluster"]: raise Exception( "Not guessing path to vcs root. " "Graph config in non-standard location." ) - return os.path.dirname(os.path.dirname(self.root_dir)) + return os.path.dirname(self.root_dir) @property def taskcluster_yml(self): diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/create.py b/third_party/python/taskcluster_taskgraph/taskgraph/create.py index deb1ac5348a7..e8baabb8a8b3 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/create.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/create.py @@ -104,7 +104,7 @@ def create_tasks(graph_config, taskgraph, label_to_taskid, params, decision_task def create_task(session, task_id, label, task_def): # create the task using 'http://taskcluster/queue', which is proxied to the queue service - # with credentials appropriate to this job. + # with credentials appropriate to this task. # Resolve timestamps now = current_json_time(datetime_format=True) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/decision.py b/third_party/python/taskcluster_taskgraph/taskgraph/decision.py index ed412f4473e6..522e3764596f 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/decision.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/decision.py @@ -46,21 +46,21 @@ try_task_config_schema_v2 = Schema( ) -def full_task_graph_to_runnable_jobs(full_task_json): - runnable_jobs = {} +def full_task_graph_to_runnable_tasks(full_task_json): + runnable_tasks = {} for label, node in full_task_json.items(): if not ("extra" in node["task"] and "treeherder" in node["task"]["extra"]): continue th = node["task"]["extra"]["treeherder"] - runnable_jobs[label] = {"symbol": th["symbol"]} + runnable_tasks[label] = {"symbol": th["symbol"]} for i in ("groupName", "groupSymbol", "collection"): if i in th: - runnable_jobs[label][i] = th[i] + runnable_tasks[label][i] = th[i] if th.get("machine", {}).get("platform"): - runnable_jobs[label]["platform"] = th["machine"]["platform"] - return runnable_jobs + runnable_tasks[label]["platform"] = th["machine"]["platform"] + return runnable_tasks def taskgraph_decision(options, parameters=None): @@ -104,7 +104,7 @@ def taskgraph_decision(options, parameters=None): # write out the public/runnable-jobs.json file write_artifact( - "runnable-jobs.json", full_task_graph_to_runnable_jobs(full_task_json) + "runnable-jobs.json", full_task_graph_to_runnable_tasks(full_task_json) ) # this is just a test to check whether the from_json() function is working @@ -214,9 +214,9 @@ def get_decision_parameters(graph_config, options): parameters.update(PER_PROJECT_PARAMETERS[project]) except KeyError: logger.warning( - "using default project parameters; add {} to " - "PER_PROJECT_PARAMETERS in {} to customize behavior " - "for this project".format(project, __file__) + f"using default project parameters; add {project} to " + f"PER_PROJECT_PARAMETERS in {__file__} to customize behavior " + "for this project" ) parameters.update(PER_PROJECT_PARAMETERS["default"]) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/docker.py b/third_party/python/taskcluster_taskgraph/taskgraph/docker.py index 23897cbbee47..649bc20c3236 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/docker.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/docker.py @@ -34,7 +34,7 @@ def get_image_digest(image_name): def load_image_by_name(image_name, tag=None): from taskgraph.generator import load_tasks_for_kind - from taskgraph.optimize import IndexSearch + from taskgraph.optimize.strategies import IndexSearch from taskgraph.parameters import Parameters params = Parameters( @@ -43,8 +43,9 @@ def load_image_by_name(image_name, tag=None): ) tasks = load_tasks_for_kind(params, "docker-image") task = tasks[f"build-docker-image-{image_name}"] + deadline = None task_id = IndexSearch().should_replace_task( - task, {}, task.optimization.get("index-search", []) + task, {}, deadline, task.optimization.get("index-search", []) ) if task_id in (True, False): @@ -52,8 +53,10 @@ def load_image_by_name(image_name, tag=None): "Could not find artifacts for a docker image " "named `{image_name}`. Local commits and other changes " "in your checkout may cause this error. Try " - "updating to a fresh checkout of mozilla-central " - "to download image.".format(image_name=image_name) + "updating to a fresh checkout of {project} " + "to download image.".format( + image_name=image_name, project=params["project"] + ) ) return False diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/files_changed.py b/third_party/python/taskcluster_taskgraph/taskgraph/files_changed.py index 6be6e5eeee57..94accc925e6a 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/files_changed.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/files_changed.py @@ -49,6 +49,7 @@ def _get_changed_files_json_automationrelevance(head_repository_url, head_rev): def get_automationrelevance(): response = requests.get(url, timeout=30) + response.raise_for_status() return response.json() contents = retry(get_automationrelevance, attempts=10, sleeptime=10) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/generator.py b/third_party/python/taskcluster_taskgraph/taskgraph/generator.py index 4ed2a41520a5..d649b91706aa 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/generator.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/generator.py @@ -91,7 +91,7 @@ class Kind: @classmethod def load(cls, root_dir, graph_config, kind_name): - path = os.path.join(root_dir, kind_name) + path = os.path.join(root_dir, "kinds", kind_name) kind_yml = os.path.join(path, "kind.yml") if not os.path.exists(kind_yml): raise KindNotFound(kind_yml) @@ -125,13 +125,13 @@ class TaskGraphGenerator: write_artifacts=False, ): """ - @param root_dir: root directory, with subdirectories for each kind + @param root_dir: root directory containing the Taskgraph config.yml file @param parameters: parameters for this task-graph generation, or callable taking a `GraphConfig` and returning parameters @type parameters: Union[Parameters, Callable[[GraphConfig], Parameters]] """ if root_dir is None: - root_dir = "taskcluster/ci" + root_dir = "taskcluster" self.root_dir = root_dir self._parameters = parameters self._decision_task_id = decision_task_id @@ -243,7 +243,7 @@ class TaskGraphGenerator: yield kind queue.extend(kind.config.get("kind-dependencies", [])) else: - for kind_name in os.listdir(self.root_dir): + for kind_name in os.listdir(os.path.join(self.root_dir, "kinds")): try: yield Kind.load(self.root_dir, graph_config, kind_name) except KindNotFound: diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/loader/default.py b/third_party/python/taskcluster_taskgraph/taskgraph/loader/default.py index 5b2c258917b1..f060a1d92ddb 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/loader/default.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/loader/default.py @@ -11,7 +11,7 @@ logger = logging.getLogger(__name__) DEFAULT_TRANSFORMS = [ - "taskgraph.transforms.job:transforms", + "taskgraph.transforms.run:transforms", "taskgraph.transforms.task:transforms", ] @@ -20,7 +20,7 @@ def loader(kind, path, config, params, loaded_tasks): """ This default loader builds on the `transform` loader by providing sensible default transforms that the majority of simple tasks will need. - Specifically, `job` and `task` transforms will be appended to the end of the + Specifically, `run` and `task` transforms will be appended to the end of the list of transforms in the kind being loaded. """ transform_refs = config.setdefault("transforms", []) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/main.py b/third_party/python/taskcluster_taskgraph/taskgraph/main.py index 88a4e2539b1f..01cf4d16c8ec 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/main.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/main.py @@ -18,6 +18,7 @@ from concurrent.futures import ProcessPoolExecutor, as_completed from pathlib import Path from textwrap import dedent from typing import Any, List +from urllib.parse import urlparse import appdirs import yaml @@ -463,6 +464,8 @@ def show_taskgraph(options): f"--label={options['graph_attr']}@{cur_rev}", ] + non_fatal_failures = [] + for spec in parameters: base_path = os.path.join( diffdir, f"{options['graph_attr']}_{base_rev_file}" @@ -475,7 +478,20 @@ def show_taskgraph(options): base_path += f"_{params_name}" cur_path += f"_{params_name}" + # If the base or cur files are missing it means that generation + # failed. If one of them failed but not the other, the failure is + # likely due to the patch making changes to taskgraph in modules + # that don't get reloaded (safe to ignore). If both generations + # failed, there's likely a real issue. + base_missing = not os.path.isfile(base_path) + cur_missing = not os.path.isfile(cur_path) + if base_missing != cur_missing: # != is equivalent to XOR for booleans + non_fatal_failures.append(os.path.basename(base_path)) + continue + try: + # If the output file(s) are missing, this command will raise + # CalledProcessError with a returncode > 1. proc = subprocess.run( diffcmd + [base_path, cur_path], capture_output=True, @@ -500,6 +516,16 @@ def show_taskgraph(options): params_spec=spec if len(parameters) > 1 else None, ) + if non_fatal_failures: + failstr = "\n ".join(sorted(non_fatal_failures)) + print( + "WARNING: Diff skipped for the following generation{s} " + "due to failures:\n {failstr}".format( + s="s" if len(non_fatal_failures) > 1 else "", failstr=failstr + ), + file=sys.stderr, + ) + if options["format"] != "json": print( "If you were expecting differences in task bodies " @@ -661,7 +687,7 @@ def decision(options): @argument( "--root", "-r", - default="taskcluster/ci", + default="taskcluster", help="root of the taskgraph definition relative to topsrcdir", ) def action_callback(options): @@ -697,7 +723,7 @@ def action_callback(options): @argument( "--root", "-r", - default="taskcluster/ci", + default="taskcluster", help="root of the taskgraph definition relative to topsrcdir", ) @argument( @@ -835,6 +861,10 @@ def init_taskgraph(options): ) return 1 + context["repo_name"] = urlparse(repo_url).path.rsplit("/", 1)[-1] + if context["repo_name"].endswith(".git"): + context["repo_name"] = context["repo_name"][: -len(".git")] + # Generate the project. cookiecutter( options["template"], @@ -867,6 +897,11 @@ def setup_logging(): def main(args=sys.argv[1:]): setup_logging() parser = create_parser() + + if not args: + parser.print_help() + sys.exit(1) + args = parser.parse_args(args) try: return args.command(vars(args)) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/morph.py b/third_party/python/taskcluster_taskgraph/taskgraph/morph.py index bfa156027055..e4bb268ab80a 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/morph.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/morph.py @@ -38,6 +38,7 @@ registered_morphs = [] def register_morph(func): registered_morphs.append(func) + return func def amend_taskgraph(taskgraph, label_to_taskid, to_add): diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/optimize/base.py b/third_party/python/taskcluster_taskgraph/taskgraph/optimize/base.py index 367b94e1de05..e5477d35b743 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/optimize/base.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/optimize/base.py @@ -271,14 +271,19 @@ def replace_tasks( dependencies_of = target_task_graph.graph.links_dict() for label in target_task_graph.graph.visit_postorder(): + logger.debug(f"replace_tasks: {label}") # if we're not allowed to optimize, that's easy.. if label in do_not_optimize: + logger.debug(f"replace_tasks: {label} is in do_not_optimize") continue # if this task depends on un-replaced, un-removed tasks, do not replace if any( l not in replaced and l not in removed_tasks for l in dependencies_of[label] ): + logger.debug( + f"replace_tasks: {label} depends on an unreplaced or unremoved task" + ) continue # if the task already exists, that's an easy replacement @@ -287,6 +292,7 @@ def replace_tasks( label_to_taskid[label] = repl replaced.add(label) opt_counts["existing_tasks"] += 1 + logger.debug(f"replace_tasks: {label} replaced from existing_tasks") continue # call the optimization strategy @@ -304,14 +310,20 @@ def replace_tasks( repl = opt.should_replace_task(task, params, deadline, arg) if repl: if repl is True: + logger.debug(f"replace_tasks: {label} removed by optimization strategy") # True means remove this task; get_subgraph will catch any # problems with removed tasks being depended on removed_tasks.add(label) else: + logger.debug( + f"replace_tasks: {label} replaced by optimization strategy" + ) label_to_taskid[label] = repl replaced.add(label) opt_counts[opt_by] += 1 continue + else: + logger.debug(f"replace_tasks: {label} kept by optimization strategy") _log_optimization("replaced", opt_counts) return replaced diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/optimize/strategies.py b/third_party/python/taskcluster_taskgraph/taskgraph/optimize/strategies.py index 973b55063266..5896878743db 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/optimize/strategies.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/optimize/strategies.py @@ -56,9 +56,7 @@ class SkipUnlessChanged(OptimizationStrategy): changed = files_changed.check(params, file_patterns) if not changed: logger.debug( - 'no files found matching a pattern in `skip-unless-changed` for "{}"'.format( - task.label - ) + f'no files found matching a pattern in `skip-unless-changed` for "{task.label}"' ) return True return False diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/parameters.py b/third_party/python/taskcluster_taskgraph/taskgraph/parameters.py index 48571d97adcd..30b723d1803d 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/parameters.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/parameters.py @@ -284,7 +284,7 @@ class Parameters(ReadOnlyDict): else: raise ParameterMismatch( "Don't know how to determine file URL for non-github" - "repo: {}".format(repo) + f"repo: {repo}" ) else: raise RuntimeError( diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/run-task/run-task b/third_party/python/taskcluster_taskgraph/taskgraph/run-task/run-task index 267b5283eaf4..f3a343de333c 100755 --- a/third_party/python/taskcluster_taskgraph/taskgraph/run-task/run-task +++ b/third_party/python/taskcluster_taskgraph/taskgraph/run-task/run-task @@ -1,4 +1,4 @@ -#!/usr/bin/python3 -u +#!/usr/bin/env -S python3 -u # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. @@ -624,6 +624,11 @@ def git_checkout( "Must specify both ssh_key_file and ssh_known_hosts_file, if either are specified", ) + # Bypass Git's "safe directory" feature as the destination could be + # coming from a cache and therefore cloned by a different user. + args = ["git", "config", "--global", "--add", "safe.directory", Path(destination_path).as_posix()] + retry_required_command(b"vcs", args, extra_env=env) + if not os.path.exists(destination_path): # Repository doesn't already exist, needs to be cloned args = [ @@ -782,9 +787,7 @@ def hg_checkout( branch: Optional[str], revision: Optional[str], ): - if IS_MACOSX: - hg_bin = "/tools/python27-mercurial/bin/hg" - elif IS_POSIX: + if IS_MACOSX or IS_POSIX: hg_bin = "hg" elif IS_WINDOWS: # This is where OCC installs it in the AMIs. @@ -1007,7 +1010,8 @@ def install_pip_requirements(repositories): if not requirements: return - cmd = [sys.executable, "-mpip", "install"] + # TODO: Stop using system Python (#381) + cmd = [sys.executable, "-mpip", "install", "--break-system-packages"] if os.environ.get("PIP_DISABLE_REQUIRE_HASHES") != "1": cmd.append("--require-hashes") diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/target_tasks.py b/third_party/python/taskcluster_taskgraph/taskgraph/target_tasks.py index 1119a1c96009..7f44b6ab6058 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/target_tasks.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/target_tasks.py @@ -14,7 +14,7 @@ _target_task_methods = {} _GIT_REFS_HEADS_PREFIX = "refs/heads/" -def _target_task(name): +def register_target_task(name): def wrap(func): _target_task_methods[name] = func return func @@ -81,7 +81,7 @@ def standard_filter(task, parameters): ) -@_target_task("default") +@register_target_task("default") def target_tasks_default(full_task_graph, parameters, graph_config): """Target the tasks which have indicated they should be run on this project via the `run_on_projects` attributes.""" @@ -90,7 +90,7 @@ def target_tasks_default(full_task_graph, parameters, graph_config): ] -@_target_task("codereview") +@register_target_task("codereview") def target_tasks_codereview(full_task_graph, parameters, graph_config): """Target the tasks which have indicated they should be run on this project via the `run_on_projects` attributes.""" @@ -101,7 +101,7 @@ def target_tasks_codereview(full_task_graph, parameters, graph_config): ] -@_target_task("nothing") +@register_target_task("nothing") def target_tasks_nothing(full_task_graph, parameters, graph_config): """Select nothing, for DONTBUILD pushes""" return [] diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/__init__.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/__init__.py index 4fa7b5fc0c1d..e69de29bb2d1 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/__init__.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/__init__.py @@ -1,3 +0,0 @@ -from taskgraph.transforms import ( # noqa: Added for backwards compat - notify as release_notifications, -) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/base.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/base.py index e6fcd2400c47..fda0c584fc72 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/base.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/base.py @@ -147,7 +147,7 @@ class ValidateSchema: kind=config.kind, name=task["name"] ) elif "label" in task: - error = "In job {label!r}:".format(label=task["label"]) + error = "In task {label!r}:".format(label=task["label"]) elif "primary-dependency" in task: error = "In {kind} kind task for {dependency!r}:".format( kind=config.kind, dependency=task["primary-dependency"].label diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/code_review.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/code_review.py index bdb655b97d57..2c859c36f640 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/code_review.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/code_review.py @@ -12,12 +12,12 @@ transforms = TransformSequence() @transforms.add -def add_dependencies(config, jobs): - for job in jobs: - job.setdefault("soft-dependencies", []) - job["soft-dependencies"] += [ +def add_dependencies(config, tasks): + for task in tasks: + task.setdefault("soft-dependencies", []) + task["soft-dependencies"] += [ dep_task.label for dep_task in config.kind_dependencies_tasks.values() if dep_task.attributes.get("code-review") is True ] - yield job + yield task diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/docker_image.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/docker_image.py index d0c5b9c97b85..b58320092bde 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/docker_image.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/docker_image.py @@ -92,9 +92,7 @@ def fill_template(config, tasks): for p in packages: if p not in available_packages: raise Exception( - "Missing package job for {}-{}: {}".format( - config.kind, image_name, p - ) + f"Missing package job for {config.kind}-{image_name}: {p}" ) if not taskgraph.fast: @@ -119,9 +117,7 @@ def fill_template(config, tasks): digest_data += [json.dumps(args, sort_keys=True)] context_hashes[image_name] = context_hash - description = "Build the docker image {} for use by dependent tasks".format( - image_name - ) + description = f"Build the docker image {image_name} for use by dependent tasks" args["DOCKER_IMAGE_PACKAGES"] = " ".join(f"<{p}>" for p in packages) @@ -132,6 +128,8 @@ def fill_template(config, tasks): # burn more CPU once to reduce image size. zstd_level = "3" if int(config.params["level"]) == 1 else "10" + expires = config.graph_config._config.get("task-expires-after", "28 days") + # include some information that is useful in reconstructing this task # from JSON taskdesc = { @@ -142,7 +140,7 @@ def fill_template(config, tasks): "artifact_prefix": "public", }, "always-target": True, - "expires-after": "28 days" if config.params.is_try() else "1 year", + "expires-after": expires if config.params.is_try() else "1 year", "scopes": [], "run-on-projects": [], "worker-type": "images", @@ -158,9 +156,7 @@ def fill_template(config, tasks): ], "env": { "CONTEXT_TASK_ID": {"task-reference": ""}, - "CONTEXT_PATH": "public/docker-contexts/{}.tar.gz".format( - image_name - ), + "CONTEXT_PATH": f"public/docker-contexts/{image_name}.tar.gz", "HASH": context_hash, "PROJECT": config.params["project"], "IMAGE_NAME": image_name, diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/fetch.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/fetch.py index bcb8ff38a691..0e1b739677e5 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/fetch.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/fetch.py @@ -32,11 +32,12 @@ FETCH_SCHEMA = Schema( Optional("task-from"): str, # Description of the task. Required("description"): str, + Optional("expires-after"): str, Optional("docker-image"): object, Optional( "fetch-alias", - description="An alias that can be used instead of the real fetch job name in " - "fetch stanzas for jobs.", + description="An alias that can be used instead of the real fetch task name in " + "fetch stanzas for tasks.", ): str, Optional( "artifact-prefix", @@ -78,20 +79,20 @@ transforms.add_validate(FETCH_SCHEMA) @transforms.add -def process_fetch_job(config, jobs): - # Converts fetch-url entries to the job schema. - for job in jobs: - typ = job["fetch"]["type"] - name = job["name"] - fetch = job.pop("fetch") +def process_fetch_task(config, tasks): + # Converts fetch-url entries to the run schema. + for task in tasks: + typ = task["fetch"]["type"] + name = task["name"] + fetch = task.pop("fetch") if typ not in fetch_builders: raise Exception(f"Unknown fetch type {typ} in fetch {name}") validate_schema(fetch_builders[typ].schema, fetch, f"In task.fetch {name!r}:") - job.update(configure_fetch(config, typ, name, fetch)) + task.update(configure_fetch(config, typ, name, fetch)) - yield job + yield task def configure_fetch(config, typ, name, fetch): @@ -103,41 +104,41 @@ def configure_fetch(config, typ, name, fetch): @transforms.add -def make_task(config, jobs): +def make_task(config, tasks): # Fetch tasks are idempotent and immutable. Have them live for # essentially forever. if config.params["level"] == "3": expires = "1000 years" else: - expires = "28 days" + expires = config.graph_config._config.get("task-expires-after", "28 days") - for job in jobs: - name = job["name"] - artifact_prefix = job.get("artifact-prefix", "public") - env = job.get("env", {}) + for task in tasks: + name = task["name"] + artifact_prefix = task.get("artifact-prefix", "public") + env = task.get("env", {}) env.update({"UPLOAD_DIR": "/builds/worker/artifacts"}) - attributes = job.get("attributes", {}) - attributes["fetch-artifact"] = path.join(artifact_prefix, job["artifact_name"]) - alias = job.get("fetch-alias") + attributes = task.get("attributes", {}) + attributes["fetch-artifact"] = path.join(artifact_prefix, task["artifact_name"]) + alias = task.get("fetch-alias") if alias: attributes["fetch-alias"] = alias - task = { + task_desc = { "attributes": attributes, "name": name, - "description": job["description"], - "expires-after": expires, + "description": task["description"], + "expires-after": task.get("expires-after", expires), "label": "fetch-%s" % name, "run-on-projects": [], "run": { "using": "run-task", "checkout": False, - "command": job["command"], + "command": task["command"], }, "worker-type": "images", "worker": { "chain-of-trust": True, - "docker-image": job.get("docker-image", {"in-tree": "fetch"}), + "docker-image": task.get("docker-image", {"in-tree": "fetch"}), "env": env, "max-run-time": 900, "artifacts": [ @@ -151,29 +152,29 @@ def make_task(config, jobs): } if "treeherder" in config.graph_config: - task["treeherder"] = { + task_desc["treeherder"] = { "symbol": join_symbol("Fetch", name), "kind": "build", "platform": "fetch/opt", "tier": 1, } - if job.get("secret", None): - task["scopes"] = ["secrets:get:" + job.get("secret")] - task["worker"]["taskcluster-proxy"] = True + if task.get("secret", None): + task_desc["scopes"] = ["secrets:get:" + task.get("secret")] + task_desc["worker"]["taskcluster-proxy"] = True if not taskgraph.fast: - cache_name = task["label"].replace(f"{config.kind}-", "", 1) + cache_name = task_desc["label"].replace(f"{config.kind}-", "", 1) # This adds the level to the index path automatically. add_optimization( config, - task, + task_desc, cache_type=CACHE_TYPE, cache_name=cache_name, - digest_data=job["digest_data"], + digest_data=task["digest_data"], ) - yield task + yield task_desc @fetch_builder( diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/from_deps.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/from_deps.py index 337d68e4ba10..12ca63d34bb7 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/from_deps.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/from_deps.py @@ -16,7 +16,7 @@ from textwrap import dedent from voluptuous import Any, Extra, Optional, Required from taskgraph.transforms.base import TransformSequence -from taskgraph.transforms.job import fetches_schema +from taskgraph.transforms.run import fetches_schema from taskgraph.util.attributes import attrmatch from taskgraph.util.dependencies import GROUP_BY_MAP, get_dependencies from taskgraph.util.schema import Schema, validate_schema diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/__init__.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/__init__.py similarity index 68% rename from third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/__init__.py rename to third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/__init__.py index 06978ff46d30..be7f51e8d6cd 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/__init__.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/__init__.py @@ -2,11 +2,11 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. """ -Convert a job description into a task description. +Convert a run description into a task description. -Jobs descriptions are similar to task descriptions, but they specify how to run -the job at a higher level, using a "run" field that can be interpreted by -run-using handlers in `taskcluster/taskgraph/transforms/job`. +Run descriptions are similar to task descriptions, but they specify how to run +the task at a higher level, using a "run" field that can be interpreted by +run-using handlers in `taskcluster/taskgraph/transforms/run`. """ @@ -28,7 +28,7 @@ from taskgraph.util.workertypes import worker_type_implementation logger = logging.getLogger(__name__) # Fetches may be accepted in other transforms and eventually passed along -# to a `job` (eg: from_deps). Defining this here allows them to re-use +# to a `task` (eg: from_deps). Defining this here allows them to reuse # the schema and avoid duplication. fetches_schema = { Required("artifact"): str, @@ -38,9 +38,9 @@ fetches_schema = { } # Schema for a build description -job_description_schema = Schema( +run_description_schema = Schema( { - # The name of the job and the job's label. At least one must be specified, + # The name of the task and the task's label. At least one must be specified, # and the label will be generated from the name if necessary, by prepending # the kind. Optional("name"): str, @@ -55,6 +55,7 @@ job_description_schema = Schema( Optional("soft-dependencies"): task_description_schema["soft-dependencies"], Optional("if-dependencies"): task_description_schema["if-dependencies"], Optional("requires"): task_description_schema["requires"], + Optional("deadline-after"): task_description_schema["deadline-after"], Optional("expires-after"): task_description_schema["expires-after"], Optional("routes"): task_description_schema["routes"], Optional("scopes"): task_description_schema["scopes"], @@ -73,7 +74,7 @@ job_description_schema = Schema( Optional("needs-sccache"): task_description_schema["needs-sccache"], # The "when" section contains descriptions of the circumstances under which # this task should be included in the task graph. This will be converted - # into an optimization, so it cannot be specified in a job description that + # into an optimization, so it cannot be specified in a run description that # also gives 'optimization'. Exclusive("when", "optimization"): { # This task only needs to be run if a file matching one of the given @@ -89,33 +90,33 @@ job_description_schema = Schema( fetches_schema, ], }, - # A description of how to run this job. + # A description of how to run this task. "run": { - # The key to a job implementation in a peer module to this one + # The key to a run implementation in a peer module to this one "using": str, # Base work directory used to set up the task. Optional("workdir"): str, - # Any remaining content is verified against that job implementation's + # Any remaining content is verified against that run implementation's # own schema. Extra: object, }, Required("worker-type"): task_description_schema["worker-type"], # This object will be passed through to the task description, with additions - # provided by the job's run-using function + # provided by the task's run-using function Optional("worker"): dict, } ) transforms = TransformSequence() -transforms.add_validate(job_description_schema) +transforms.add_validate(run_description_schema) @transforms.add -def rewrite_when_to_optimization(config, jobs): - for job in jobs: - when = job.pop("when", {}) +def rewrite_when_to_optimization(config, tasks): + for task in tasks: + when = task.pop("when", {}) if not when: - yield job + yield task continue files_changed = when.get("files-changed") @@ -124,63 +125,63 @@ def rewrite_when_to_optimization(config, jobs): files_changed.append(f"{config.path}/**") # "only when files changed" implies "skip if files have not changed" - job["optimization"] = {"skip-unless-changed": files_changed} + task["optimization"] = {"skip-unless-changed": files_changed} - assert "when" not in job - yield job + assert "when" not in task + yield task @transforms.add -def set_implementation(config, jobs): - for job in jobs: - impl, os = worker_type_implementation(config.graph_config, job["worker-type"]) +def set_implementation(config, tasks): + for task in tasks: + impl, os = worker_type_implementation(config.graph_config, task["worker-type"]) if os: - job.setdefault("tags", {})["os"] = os + task.setdefault("tags", {})["os"] = os if impl: - job.setdefault("tags", {})["worker-implementation"] = impl - worker = job.setdefault("worker", {}) + task.setdefault("tags", {})["worker-implementation"] = impl + worker = task.setdefault("worker", {}) assert "implementation" not in worker worker["implementation"] = impl if os: worker["os"] = os - yield job + yield task @transforms.add -def set_label(config, jobs): - for job in jobs: - if "label" not in job: - if "name" not in job: - raise Exception("job has neither a name nor a label") - job["label"] = "{}-{}".format(config.kind, job["name"]) - if job.get("name"): - del job["name"] - yield job +def set_label(config, tasks): + for task in tasks: + if "label" not in task: + if "name" not in task: + raise Exception("task has neither a name nor a label") + task["label"] = "{}-{}".format(config.kind, task["name"]) + if task.get("name"): + del task["name"] + yield task @transforms.add -def add_resource_monitor(config, jobs): - for job in jobs: - if job.get("attributes", {}).get("resource-monitor"): +def add_resource_monitor(config, tasks): + for task in tasks: + if task.get("attributes", {}).get("resource-monitor"): worker_implementation, worker_os = worker_type_implementation( - config.graph_config, job["worker-type"] + config.graph_config, task["worker-type"] ) # Normalise worker os so that linux-bitbar and similar use linux tools. worker_os = worker_os.split("-")[0] - if "win7" in job["worker-type"]: + if "win7" in task["worker-type"]: arch = "32" else: arch = "64" - job.setdefault("fetches", {}) - job["fetches"].setdefault("toolchain", []) - job["fetches"]["toolchain"].append(f"{worker_os}{arch}-resource-monitor") + task.setdefault("fetches", {}) + task["fetches"].setdefault("toolchain", []) + task["fetches"]["toolchain"].append(f"{worker_os}{arch}-resource-monitor") if worker_implementation == "docker-worker": artifact_source = "/builds/worker/monitoring/resource-monitor.json" else: artifact_source = "monitoring/resource-monitor.json" - job["worker"].setdefault("artifacts", []) - job["worker"]["artifacts"].append( + task["worker"].setdefault("artifacts", []) + task["worker"]["artifacts"].append( { "name": "public/monitoring/resource-monitor.json", "type": "file", @@ -188,10 +189,10 @@ def add_resource_monitor(config, jobs): } ) # Set env for output file - job["worker"].setdefault("env", {}) - job["worker"]["env"]["RESOURCE_MONITOR_OUTPUT"] = artifact_source + task["worker"].setdefault("env", {}) + task["worker"]["env"]["RESOURCE_MONITOR_OUTPUT"] = artifact_source - yield job + yield task def get_attribute(dict, key, attributes, attribute_name): @@ -203,16 +204,16 @@ def get_attribute(dict, key, attributes, attribute_name): @transforms.add -def use_fetches(config, jobs): +def use_fetches(config, tasks): artifact_names = {} aliases = {} extra_env = {} if config.kind in ("toolchain", "fetch"): - jobs = list(jobs) - for job in jobs: - run = job.get("run", {}) - label = job["label"] + tasks = list(tasks) + for task in tasks: + run = task.get("run", {}) + label = task["label"] get_attribute(artifact_names, label, run, "toolchain-artifact") value = run.get(f"{config.kind}-alias") if value: @@ -232,20 +233,20 @@ def use_fetches(config, jobs): aliases[f"{task.kind}-{value}"] = task.label artifact_prefixes = {} - for job in order_tasks(config, jobs): - artifact_prefixes[job["label"]] = get_artifact_prefix(job) + for task in order_tasks(config, tasks): + artifact_prefixes[task["label"]] = get_artifact_prefix(task) - fetches = job.pop("fetches", None) + fetches = task.pop("fetches", None) if not fetches: - yield job + yield task continue - job_fetches = [] - name = job.get("name", job.get("label")) - dependencies = job.setdefault("dependencies", {}) - worker = job.setdefault("worker", {}) + task_fetches = [] + name = task.get("name", task.get("label")) + dependencies = task.setdefault("dependencies", {}) + worker = task.setdefault("worker", {}) env = worker.setdefault("env", {}) - prefix = get_artifact_prefix(job) + prefix = get_artifact_prefix(task) for kind in sorted(fetches): artifacts = fetches[kind] if kind in ("fetch", "toolchain"): @@ -254,9 +255,7 @@ def use_fetches(config, jobs): label = aliases.get(label, label) if label not in artifact_names: raise Exception( - "Missing fetch job for {kind}-{name}: {fetch}".format( - kind=config.kind, name=name, fetch=fetch_name - ) + f"Missing fetch task for {config.kind}-{name}: {fetch_name}" ) if label in extra_env: env.update(extra_env[label]) @@ -264,7 +263,7 @@ def use_fetches(config, jobs): path = artifact_names[label] dependencies[label] = label - job_fetches.append( + task_fetches.append( { "artifact": path, "task": f"<{label}>", @@ -274,8 +273,8 @@ def use_fetches(config, jobs): else: if kind not in dependencies: raise Exception( - "{name} can't fetch {kind} artifacts because " - "it has no {kind} dependencies!".format(name=name, kind=kind) + f"{name} can't fetch {kind} artifacts because " + f"it has no {kind} dependencies!" ) dep_label = dependencies[kind] if dep_label in artifact_prefixes: @@ -293,9 +292,11 @@ def use_fetches(config, jobs): name=name, kind=kind, label=dependencies[kind], - tasks="no tasks" - if len(dep_tasks) == 0 - else "multiple tasks", + tasks=( + "no tasks" + if len(dep_tasks) == 0 + else "multiple tasks" + ), ) ) @@ -328,41 +329,43 @@ def use_fetches(config, jobs): fetch["dest"] = dest if verify_hash: fetch["verify-hash"] = verify_hash - job_fetches.append(fetch) + task_fetches.append(fetch) - job_artifact_prefixes = { + task_artifact_prefixes = { mozpath.dirname(fetch["artifact"]) - for fetch in job_fetches + for fetch in task_fetches if not fetch["artifact"].startswith("public/") } - if job_artifact_prefixes: + if task_artifact_prefixes: # Use taskcluster-proxy and request appropriate scope. For example, add # 'scopes: [queue:get-artifact:path/to/*]' for 'path/to/artifact.tar.xz'. worker["taskcluster-proxy"] = True - for prefix in sorted(job_artifact_prefixes): + for prefix in sorted(task_artifact_prefixes): scope = f"queue:get-artifact:{prefix}/*" - if scope not in job.setdefault("scopes", []): - job["scopes"].append(scope) + if scope not in task.setdefault("scopes", []): + task["scopes"].append(scope) - env["MOZ_FETCHES"] = {"task-reference": json.dumps(job_fetches, sort_keys=True)} + env["MOZ_FETCHES"] = { + "task-reference": json.dumps(task_fetches, sort_keys=True) + } env.setdefault("MOZ_FETCHES_DIR", "fetches") - yield job + yield task @transforms.add -def make_task_description(config, jobs): +def make_task_description(config, tasks): """Given a build description, create a task description""" - # import plugin modules first, before iterating over jobs + # import plugin modules first, before iterating over tasks import_sibling_modules(exceptions=("common.py",)) - for job in jobs: + for task in tasks: # always-optimized tasks never execute, so have no workdir - if job["worker"]["implementation"] in ("docker-worker", "generic-worker"): - job["run"].setdefault("workdir", "/builds/worker") + if task["worker"]["implementation"] in ("docker-worker", "generic-worker"): + task["run"].setdefault("workdir", "/builds/worker") - taskdesc = copy.deepcopy(job) + taskdesc = copy.deepcopy(task) # fill in some empty defaults to make run implementations easier taskdesc.setdefault("attributes", {}) @@ -372,27 +375,27 @@ def make_task_description(config, jobs): taskdesc.setdefault("scopes", []) taskdesc.setdefault("extra", {}) - # give the function for job.run.using on this worker implementation a + # give the function for task.run.using on this worker implementation a # chance to set up the task description. configure_taskdesc_for_run( - config, job, taskdesc, job["worker"]["implementation"] + config, task, taskdesc, task["worker"]["implementation"] ) del taskdesc["run"] - # yield only the task description, discarding the job description + # yield only the task description, discarding the task description yield taskdesc -# A registry of all functions decorated with run_job_using +# A registry of all functions decorated with run_task_using registry = {} -def run_job_using(worker_implementation, run_using, schema=None, defaults={}): +def run_task_using(worker_implementation, run_using, schema=None, defaults={}): """Register the decorated function as able to set up a task description for - jobs with the given worker implementation and `run.using` property. If - `schema` is given, the job's run field will be verified to match it. + tasks with the given worker implementation and `run.using` property. If + `schema` is given, the task's run field will be verified to match it. - The decorated function should have the signature `using_foo(config, job, taskdesc)` + The decorated function should have the signature `using_foo(config, task, taskdesc)` and should modify the task description in-place. The skeleton of the task description is already set up, but without a payload.""" @@ -400,11 +403,7 @@ def run_job_using(worker_implementation, run_using, schema=None, defaults={}): for_run_using = registry.setdefault(run_using, {}) if worker_implementation in for_run_using: raise Exception( - "run_job_using({!r}, {!r}) already exists: {!r}".format( - run_using, - worker_implementation, - for_run_using[worker_implementation], - ) + f"run_task_using({run_using!r}, {worker_implementation!r}) already exists: {for_run_using[worker_implementation]!r}" ) for_run_using[worker_implementation] = (func, schema, defaults) return func @@ -412,42 +411,40 @@ def run_job_using(worker_implementation, run_using, schema=None, defaults={}): return wrap -@run_job_using( +@run_task_using( "always-optimized", "always-optimized", Schema({"using": "always-optimized"}) ) -def always_optimized(config, job, taskdesc): +def always_optimized(config, task, taskdesc): pass -def configure_taskdesc_for_run(config, job, taskdesc, worker_implementation): +def configure_taskdesc_for_run(config, task, taskdesc, worker_implementation): """ - Run the appropriate function for this job against the given task + Run the appropriate function for this task against the given task description. - This will raise an appropriate error if no function exists, or if the job's + This will raise an appropriate error if no function exists, or if the task's run is not valid according to the schema. """ - run_using = job["run"]["using"] + run_using = task["run"]["using"] if run_using not in registry: raise Exception(f"no functions for run.using {run_using!r}") if worker_implementation not in registry[run_using]: raise Exception( - "no functions for run.using {!r} on {!r}".format( - run_using, worker_implementation - ) + f"no functions for run.using {run_using!r} on {worker_implementation!r}" ) func, schema, defaults = registry[run_using][worker_implementation] for k, v in defaults.items(): - job["run"].setdefault(k, v) + task["run"].setdefault(k, v) if schema: validate_schema( schema, - job["run"], - "In job.run using {!r}/{!r} for job {!r}:".format( - job["run"]["using"], worker_implementation, job["label"] + task["run"], + "In task.run using {!r}/{!r} for task {!r}:".format( + task["run"]["using"], worker_implementation, task["label"] ), ) - func(config, job, taskdesc) + func(config, task, taskdesc) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/common.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/common.py similarity index 79% rename from third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/common.py rename to third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/common.py index 04708daf8191..66466bc5f957 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/common.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/common.py @@ -2,7 +2,7 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. """ -Common support for various job types. These functions are all named after the +Common support for various task types. These functions are all named after the worker implementation they operate on, and take the same three parameters, for consistency. """ @@ -21,21 +21,21 @@ def get_vcsdir_name(os): return "vcs" -def add_cache(job, taskdesc, name, mount_point, skip_untrusted=False): +def add_cache(task, taskdesc, name, mount_point, skip_untrusted=False): """Adds a cache based on the worker's implementation. Args: - job (dict): Task's job description. + task (dict): Tasks object. taskdesc (dict): Target task description to modify. name (str): Name of the cache. mount_point (path): Path on the host to mount the cache. skip_untrusted (bool): Whether cache is used in untrusted environments (default: False). Only applies to docker-worker. """ - if not job["run"].get("use-caches", True): + if not task["run"].get("use-caches", True): return - worker = job["worker"] + worker = task["worker"] if worker["implementation"] == "docker-worker": taskdesc["worker"].setdefault("caches", []).append( @@ -60,7 +60,7 @@ def add_cache(job, taskdesc, name, mount_point, skip_untrusted=False): pass -def add_artifacts(config, job, taskdesc, path): +def add_artifacts(config, task, taskdesc, path): taskdesc["worker"].setdefault("artifacts", []).append( { "name": get_artifact_prefix(taskdesc), @@ -70,28 +70,28 @@ def add_artifacts(config, job, taskdesc, path): ) -def docker_worker_add_artifacts(config, job, taskdesc): +def docker_worker_add_artifacts(config, task, taskdesc): """Adds an artifact directory to the task""" - path = "{workdir}/artifacts/".format(**job["run"]) + path = "{workdir}/artifacts/".format(**task["run"]) taskdesc["worker"]["env"]["UPLOAD_DIR"] = path - add_artifacts(config, job, taskdesc, path) + add_artifacts(config, task, taskdesc, path) -def generic_worker_add_artifacts(config, job, taskdesc): +def generic_worker_add_artifacts(config, task, taskdesc): """Adds an artifact directory to the task""" # The path is the location on disk; it doesn't necessarily # mean the artifacts will be public or private; that is set via the name # attribute in add_artifacts. - add_artifacts(config, job, taskdesc, path=get_artifact_prefix(taskdesc)) + add_artifacts(config, task, taskdesc, path=get_artifact_prefix(taskdesc)) -def support_vcs_checkout(config, job, taskdesc, repo_configs, sparse=False): - """Update a job/task with parameters to enable a VCS checkout. +def support_vcs_checkout(config, task, taskdesc, repo_configs, sparse=False): + """Update a task with parameters to enable a VCS checkout. This can only be used with ``run-task`` tasks, as the cache name is reserved for ``run-task`` tasks. """ - worker = job["worker"] + worker = task["worker"] is_mac = worker["os"] == "macosx" is_win = worker["os"] == "windows" is_linux = worker["os"] == "linux" @@ -102,7 +102,7 @@ def support_vcs_checkout(config, job, taskdesc, repo_configs, sparse=False): checkoutdir = "./build" hgstore = "y:/hg-shared" elif is_docker: - checkoutdir = "{workdir}/checkouts".format(**job["run"]) + checkoutdir = "{workdir}/checkouts".format(**task["run"]) hgstore = f"{checkoutdir}/hg-store" else: checkoutdir = "./checkouts" @@ -130,13 +130,7 @@ def support_vcs_checkout(config, job, taskdesc, repo_configs, sparse=False): if sparse: cache_name += "-sparse" - # Workers using Mercurial >= 5.8 will enable revlog-compression-zstd, which - # workers using older versions can't understand, so they can't share cache. - # At the moment, only docker workers use the newer version. - if is_docker: - cache_name += "-hg58" - - add_cache(job, taskdesc, cache_name, checkoutdir) + add_cache(task, taskdesc, cache_name, checkoutdir) env = taskdesc["worker"].setdefault("env", {}) env.update( @@ -167,5 +161,5 @@ def support_vcs_checkout(config, job, taskdesc, repo_configs, sparse=False): taskdesc["scopes"].append(f"secrets:get:{repo_config.ssh_secret_name}") # only some worker platforms have taskcluster-proxy enabled - if job["worker"]["implementation"] in ("docker-worker",): + if task["worker"]["implementation"] in ("docker-worker",): taskdesc["worker"]["taskcluster-proxy"] = True diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/index_search.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/index_search.py similarity index 84% rename from third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/index_search.py rename to third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/index_search.py index 09b48fe594d9..c25946980ea9 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/index_search.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/index_search.py @@ -12,7 +12,7 @@ phase will replace the task with the task from the other graph. from voluptuous import Required from taskgraph.transforms.base import TransformSequence -from taskgraph.transforms.job import run_job_using +from taskgraph.transforms.run import run_task_using from taskgraph.util.schema import Schema transforms = TransformSequence() @@ -29,9 +29,9 @@ run_task_schema = Schema( ) -@run_job_using("always-optimized", "index-search", schema=run_task_schema) -def fill_template(config, job, taskdesc): - run = job["run"] +@run_task_using("always-optimized", "index-search", schema=run_task_schema) +def fill_template(config, task, taskdesc): + run = task["run"] taskdesc["optimization"] = { "index-search": [index.format(**config.params) for index in run["index-search"]] } diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/run_task.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/run_task.py similarity index 91% rename from third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/run_task.py rename to third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/run_task.py index 6337673611a8..c2fbef83b085 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/run_task.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/run_task.py @@ -2,7 +2,7 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. """ -Support for running jobs that are invoked via the `run-task` script. +Support for running tasks that are invoked via the `run-task` script. """ import dataclasses @@ -10,8 +10,8 @@ import os from voluptuous import Any, Optional, Required -from taskgraph.transforms.job import run_job_using -from taskgraph.transforms.job.common import support_vcs_checkout +from taskgraph.transforms.run import run_task_using +from taskgraph.transforms.run.common import support_vcs_checkout from taskgraph.transforms.task import taskref_or_string from taskgraph.util import path, taskcluster from taskgraph.util.schema import Schema @@ -25,7 +25,7 @@ run_task_schema = Schema( { Required("using"): "run-task", # if true, add a cache at ~worker/.cache, which is where things like pip - # tend to hide their caches. This cache is never added for level-1 jobs. + # tend to hide their caches. This cache is never added for level-1 tasks. # TODO Once bug 1526028 is fixed, this and 'use-caches' should be merged. Required("cache-dotcache"): bool, # Whether or not to use caches. @@ -58,8 +58,8 @@ run_task_schema = Schema( ) -def common_setup(config, job, taskdesc, command): - run = job["run"] +def common_setup(config, task, taskdesc, command): + run = task["run"] if run["checkout"]: repo_configs = config.repo_configs if len(repo_configs) > 1 and run["checkout"] is True: @@ -72,7 +72,7 @@ def common_setup(config, job, taskdesc, command): support_vcs_checkout( config, - job, + task, taskdesc, repo_configs=repo_configs, sparse=bool(run["sparse-profile"]), @@ -97,7 +97,7 @@ def common_setup(config, job, taskdesc, command): raise Exception( "Found `{{checkout}}` interpolation in `cwd` for task {name} " "but the task doesn't have a checkout: {cwd}".format( - cwd=run["cwd"], name=job.get("name", job.get("label")) + cwd=run["cwd"], name=task.get("name", task.get("label")) ) ) @@ -126,14 +126,14 @@ def script_url(config, script): return f"{tc_url}/api/queue/v1/task/{task_id}/artifacts/public/{script}" -@run_job_using( +@run_task_using( "docker-worker", "run-task", schema=run_task_schema, defaults=worker_defaults ) -def docker_worker_run_task(config, job, taskdesc): - run = job["run"] - worker = taskdesc["worker"] = job["worker"] +def docker_worker_run_task(config, task, taskdesc): + run = task["run"] + worker = taskdesc["worker"] = task["worker"] command = run.pop("run-task-command", ["/usr/local/bin/run-task"]) - common_setup(config, job, taskdesc, command) + common_setup(config, task, taskdesc, command) if run.get("cache-dotcache"): worker["caches"].append( @@ -158,12 +158,12 @@ def docker_worker_run_task(config, job, taskdesc): worker["command"] = command -@run_job_using( +@run_task_using( "generic-worker", "run-task", schema=run_task_schema, defaults=worker_defaults ) -def generic_worker_run_task(config, job, taskdesc): - run = job["run"] - worker = taskdesc["worker"] = job["worker"] +def generic_worker_run_task(config, task, taskdesc): + run = task["run"] + worker = taskdesc["worker"] = task["worker"] is_win = worker["os"] == "windows" is_mac = worker["os"] == "macosx" is_bitbar = worker["os"] == "linux-bitbar" @@ -177,7 +177,7 @@ def generic_worker_run_task(config, job, taskdesc): else: command = ["./run-task"] - common_setup(config, job, taskdesc, command) + common_setup(config, task, taskdesc, command) worker.setdefault("mounts", []) if run.get("cache-dotcache"): diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/toolchain.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/toolchain.py similarity index 83% rename from third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/toolchain.py rename to third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/toolchain.py index c9c09542ff95..59e66cb973d2 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/job/toolchain.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/run/toolchain.py @@ -2,14 +2,14 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. """ -Support for running toolchain-building jobs via dedicated scripts +Support for running toolchain-building tasks via dedicated scripts """ from voluptuous import ALLOW_EXTRA, Any, Optional, Required import taskgraph -from taskgraph.transforms.job import configure_taskdesc_for_run, run_job_using -from taskgraph.transforms.job.common import ( +from taskgraph.transforms.run import configure_taskdesc_for_run, run_task_using +from taskgraph.transforms.run.common import ( docker_worker_add_artifacts, generic_worker_add_artifacts, get_vcsdir_name, @@ -36,12 +36,12 @@ toolchain_run_schema = Schema( # Paths/patterns pointing to files that influence the outcome of a # toolchain build. Optional("resources"): [str], - # Path to the artifact produced by the toolchain job + # Path to the artifact produced by the toolchain task Required("toolchain-artifact"): str, Optional( "toolchain-alias", - description="An alias that can be used instead of the real toolchain job name in " - "fetch stanzas for jobs.", + description="An alias that can be used instead of the real toolchain task name in " + "fetch stanzas for tasks.", ): Any(str, [str]), Optional( "toolchain-env", @@ -82,10 +82,10 @@ def get_digest_data(config, run, taskdesc): return data -def common_toolchain(config, job, taskdesc, is_docker): - run = job["run"] +def common_toolchain(config, task, taskdesc, is_docker): + run = task["run"] - worker = taskdesc["worker"] = job["worker"] + worker = taskdesc["worker"] = task["worker"] worker["chain-of-trust"] = True srcdir = get_vcsdir_name(worker["os"]) @@ -94,14 +94,14 @@ def common_toolchain(config, job, taskdesc, is_docker): # If the task doesn't have a docker-image, set a default worker.setdefault("docker-image", {"in-tree": "toolchain-build"}) - # Allow the job to specify where artifacts come from, but add + # Allow the task to specify where artifacts come from, but add # public/build if it's not there already. artifacts = worker.setdefault("artifacts", []) if not any(artifact.get("name") == "public/build" for artifact in artifacts): if is_docker: - docker_worker_add_artifacts(config, job, taskdesc) + docker_worker_add_artifacts(config, task, taskdesc) else: - generic_worker_add_artifacts(config, job, taskdesc) + generic_worker_add_artifacts(config, task, taskdesc) env = worker["env"] env.update( @@ -147,7 +147,7 @@ def common_toolchain(config, job, taskdesc, is_docker): run["command"] = command - configure_taskdesc_for_run(config, job, taskdesc, worker["implementation"]) + configure_taskdesc_for_run(config, task, taskdesc, worker["implementation"]) toolchain_defaults = { @@ -155,21 +155,21 @@ toolchain_defaults = { } -@run_job_using( +@run_task_using( "docker-worker", "toolchain-script", schema=toolchain_run_schema, defaults=toolchain_defaults, ) -def docker_worker_toolchain(config, job, taskdesc): - common_toolchain(config, job, taskdesc, is_docker=True) +def docker_worker_toolchain(config, task, taskdesc): + common_toolchain(config, task, taskdesc, is_docker=True) -@run_job_using( +@run_task_using( "generic-worker", "toolchain-script", schema=toolchain_run_schema, defaults=toolchain_defaults, ) -def generic_worker_toolchain(config, job, taskdesc): - common_toolchain(config, job, taskdesc, is_docker=False) +def generic_worker_toolchain(config, task, taskdesc): + common_toolchain(config, task, taskdesc, is_docker=False) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/task.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/task.py index c55de785136e..168b8c00c9f0 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/task.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/task.py @@ -110,7 +110,7 @@ task_description_schema = Schema( # section of the kind (delimited by "-") all smooshed together. # Eg: "test" becomes "T", "docker-image" becomes "DI", etc. "symbol": Optional(str), - # the job kind + # the task kind # If "build" or "test" is found in the kind name, this defaults # to the appropriate value. Otherwise, defaults to "other" "kind": Optional(Any("build", "test", "other")), @@ -129,7 +129,7 @@ task_description_schema = Schema( Optional("index"): { # the name of the product this build produces "product": str, - # the names to use for this job in the TaskCluster index + # the names to use for this task in the TaskCluster index "job-name": str, # Type of gecko v2 index to use "type": str, @@ -179,7 +179,7 @@ task_description_schema = Schema( # be substituted in this string: # {level} -- the scm level of this push "worker-type": str, - # Whether the job should use sccache compiler caching. + # Whether the task should use sccache compiler caching. Required("needs-sccache"): bool, # information specific to the worker implementation that will run this task Optional("worker"): { @@ -196,7 +196,7 @@ TC_TREEHERDER_SCHEMA_URL = ( UNKNOWN_GROUP_NAME = ( - "Treeherder group {} (from {}) has no name; " "add it to taskcluster/ci/config.yml" + "Treeherder group {} (from {}) has no name; " "add it to taskcluster/config.yml" ) V2_ROUTE_TEMPLATES = [ @@ -266,7 +266,7 @@ def index_builder(name): UNSUPPORTED_INDEX_PRODUCT_ERROR = """\ The index product {product} is not in the list of configured products in -`taskcluster/ci/config.yml'. +`taskcluster/config.yml'. """ @@ -317,7 +317,7 @@ def verify_index(config, index): { # only one type is supported by any of the workers right now "type": "persistent", - # name of the cache, allowing re-use by subsequent tasks naming the + # name of the cache, allowing reuse by subsequent tasks naming the # same cache "name": str, # location in the task image where the cache will be mounted @@ -364,6 +364,9 @@ def build_docker_worker_payload(config, task, task_def): if "in-tree" in image: name = image["in-tree"] docker_image_task = "build-docker-image-" + image["in-tree"] + assert "docker-image" not in task.get( + "dependencies", () + ), "docker-image key in dependencies object is reserved" task.setdefault("dependencies", {})["docker-image"] = docker_image_task image = { @@ -487,19 +490,19 @@ def build_docker_worker_payload(config, task, task_def): # run-task knows how to validate caches. # - # To help ensure new run-task features and bug fixes don't interfere - # with existing caches, we seed the hash of run-task into cache names. - # So, any time run-task changes, we should get a fresh set of caches. - # This means run-task can make changes to cache interaction at any time - # without regards for backwards or future compatibility. + # To help ensure new run-task features and bug fixes, as well as the + # versions of tools such as mercurial or git, don't interfere with + # existing caches, we seed the underlying docker-image task id into + # cache names, for tasks using in-tree Docker images. # # But this mechanism only works for in-tree Docker images that are built # with the current run-task! For out-of-tree Docker images, we have no # way of knowing their content of run-task. So, in addition to varying # cache names by the contents of run-task, we also take the Docker image - # name into consideration. This means that different Docker images will - # never share the same cache. This is a bit unfortunate. But it is the - # safest thing to do. Fortunately, most images are defined in-tree. + # name into consideration. + # + # This means that different Docker images will never share the same + # cache. This is a bit unfortunate, but is the safest thing to do. # # For out-of-tree Docker images, we don't strictly need to incorporate # the run-task content into the cache name. However, doing so preserves @@ -520,6 +523,8 @@ def build_docker_worker_payload(config, task, task_def): out_of_tree_image.encode("utf-8") ).hexdigest() suffix += name_hash[0:12] + else: + suffix += "-" else: suffix = cache_version @@ -539,13 +544,15 @@ def build_docker_worker_payload(config, task, task_def): suffix=suffix, ) caches[name] = cache["mount-point"] - task_def["scopes"].append("docker-worker:cache:%s" % name) + task_def["scopes"].append( + {"task-reference": "docker-worker:cache:%s" % name} + ) # Assertion: only run-task is interested in this. if run_task: payload["env"]["TASKCLUSTER_CACHES"] = ";".join(sorted(caches.values())) - payload["cache"] = caches + payload["cache"] = {"task-reference": caches} # And send down volumes information to run-task as well. if run_task and worker.get("volumes"): @@ -752,7 +759,7 @@ def build_generic_worker_payload(config, task, task_def): schema={ # the maximum time to run, in seconds Required("max-run-time"): int, - # locale key, if this is a locale beetmover job + # locale key, if this is a locale beetmover task Optional("locale"): str, Optional("partner-public"): bool, Required("release-properties"): { @@ -1075,7 +1082,11 @@ def build_task(config, tasks): extra["parent"] = os.environ.get("TASK_ID", "") if "expires-after" not in task: - task["expires-after"] = "28 days" if config.params.is_try() else "1 year" + task["expires-after"] = ( + config.graph_config._config.get("task-expires-after", "28 days") + if config.params.is_try() + else "1 year" + ) if "deadline-after" not in task: if "task-deadline-after" in config.graph_config: @@ -1142,9 +1153,9 @@ def build_task(config, tasks): config.params["project"] + th_project_suffix, branch_rev ) ) - task_def["metadata"]["description"] += " ([Treeherder push]({}))".format( - th_push_link - ) + task_def["metadata"][ + "description" + ] += f" ([Treeherder push]({th_push_link}))" # add the payload and adjust anything else as required (e.g., scopes) payload_builders[task["worker"]["implementation"]].builder( @@ -1288,7 +1299,7 @@ def check_caches_are_volumes(task): Caches and volumes are the only filesystem locations whose content isn't defined by the Docker image itself. Some caches are optional - depending on the job environment. We want paths that are potentially + depending on the task environment. We want paths that are potentially caches to have as similar behavior regardless of whether a cache is used. To help enforce this, we require that all paths used as caches to be declared as Docker volumes. This check won't catch all offenders. @@ -1343,7 +1354,9 @@ def check_run_task_caches(config, tasks): main_command = command[0] if isinstance(command[0], str) else "" run_task = main_command.endswith("run-task") - for cache in payload.get("cache", {}): + for cache in payload.get("cache", {}).get( + "task-reference", payload.get("cache", {}) + ): if not cache.startswith(cache_prefix): raise Exception( "{} is using a cache ({}) which is not appropriate " @@ -1364,7 +1377,7 @@ def check_run_task_caches(config, tasks): "cache name" ) - if not cache.endswith(suffix): + if suffix not in cache: raise Exception( f"{task['label']} is using a cache ({cache}) reserved for run-task " "but the cache name is not dependent on the contents " diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/task_context.py b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/task_context.py index 5c7ed6af805d..bd36d827aaf6 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/transforms/task_context.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/transforms/task_context.py @@ -81,9 +81,9 @@ transforms.add_validate(SCHEMA) @transforms.add -def render_task(config, jobs): - for job in jobs: - sub_config = job.pop("task-context") +def render_task(config, tasks): + for task in tasks: + sub_config = task.pop("task-context") params_context = {} for var, path in sub_config.pop("from-parameters", {}).items(): if isinstance(path, str): @@ -111,11 +111,11 @@ def render_task(config, jobs): # Now that we have our combined context, we can substitute. for field in fields: - container, subfield = job, field + container, subfield = task, field while "." in subfield: f, subfield = subfield.split(".", 1) container = container[f] container[subfield] = substitute(container[subfield], **subs) - yield job + yield task diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/archive.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/archive.py index ee59ba454823..261a031038ab 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/archive.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/archive.py @@ -12,6 +12,40 @@ import tarfile DEFAULT_MTIME = 1451606400 +# Python 3.9 contains this change: +# https://github.com/python/cpython/commit/674935b8caf33e47c78f1b8e197b1b77a04992d2 +# which changes the output of tar creation compared to earlier versions. +# As this code is used to generate tar files that are meant to be deterministic +# across versions of python (specifically, it's used as part of computing the hash +# of docker images, which needs to be identical between CI (which uses python 3.8), +# and developer environments (using arbitrary versions of python, at this point, +# most probably more recent than 3.9)). +# What we do is subblass TarInfo so that if used on python >= 3.9, it reproduces the +# behavior from python < 3.9. +# Here's how it goes: +# - the behavior in python >= 3.9 is the same as python < 3.9 when the type encoded +# in the tarinfo is CHRTYPE or BLKTYPE. +# - the value of the type is only compared in the context of choosing which behavior +# to take +# - we replace the type with the same value (so that using the value has no changes) +# but that pretends to be the same as CHRTYPE so that the condition that enables the +# old behavior is taken. +class HackedType(bytes): + def __eq__(self, other): + if other == tarfile.CHRTYPE: + return True + return self == other + + +class TarInfo(tarfile.TarInfo): + @staticmethod + def _create_header(info, format, encoding, errors): + info["type"] = HackedType(info["type"]) + # ignore type checking because it looks like pyright complains because we're calling a + # non-public method + return tarfile.TarInfo._create_header(info, format, encoding, errors) # type: ignore + + def create_tar_from_files(fp, files): """Create a tar file deterministically. @@ -25,15 +59,23 @@ def create_tar_from_files(fp, files): FUTURE accept a filename argument (or create APIs to write files) """ - with tarfile.open(name="", mode="w", fileobj=fp, dereference=True) as tf: + # The format is explicitly set to tarfile.GNU_FORMAT, because this default format + # has been changed in Python 3.8. + with tarfile.open( + name="", mode="w", fileobj=fp, dereference=True, format=tarfile.GNU_FORMAT + ) as tf: for archive_path, f in sorted(files.items()): if isinstance(f, str): - mode = os.stat(f).st_mode + s = os.stat(f) + mode = s.st_mode + size = s.st_size f = open(f, "rb") else: mode = 0o0644 + size = len(f.read()) + f.seek(0) - ti = tarfile.TarInfo(archive_path) + ti = TarInfo(archive_path) ti.mode = mode ti.type = tarfile.REGTYPE @@ -56,9 +98,7 @@ def create_tar_from_files(fp, files): # Set mtime to a constant value. ti.mtime = DEFAULT_MTIME - f.seek(0, 2) - ti.size = f.tell() - f.seek(0, 0) + ti.size = size # tarfile wants to pass a size argument to read(). So just # wrap/buffer in a proper file object interface. tf.addfile(ti, f) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/cached_tasks.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/cached_tasks.py index 974b114902a1..4105b05fd999 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/cached_tasks.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/cached_tasks.py @@ -7,6 +7,9 @@ import hashlib import time TARGET_CACHE_INDEX = "{cache_prefix}.cache.level-{level}.{type}.{name}.hash.{digest}" +TARGET_PR_CACHE_INDEX = ( + "{cache_prefix}.cache.head.{head_ref}.{type}.{name}.hash.{digest}" +) EXTRA_CACHE_INDEXES = [ "{cache_prefix}.cache.level-{level}.{type}.{name}.latest", "{cache_prefix}.cache.level-{level}.{type}.{name}.pushdate.{build_date_long}", @@ -53,31 +56,45 @@ def add_optimization( # We'll try to find a cached version of the toolchain at levels above and # including the current level, starting at the highest level. - # Chain-of-trust doesn't handle tasks not built on the tip of a - # pull-request, so don't look for level-1 tasks if building a pull-request. index_routes = [] min_level = int(config.params["level"]) - if config.params["tasks_for"] == "github-pull-request": - min_level = max(min_level, 3) for level in reversed(range(min_level, 4)): subs["level"] = level index_routes.append(TARGET_CACHE_INDEX.format(**subs)) - taskdesc["optimization"] = {"index-search": index_routes} + # Pull requests use a different target cache index route. This way we can + # be confident they won't be used by anything other than the pull request + # that created the cache in the first place. + if config.params["tasks_for"].startswith( + "github-pull-request" + ) and config.graph_config["taskgraph"].get("cache-pull-requests", True): + subs["head_ref"] = config.params["head_ref"] + if subs["head_ref"].startswith("refs/heads/"): + subs["head_ref"] = subs["head_ref"][11:] + index_routes.append(TARGET_PR_CACHE_INDEX.format(**subs)) + + taskdesc["optimization"] = {"index-search": index_routes} # ... and cache at the lowest level. subs["level"] = config.params["level"] - taskdesc.setdefault("routes", []).append( - f"index.{TARGET_CACHE_INDEX.format(**subs)}" - ) - # ... and add some extra routes for humans - subs["build_date_long"] = time.strftime( - "%Y.%m.%d.%Y%m%d%H%M%S", time.gmtime(config.params["build_date"]) - ) - taskdesc["routes"].extend( - [f"index.{route.format(**subs)}" for route in EXTRA_CACHE_INDEXES] - ) + if config.params["tasks_for"].startswith("github-pull-request"): + if config.graph_config["taskgraph"].get("cache-pull-requests", True): + taskdesc.setdefault("routes", []).append( + f"index.{TARGET_PR_CACHE_INDEX.format(**subs)}" + ) + else: + taskdesc.setdefault("routes", []).append( + f"index.{TARGET_CACHE_INDEX.format(**subs)}" + ) + + # ... and add some extra routes for humans + subs["build_date_long"] = time.strftime( + "%Y.%m.%d.%Y%m%d%H%M%S", time.gmtime(config.params["build_date"]) + ) + taskdesc["routes"].extend( + [f"index.{route.format(**subs)}" for route in EXTRA_CACHE_INDEXES] + ) taskdesc["attributes"]["cached_task"] = { "type": cache_type, diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/decision.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/decision.py deleted file mode 100644 index d0e1e1079f63..000000000000 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/decision.py +++ /dev/null @@ -1,79 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -""" -Utilities for generating a decision task from :file:`.taskcluster.yml`. -""" - - -import os - -import jsone -import slugid -import yaml - -from .templates import merge -from .time import current_json_time -from .vcs import find_hg_revision_push_info - - -def make_decision_task(params, root, context, head_rev=None): - """Generate a basic decision task, based on the root .taskcluster.yml""" - with open(os.path.join(root, ".taskcluster.yml"), "rb") as f: - taskcluster_yml = yaml.safe_load(f) - - if not head_rev: - head_rev = params["head_rev"] - - if params["repository_type"] == "hg": - pushlog = find_hg_revision_push_info(params["repository_url"], head_rev) - - hg_push_context = { - "pushlog_id": pushlog["pushid"], - "pushdate": pushlog["pushdate"], - "owner": pushlog["user"], - } - else: - hg_push_context = {} - - slugids = {} - - def as_slugid(name): - # https://github.com/taskcluster/json-e/issues/164 - name = name[0] - if name not in slugids: - slugids[name] = slugid.nice() - return slugids[name] - - # provide a similar JSON-e context to what mozilla-taskcluster provides: - # https://docs.taskcluster.net/reference/integrations/mozilla-taskcluster/docs/taskcluster-yml - # but with a different tasks_for and an extra `cron` section - context = merge( - { - "repository": { - "url": params["repository_url"], - "project": params["project"], - "level": params["level"], - }, - "push": merge( - { - "revision": params["head_rev"], - # remainder are fake values, but the decision task expects them anyway - "comment": " ", - }, - hg_push_context, - ), - "now": current_json_time(), - "as_slugid": as_slugid, - }, - context, - ) - - rendered = jsone.render(taskcluster_yml, context) - if len(rendered["tasks"]) != 1: - raise Exception("Expected .taskcluster.yml to only produce one cron task") - task = rendered["tasks"][0] - - task_id = task.pop("taskId") - return (task_id, task) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/docker.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/docker.py index c37a69f98f5b..a50561a1f301 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/docker.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/docker.py @@ -197,7 +197,7 @@ def stream_context_tar(topsrcdir, context_dir, out_file, image_name=None, args=N @memoize def image_paths(): """Return a map of image name to paths containing their Dockerfile.""" - config = load_yaml("taskcluster", "ci", "docker-image", "kind.yml") + config = load_yaml("taskcluster", "kinds", "docker-image", "kind.yml") return { k: os.path.join(IMAGE_DIR, v.get("definition", k)) for k, v in config["tasks"].items() diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/hash.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/hash.py index 5d884fc3188a..d42b2ecef989 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/hash.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/hash.py @@ -39,10 +39,7 @@ def hash_paths(base_path, patterns): raise Exception("%s did not match anything" % pattern) for path in sorted(found): h.update( - "{} {}\n".format( - hash_path(mozpath.abspath(mozpath.join(base_path, path))), - mozpath.normsep(path), - ).encode("utf-8") + f"{hash_path(mozpath.abspath(mozpath.join(base_path, path)))} {mozpath.normsep(path)}\n".encode() ) return h.hexdigest() @@ -55,4 +52,8 @@ def _find_matching_files(base_path, pattern): @memoize def _get_all_files(base_path): - return [str(path) for path in Path(base_path).rglob("*") if path.is_file()] + return [ + mozpath.normsep(str(path)) + for path in Path(base_path).rglob("*") + if path.is_file() + ] diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/keyed_by.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/keyed_by.py index 9b0c5a44fb45..00c84ba98041 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/keyed_by.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/keyed_by.py @@ -66,8 +66,8 @@ def evaluate_keyed_by( # Error out when only 'default' is specified as only alternatives, # because we don't need to by-{keyed_by} there. raise Exception( - "Keyed-by '{}' unnecessary with only value 'default' " - "found, when determining item {}".format(keyed_by, item_name) + f"Keyed-by '{keyed_by}' unnecessary with only value 'default' " + f"found, when determining item {item_name}" ) if key is None: @@ -76,22 +76,20 @@ def evaluate_keyed_by( continue else: raise Exception( - "No attribute {} and no value for 'default' found " - "while determining item {}".format(keyed_by, item_name) + f"No attribute {keyed_by} and no value for 'default' found " + f"while determining item {item_name}" ) matches = keymatch(alternatives, key) if enforce_single_match and len(matches) > 1: raise Exception( - "Multiple matching values for {} {!r} found while " - "determining item {}".format(keyed_by, key, item_name) + f"Multiple matching values for {keyed_by} {key!r} found while " + f"determining item {item_name}" ) elif matches: value = matches[0] continue raise Exception( - "No {} matching {!r} nor 'default' found while determining item {}".format( - keyed_by, key, item_name - ) + f"No {keyed_by} matching {key!r} nor 'default' found while determining item {item_name}" ) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/parameterization.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/parameterization.py index 6233a98a4019..e6fdb4f62740 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/parameterization.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/parameterization.py @@ -20,6 +20,12 @@ def _recurse(val, param_fns): if len(val) == 1: for param_key, param_fn in param_fns.items(): if set(val.keys()) == {param_key}: + if isinstance(val[param_key], dict): + # handle `{"task-reference": {"": "bar"}}` + return { + param_fn(key): recurse(v) + for key, v in val[param_key].items() + } return param_fn(val[param_key]) return {k: recurse(v) for k, v in val.items()} else: @@ -74,16 +80,12 @@ def resolve_task_references(label, task_def, task_id, decision_task_id, dependen task_id = dependencies[dependency] except KeyError: raise KeyError( - "task '{}' has no dependency named '{}'".format( - label, dependency - ) + f"task '{label}' has no dependency named '{dependency}'" ) assert artifact_name.startswith( "public/" - ), "artifact-reference only supports public artifacts, not `{}`".format( - artifact_name - ) + ), f"artifact-reference only supports public artifacts, not `{artifact_name}`" return get_artifact_url(task_id, artifact_name) return ARTIFACT_REFERENCE_PATTERN.sub(repl, val) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/schema.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/schema.py index 3989f71182e3..02e79a3a2786 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/schema.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/schema.py @@ -74,7 +74,7 @@ def resolve_keyed_by( For example, given item:: - job: + task: test-platform: linux128 chunks: by-test-platform: @@ -82,10 +82,10 @@ def resolve_keyed_by( win.*: 6 default: 12 - a call to `resolve_keyed_by(item, 'job.chunks', item['thing-name'])` + a call to `resolve_keyed_by(item, 'task.chunks', item['thing-name'])` would mutate item in-place to:: - job: + task: test-platform: linux128 chunks: 12 @@ -182,7 +182,7 @@ def check_schema(schema): if not identifier_re.match(k) and not excepted(path): raise RuntimeError( "YAML schemas should use dashed lower-case identifiers, " - "not {!r} @ {}".format(k, path) + f"not {k!r} @ {path}" ) elif isinstance(k, (voluptuous.Optional, voluptuous.Required)): check_identifier(path, k.schema) @@ -191,9 +191,7 @@ def check_schema(schema): check_identifier(path, v) elif not excepted(path): raise RuntimeError( - "Unexpected type in YAML schema: {} @ {}".format( - type(k).__name__, path - ) + f"Unexpected type in YAML schema: {type(k).__name__} @ {path}" ) if isinstance(sch, collections.abc.Mapping): diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/shell.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/shell.py index d695767f05b4..16b71b7d6a83 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/shell.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/shell.py @@ -14,7 +14,7 @@ def _quote(s): As a special case, if given an int, returns a string containing the int, not enclosed in quotes. """ - if type(s) == int: + if isinstance(s, int): return "%d" % s # Empty strings need to be quoted to have any significance diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/taskcluster.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/taskcluster.py index a830a473b3b8..07a340411743 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/taskcluster.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/taskcluster.py @@ -3,10 +3,12 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. +import copy import datetime import functools import logging import os +from typing import Dict, List, Union import requests import taskcluster_urls as liburls @@ -53,9 +55,11 @@ def get_root_url(use_proxy): logger.debug( "Running in Taskcluster instance {}{}".format( os.environ["TASKCLUSTER_ROOT_URL"], - " with taskcluster-proxy" - if "TASKCLUSTER_PROXY_URL" in os.environ - else "", + ( + " with taskcluster-proxy" + if "TASKCLUSTER_PROXY_URL" in os.environ + else "" + ), ) ) return liburls.normalize_root_url(os.environ["TASKCLUSTER_ROOT_URL"]) @@ -244,6 +248,7 @@ def get_task_url(task_id, use_proxy=False): return task_tmpl.format(task_id) +@memoize def get_task_definition(task_id, use_proxy=False): response = _do_request(get_task_url(task_id, use_proxy)) return response.json() @@ -327,11 +332,7 @@ def get_purge_cache_url(provisioner_id, worker_type, use_proxy=False): def purge_cache(provisioner_id, worker_type, cache_name, use_proxy=False): """Requests a cache purge from the purge-caches service.""" if testing: - logger.info( - "Would have purged {}/{}/{}.".format( - provisioner_id, worker_type, cache_name - ) - ) + logger.info(f"Would have purged {provisioner_id}/{worker_type}/{cache_name}.") else: logger.info(f"Purging {provisioner_id}/{worker_type}/{cache_name}.") purge_cache_url = get_purge_cache_url(provisioner_id, worker_type, use_proxy) @@ -371,3 +372,40 @@ def list_task_group_incomplete_tasks(task_group_id): params = {"continuationToken": resp.get("continuationToken")} else: break + + +@memoize +def _get_deps(task_ids, use_proxy): + upstream_tasks = {} + for task_id in task_ids: + task_def = get_task_definition(task_id, use_proxy) + upstream_tasks[task_def["metadata"]["name"]] = task_id + + upstream_tasks.update(_get_deps(tuple(task_def["dependencies"]), use_proxy)) + + return upstream_tasks + + +def get_ancestors( + task_ids: Union[List[str], str], use_proxy: bool = False +) -> Dict[str, str]: + """Gets the ancestor tasks of the given task_ids as a dictionary of label -> taskid. + + Args: + task_ids (str or [str]): A single task id or a list of task ids to find the ancestors of. + use_proxy (bool): See get_root_url. + + Returns: + dict: A dict whose keys are task labels and values are task ids. + """ + upstream_tasks: Dict[str, str] = {} + + if isinstance(task_ids, str): + task_ids = [task_ids] + + for task_id in task_ids: + task_def = get_task_definition(task_id, use_proxy) + + upstream_tasks.update(_get_deps(tuple(task_def["dependencies"]), use_proxy)) + + return copy.deepcopy(upstream_tasks) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/time.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/time.py index e511978b5f21..6639e5ddddd3 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/time.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/time.py @@ -73,9 +73,7 @@ def value_of(input_str): if unit not in ALIASES: raise UnknownTimeMeasurement( - "{} is not a valid time measure use one of {}".format( - unit, sorted(ALIASES.keys()) - ) + f"{unit} is not a valid time measure use one of {sorted(ALIASES.keys())}" ) return ALIASES[unit](value) diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/treeherder.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/treeherder.py index cff5f286cc78..6bb6dbd1378f 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/treeherder.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/treeherder.py @@ -42,22 +42,25 @@ def replace_group(treeherder_symbol, new_group): return join_symbol(new_group, symbol) -def inherit_treeherder_from_dep(job, dep_job): - """Inherit treeherder defaults from dep_job""" - treeherder = job.get("treeherder", {}) +def inherit_treeherder_from_dep(task, dep_task): + """Inherit treeherder defaults from dep_task""" + treeherder = task.get("treeherder", {}) dep_th_platform = ( - dep_job.task.get("extra", {}) + dep_task.task.get("extra", {}) .get("treeherder", {}) .get("machine", {}) .get("platform", "") ) dep_th_collection = list( - dep_job.task.get("extra", {}).get("treeherder", {}).get("collection", {}).keys() + dep_task.task.get("extra", {}) + .get("treeherder", {}) + .get("collection", {}) + .keys() )[0] treeherder.setdefault("platform", f"{dep_th_platform}/{dep_th_collection}") treeherder.setdefault( - "tier", dep_job.task.get("extra", {}).get("treeherder", {}).get("tier", 1) + "tier", dep_task.task.get("extra", {}).get("treeherder", {}).get("tier", 1) ) # Does not set symbol treeherder.setdefault("kind", "build") diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/vcs.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/vcs.py index 2d967d26454e..c2fd0d323686 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/vcs.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/vcs.py @@ -10,9 +10,6 @@ import subprocess from abc import ABC, abstractmethod, abstractproperty from shutil import which -import requests -from redo import retry - from taskgraph.util.path import ancestors PUSHLOG_TMPL = "{}/json-pushes?version=2&changeset={}&tipsonly=1&full=1" @@ -21,7 +18,7 @@ logger = logging.getLogger(__name__) class Repository(ABC): - # Both mercurial and git use sha1 as revision idenfiers. Luckily, both define + # Both mercurial and git use sha1 as revision identifiers. Luckily, both define # the same value as the null revision. # # https://github.com/git/git/blob/dc04167d378fb29d30e1647ff6ff51dd182bc9a3/t/oid-info/hash-info#L7 @@ -519,34 +516,3 @@ def get_repository(path): return GitRepository(path) raise RuntimeError("Current directory is neither a git or hg repository") - - -def find_hg_revision_push_info(repository, revision): - """Given the parameters for this action and a revision, find the - pushlog_id of the revision.""" - pushlog_url = PUSHLOG_TMPL.format(repository, revision) - - def query_pushlog(url): - r = requests.get(pushlog_url, timeout=60) - r.raise_for_status() - return r - - r = retry( - query_pushlog, - args=(pushlog_url,), - attempts=5, - sleeptime=10, - ) - pushes = r.json()["pushes"] - if len(pushes) != 1: - raise RuntimeError( - "Unable to find a single pushlog_id for {} revision {}: {}".format( - repository, revision, pushes - ) - ) - pushid = list(pushes.keys())[0] - return { - "pushdate": pushes[pushid]["date"], - "pushid": pushid, - "user": pushes[pushid]["user"], - } diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/verify.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/verify.py index e6705c16cf30..b5bb0889ae2d 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/verify.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/verify.py @@ -134,10 +134,8 @@ def verify_task_graph_symbol(task, taskgraph, scratch_pad, graph_config, paramet collection_keys = tuple(sorted(treeherder.get("collection", {}).keys())) if len(collection_keys) != 1: raise Exception( - "Task {} can't be in multiple treeherder collections " - "(the part of the platform after `/`): {}".format( - task.label, collection_keys - ) + f"Task {task.label} can't be in multiple treeherder collections " + f"(the part of the platform after `/`): {collection_keys}" ) platform = treeherder.get("machine", {}).get("platform") group_symbol = treeherder.get("groupSymbol") @@ -175,9 +173,7 @@ def verify_trust_domain_v2_routes( if route.startswith(route_prefix): if route in scratch_pad: raise Exception( - "conflict between {}:{} for route: {}".format( - task.label, scratch_pad[route], route - ) + f"conflict between {task.label}:{scratch_pad[route]} for route: {route}" ) else: scratch_pad[route] = task.label @@ -206,9 +202,7 @@ def verify_routes_notification_filters( route_filter = route.split(".")[-1] if route_filter not in valid_filters: raise Exception( - "{} has invalid notification filter ({})".format( - task.label, route_filter - ) + f"{task.label} has invalid notification filter ({route_filter})" ) @@ -235,12 +229,7 @@ def verify_dependency_tiers(task, taskgraph, scratch_pad, graph_config, paramete continue if tier < tiers[d]: raise Exception( - "{} (tier {}) cannot depend on {} (tier {})".format( - task.label, - printable_tier(tier), - d, - printable_tier(tiers[d]), - ) + f"{task.label} (tier {printable_tier(tier)}) cannot depend on {d} (tier {printable_tier(tiers[d])})" ) @@ -262,11 +251,7 @@ def verify_toolchain_alias(task, taskgraph, scratch_pad, graph_config, parameter if key in scratch_pad: raise Exception( "Duplicate toolchain-alias in tasks " - "`{}`and `{}`: {}".format( - task.label, - scratch_pad[key], - key, - ) + f"`{task.label}`and `{scratch_pad[key]}`: {key}" ) else: scratch_pad[key] = task.label diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/util/yaml.py b/third_party/python/taskcluster_taskgraph/taskgraph/util/yaml.py index 141c7a16d3ae..a7335215278a 100644 --- a/third_party/python/taskcluster_taskgraph/taskgraph/util/yaml.py +++ b/third_party/python/taskcluster_taskgraph/taskgraph/util/yaml.py @@ -5,7 +5,10 @@ import os -from yaml.loader import SafeLoader +try: + from yaml import CSafeLoader as SafeLoader +except ImportError: + from yaml import SafeLoader class UnicodeLoader(SafeLoader): diff --git a/toolkit/components/messaging-system/schemas/index.rst b/toolkit/components/messaging-system/schemas/index.rst index 957dd06c3aa2..182e33ca5200 100644 --- a/toolkit/components/messaging-system/schemas/index.rst +++ b/toolkit/components/messaging-system/schemas/index.rst @@ -174,7 +174,7 @@ Triggers and actions .. _make_schemas_script: https://searchfox.org/mozilla-central/source/browser/components/asrouter/content-src/schemas/make-schemas.py .. _jsonschema_bundling: https://json-schema.org/understanding-json-schema/structuring.html#bundling -.. _make_schemas_check: https://searchfox.org/mozilla-central/source/taskcluster/ci/source-test/python.yml#425-438 +.. _make_schemas_check: https://searchfox.org/mozilla-central/source/taskcluster/kinds/source-test/python.yml#425-438 .. _Experimenter: https://experimenter.info diff --git a/tools/fuzzing/smoke/smoke.py b/tools/fuzzing/smoke/smoke.py index bfc7cb56cda9..1a031a18f9f4 100644 --- a/tools/fuzzing/smoke/smoke.py +++ b/tools/fuzzing/smoke/smoke.py @@ -6,7 +6,7 @@ This script can be used to perform simple calls using `jsshell` or whatever other tools you may add. -The call is done via `taskcluster/ci/fuzzing/kind.yml` and +The call is done via `taskcluster/kinds/fuzzing/kind.yml` and files contained in the `target.jsshell.zip` and `target.fuzztest.tests.tar.gz` build artifacts are downloaded to run things. diff --git a/tools/lint/condprof-addons.yml b/tools/lint/condprof-addons.yml index a62c1fb6b9ef..b85deda7bc86 100644 --- a/tools/lint/condprof-addons.yml +++ b/tools/lint/condprof-addons.yml @@ -5,6 +5,6 @@ condprof-addons: - 'testing/condprofile/condprof/customization' exclude: [] extensions: ['json'] - support-files: ['taskcluster/ci/fetch/browsertime.yml'] + support-files: ['taskcluster/kinds/fetch/browsertime.yml'] type: structured_log payload: condprof-addons:lint diff --git a/tools/lint/condprof-addons/__init__.py b/tools/lint/condprof-addons/__init__.py index f17ab26f3f35..c569a4d8dc10 100644 --- a/tools/lint/condprof-addons/__init__.py +++ b/tools/lint/condprof-addons/__init__.py @@ -13,7 +13,7 @@ import requests import yaml from mozlint.pathutils import expand_exclusions -BROWSERTIME_FETCHES_PATH = Path("taskcluster/ci/fetch/browsertime.yml") +BROWSERTIME_FETCHES_PATH = Path("taskcluster/kinds/fetch/browsertime.yml") CUSTOMIZATIONS_PATH = Path("testing/condprofile/condprof/customization/") DOWNLOAD_TIMEOUT = 30 ERR_FETCH_TASK_MISSING = "firefox-addons taskcluster fetch config section not found" diff --git a/tools/lint/rejected-words.yml b/tools/lint/rejected-words.yml index ed9e8c9d60d7..6a809930ec65 100644 --- a/tools/lint/rejected-words.yml +++ b/tools/lint/rejected-words.yml @@ -213,7 +213,7 @@ avoid-blacklist-and-whitelist: - security/sandbox/linux/SandboxFilter.cpp - security/sandbox/linux/SandboxFilterUtil.h - security/sandbox/linux/Sandbox.h - - taskcluster/ci/docker-image/kind.yml + - taskcluster/kinds/docker-image/kind.yml - taskcluster/gecko_taskgraph/actions/create_interactive.py - taskcluster/gecko_taskgraph/transforms/test/other.py - taskcluster/gecko_taskgraph/try_option_syntax.py diff --git a/tools/signing/macos/mach_commands.py b/tools/signing/macos/mach_commands.py index 543faca2ea00..a513ad723805 100644 --- a/tools/signing/macos/mach_commands.py +++ b/tools/signing/macos/mach_commands.py @@ -306,7 +306,7 @@ def macos_sign( # and the channel argument (nightly, devedition, or release) we'll # use different entitlements. sourcedir = command_context.topsrcdir - buildconfigpath = sourcedir + "/taskcluster/ci/config.yml" + buildconfigpath = sourcedir + "/taskcluster/config.yml" command_context.log( logging.INFO, diff --git a/tools/tryselect/selectors/perf.py b/tools/tryselect/selectors/perf.py index e8a6e6f9cce2..96416829f77c 100644 --- a/tools/tryselect/selectors/perf.py +++ b/tools/tryselect/selectors/perf.py @@ -198,7 +198,7 @@ class PerfParser(CompareParser): "tests. If the Activity, Binary Path, or Intents required " "change at all relative to the existing GeckoView, and Fenix " "tasks, then you will need to make fixes in the associated " - "taskcluster files (e.g. taskcluster/ci/test/browsertime-mobile.yml). " + "taskcluster files (e.g. taskcluster/kinds/test/browsertime-mobile.yml). " "Alternatively, set MOZ_FIREFOX_ANDROID_APK_OUTPUT to a path to " "an APK, and then run the command with --browsertime-upload-apk " "firefox-android. This option will only copy the APK for browsertime, see " diff --git a/tools/tryselect/selectors/release.py b/tools/tryselect/selectors/release.py index fae85469ba94..5ec88a989cf3 100644 --- a/tools/tryselect/selectors/release.py +++ b/tools/tryselect/selectors/release.py @@ -126,7 +126,7 @@ def run( } ) - with open(os.path.join(vcs.path, "taskcluster/ci/config.yml")) as f: + with open(os.path.join(vcs.path, "taskcluster/config.yml")) as f: migration_configs = yaml.safe_load(f) for migration in migrations: migration_config = migration_configs["merge-automation"]["behaviors"][migration] diff --git a/tools/tryselect/task_config.py b/tools/tryselect/task_config.py index 58e8beeda486..0bf9731eeeed 100644 --- a/tools/tryselect/task_config.py +++ b/tools/tryselect/task_config.py @@ -610,7 +610,7 @@ class WorkerOverrides(TryConfig): if worker_suffixes: root = build.topsrcdir - root = os.path.join(root, "taskcluster", "ci") + root = os.path.join(root, "taskcluster") graph_config = load_graph_config(root) for worker_suffix in worker_suffixes: alias, suffix = worker_suffix.split("=", 1) diff --git a/tools/tryselect/tasks.py b/tools/tryselect/tasks.py index 701d1c1adefb..46abd3546b88 100644 --- a/tools/tryselect/tasks.py +++ b/tools/tryselect/tasks.py @@ -78,7 +78,7 @@ def generate_tasks(params=None, full=False, disable_target_task_filter=False): "target_tasks_method": target_tasks_method, }, ) - root = os.path.join(build.topsrcdir, "taskcluster", "ci") + root = os.path.join(build.topsrcdir, "taskcluster") taskgraph.fast = True generator = TaskGraphGenerator(root_dir=root, parameters=params)