Bug 1562642 - Add missing license headers r=mhoye,marionette-reviewers,webdriver-reviewers,perftest-reviewers,tarek
authorSylvestre Ledru <sledru@mozilla.com>
Tue, 17 Nov 2020 02:06:54 +0000
changeset 557489 a1affabd8110d8664f992b3b47256c0303aaa257
parent 557488 9e8d121c4a1aa7beaa0fc5fb679b03e329826bab
child 557490 2a10175a100221e9de8412a7292d616199cdd53d
push id37957
push usermalexandru@mozilla.com
push dateTue, 17 Nov 2020 09:44:06 +0000
treeherdermozilla-central@31d67eef91da [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmhoye, marionette-reviewers, webdriver-reviewers, perftest-reviewers, tarek
bugs1562642
milestone85.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1562642 - Add missing license headers r=mhoye,marionette-reviewers,webdriver-reviewers,perftest-reviewers,tarek Differential Revision: https://phabricator.services.mozilla.com/D97138
devtools/shared/test-helpers/.eslintrc.js
testing/awsy/awsy/__init__.py
testing/condprofile/condprof/customization/__init__.py
testing/condprofile/condprof/scenarii/__init__.py
testing/condprofile/condprof/scenarii/full.py
testing/condprofile/condprof/scenarii/settled.py
testing/condprofile/condprof/scenarii/settled2.py
testing/condprofile/setup.py
testing/firefox-ui/resources/cookies/cookie_single.html
testing/firefox-ui/resources/layout/mozilla.html
testing/firefox-ui/resources/layout/mozilla_community.html
testing/firefox-ui/resources/layout/mozilla_contribute.html
testing/firefox-ui/resources/layout/mozilla_governance.html
testing/firefox-ui/resources/layout/mozilla_grants.html
testing/firefox-ui/resources/layout/mozilla_mission.html
testing/firefox-ui/resources/layout/mozilla_organizations.html
testing/firefox-ui/resources/layout/mozilla_projects.html
testing/firefox-ui/resources/private_browsing/about.html
testing/firefox-ui/resources/support.html
testing/firefox-ui/resources/update/snippet_empty.xml
testing/geckodriver/build.rs
testing/geckodriver/marionette/src/common.rs
testing/geckodriver/marionette/src/error.rs
testing/geckodriver/marionette/src/lib.rs
testing/geckodriver/marionette/src/marionette.rs
testing/geckodriver/marionette/src/message.rs
testing/geckodriver/marionette/src/result.rs
testing/geckodriver/marionette/src/test.rs
testing/geckodriver/marionette/src/webdriver.rs
testing/geckodriver/src/build.rs
testing/geckodriver/src/capabilities.rs
testing/geckodriver/src/command.rs
testing/geckodriver/src/logging.rs
testing/geckodriver/src/marionette.rs
testing/geckodriver/src/prefs.rs
testing/geckodriver/src/test.rs
testing/marionette/.eslintrc.js
testing/marionette/client/marionette_driver/keys.py
testing/marionette/harness/setup.py
testing/modules/MockRegistry.jsm
testing/modules/Sinon.jsm
testing/mozbase/docs/_static/structured_example.py
testing/mozbase/mozlog/mozlog/capture.py
testing/mozbase/mozlog/mozlog/formatters/html/__init__.py
testing/mozbase/mozlog/mozlog/formatters/xunit.py
testing/mozbase/mozlog/mozlog/scripts/__init__.py
testing/mozbase/mozlog/mozlog/scripts/format.py
testing/mozbase/mozlog/mozlog/scripts/logmerge.py
testing/mozbase/mozlog/mozlog/scripts/unstable.py
testing/mozbase/mozlog/mozlog/stdadapter.py
testing/mozbase/mozprocess/mozprocess/winprocess.py
testing/mozbase/mozprofile/mozprofile/diff.py
testing/mozbase/mozprofile/mozprofile/view.py
testing/mozbase/mozproxy/mozproxy/backends/mitm/scripts/alternate-server-replay.py
testing/mozbase/mozproxy/mozproxy/backends/mitm/scripts/inject-deterministic.py
testing/mozbase/mozrunner/mozrunner/base/__init__.py
testing/mozbase/rust/mozdevice/src/adb.rs
testing/mozbase/rust/mozdevice/src/lib.rs
testing/mozbase/rust/mozdevice/src/test.rs
testing/mozbase/rust/mozprofile/src/lib.rs
testing/mozbase/rust/mozprofile/src/preferences.rs
testing/mozbase/rust/mozprofile/src/prefreader.rs
testing/mozbase/rust/mozprofile/src/profile.rs
testing/mozbase/rust/mozrunner/src/bin/firefox-default-path.rs
testing/mozbase/rust/mozrunner/src/firefox_args.rs
testing/mozbase/rust/mozrunner/src/lib.rs
testing/mozbase/rust/mozrunner/src/path.rs
testing/mozbase/rust/mozrunner/src/runner.rs
testing/mozbase/rust/mozversion/src/lib.rs
testing/mozharness/configs/android/android_common.py
testing/mozharness/configs/android/android_hw.py
testing/mozharness/configs/android/android_pgo.py
testing/mozharness/configs/android/androidarm_4_3.py
testing/mozharness/configs/android/androidx86_7_0.py
testing/mozharness/configs/android/wrench.py
testing/mozharness/configs/awsy/linux_config.py
testing/mozharness/configs/awsy/macosx_config.py
testing/mozharness/configs/awsy/taskcluster_windows_config.py
testing/mozharness/configs/balrog/production.py
testing/mozharness/configs/balrog/staging.py
testing/mozharness/configs/builds/build_pool_specifics.py
testing/mozharness/configs/builds/releng_base_android_64_builds.py
testing/mozharness/configs/builds/releng_base_firefox.py
testing/mozharness/configs/builds/releng_base_linux_32_builds.py
testing/mozharness/configs/builds/releng_base_linux_64_builds.py
testing/mozharness/configs/builds/releng_base_mac_64_cross_builds.py
testing/mozharness/configs/builds/releng_base_windows_32_mingw_builds.py
testing/mozharness/configs/builds/releng_base_windows_64_mingw_builds.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64_beta.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64_beta_debug.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64_debug.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_beta.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_beta_debug.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_debug.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_debug_ccov.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_debug_searchfox.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_gradle_dependencies.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_partner_sample1.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_profile_generate.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_geckoview_docs.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_beta.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_beta_debug.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_debug.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_fuzzing_asan.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_beta.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_beta_debug.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_debug.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_fuzzing_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/32_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/32_rusttests.py
testing/mozharness/configs/builds/releng_sub_linux_configs/32_rusttests_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_add-on-devel.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_and_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_reporter_tc.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc_and_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage_opt.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_asan_tc.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_tsan_tc.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_noopt_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_rusttests.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_rusttests_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_searchfox_and_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_source.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_stat_and_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_tsan_tc.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_valgrind.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_add-on-devel.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_code_coverage_debug.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_code_coverage_opt.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug_searchfox.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_fuzzing_asan.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_fuzzing_debug.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_noopt_debug.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_debug.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_stat_and_debug.py
testing/mozharness/configs/builds/releng_sub_windows_configs/32_add-on-devel.py
testing/mozharness/configs/builds/releng_sub_windows_configs/32_debug.py
testing/mozharness/configs/builds/releng_sub_windows_configs/32_mingwclang.py
testing/mozharness/configs/builds/releng_sub_windows_configs/32_stat_and_debug.py
testing/mozharness/configs/builds/releng_sub_windows_configs/64_add-on-devel.py
testing/mozharness/configs/builds/releng_sub_windows_configs/64_debug.py
testing/mozharness/configs/builds/releng_sub_windows_configs/64_mingwclang.py
testing/mozharness/configs/builds/taskcluster_base_macosx.py
testing/mozharness/configs/builds/taskcluster_base_win32.py
testing/mozharness/configs/builds/taskcluster_base_win64.py
testing/mozharness/configs/builds/taskcluster_base_windows.py
testing/mozharness/configs/builds/taskcluster_sub_win32/debug.py
testing/mozharness/configs/builds/taskcluster_sub_win32/noopt_debug.py
testing/mozharness/configs/builds/taskcluster_sub_win64/asan_debug.py
testing/mozharness/configs/builds/taskcluster_sub_win64/asan_reporter_opt.py
testing/mozharness/configs/builds/taskcluster_sub_win64/ccov_opt.py
testing/mozharness/configs/builds/taskcluster_sub_win64/debug.py
testing/mozharness/configs/builds/taskcluster_sub_win64/noopt_debug.py
testing/mozharness/configs/builds/taskcluster_sub_win64/plain_opt.py
testing/mozharness/configs/builds/taskcluster_sub_win64/rusttests_opt.py
testing/mozharness/configs/builds/taskcluster_sub_win64/searchfox_debug.py
testing/mozharness/configs/developer_config.py
testing/mozharness/configs/firefox_ui_tests/qa_jenkins.py
testing/mozharness/configs/firefox_ui_tests/releng_release.py
testing/mozharness/configs/firefox_ui_tests/taskcluster.py
testing/mozharness/configs/firefox_ui_tests/taskcluster_mac.py
testing/mozharness/configs/firefox_ui_tests/taskcluster_windows.py
testing/mozharness/configs/l10n_bumper/jamun.py
testing/mozharness/configs/l10n_bumper/mozilla-beta.py
testing/mozharness/configs/l10n_bumper/mozilla-central.py
testing/mozharness/configs/l10n_bumper/mozilla-esr68.py
testing/mozharness/configs/marionette/mac_taskcluster_config.py
testing/mozharness/configs/marionette/prod_config.py
testing/mozharness/configs/marionette/windows_config.py
testing/mozharness/configs/marionette/windows_taskcluster_config.py
testing/mozharness/configs/merge_day/beta_to_release.py
testing/mozharness/configs/merge_day/bump_central.py
testing/mozharness/configs/merge_day/bump_esr.py
testing/mozharness/configs/merge_day/central_to_beta.py
testing/mozharness/configs/merge_day/early_to_late_beta.py
testing/mozharness/configs/merge_day/release_to_esr.py
testing/mozharness/configs/merge_day/staging_beta_migration.py
testing/mozharness/configs/openh264/linux32.py
testing/mozharness/configs/openh264/linux64.py
testing/mozharness/configs/openh264/macosx64.py
testing/mozharness/configs/openh264/win32.py
testing/mozharness/configs/openh264/win64-aarch64.py
testing/mozharness/configs/openh264/win64.py
testing/mozharness/configs/partner_repacks/release_mozilla-release_desktop.py
testing/mozharness/configs/partner_repacks/release_mozilla-release_desktop_EME-free.py
testing/mozharness/configs/partner_repacks/staging_release_mozilla-release_desktop.py
testing/mozharness/configs/raptor/android_hw_config.py
testing/mozharness/configs/raptor/linux64_config_taskcluster.py
testing/mozharness/configs/raptor/linux_config.py
testing/mozharness/configs/raptor/mac_config.py
testing/mozharness/configs/raptor/windows_config.py
testing/mozharness/configs/raptor/windows_vm_config.py
testing/mozharness/configs/releases/bouncer_firefox_beta.py
testing/mozharness/configs/releases/bouncer_firefox_devedition.py
testing/mozharness/configs/releases/bouncer_firefox_esr.py
testing/mozharness/configs/releases/bouncer_firefox_nightly.py
testing/mozharness/configs/releases/bouncer_firefox_release.py
testing/mozharness/configs/releases/dev_postrelease_fennec_beta.py
testing/mozharness/configs/releases/dev_postrelease_fennec_release.py
testing/mozharness/configs/releases/dev_postrelease_firefox_beta.py
testing/mozharness/configs/releases/dev_postrelease_firefox_release.py
testing/mozharness/configs/releases/dev_postrelease_firefox_release_birch.py
testing/mozharness/configs/releases/dev_updates_firefox_beta.py
testing/mozharness/configs/releases/dev_updates_firefox_devedition.py
testing/mozharness/configs/releases/dev_updates_firefox_release.py
testing/mozharness/configs/releases/dev_updates_firefox_release_birch.py
testing/mozharness/configs/releases/updates_firefox_beta.py
testing/mozharness/configs/releases/updates_firefox_devedition.py
testing/mozharness/configs/releases/updates_firefox_release.py
testing/mozharness/configs/remove_executables.py
testing/mozharness/configs/repackage/base.py
testing/mozharness/configs/repackage/linux32_signed.py
testing/mozharness/configs/repackage/linux64_signed.py
testing/mozharness/configs/repackage/osx_partner.py
testing/mozharness/configs/repackage/osx_signed.py
testing/mozharness/configs/repackage/win32_partner.py
testing/mozharness/configs/repackage/win32_sfx_stub.py
testing/mozharness/configs/repackage/win32_signed.py
testing/mozharness/configs/repackage/win64-aarch64_sfx_stub.py
testing/mozharness/configs/repackage/win64_partner.py
testing/mozharness/configs/repackage/win64_signed.py
testing/mozharness/configs/servo/mac.py
testing/mozharness/configs/single_locale/devedition.py
testing/mozharness/configs/single_locale/firefox.py
testing/mozharness/configs/single_locale/linux32.py
testing/mozharness/configs/single_locale/linux64.py
testing/mozharness/configs/single_locale/macosx64.py
testing/mozharness/configs/single_locale/tc_android-api-16.py
testing/mozharness/configs/single_locale/tc_common.py
testing/mozharness/configs/single_locale/tc_linux32.py
testing/mozharness/configs/single_locale/tc_linux_common.py
testing/mozharness/configs/single_locale/tc_macosx64.py
testing/mozharness/configs/single_locale/tc_win32.py
testing/mozharness/configs/single_locale/tc_win64.py
testing/mozharness/configs/single_locale/win32.py
testing/mozharness/configs/single_locale/win64-aarch64.py
testing/mozharness/configs/single_locale/win64.py
testing/mozharness/configs/talos/linux64_config_taskcluster.py
testing/mozharness/configs/talos/linux_config.py
testing/mozharness/configs/talos/mac_config.py
testing/mozharness/configs/talos/windows_config.py
testing/mozharness/configs/talos/windows_taskcluster_config.py
testing/mozharness/configs/talos/windows_vm_config.py
testing/mozharness/configs/taskcluster_nightly.py
testing/mozharness/configs/unittests/linux_unittest.py
testing/mozharness/configs/unittests/mac_unittest.py
testing/mozharness/configs/unittests/win_unittest.py
testing/mozharness/examples/action_config_script.py
testing/mozharness/examples/silent_script.py
testing/mozharness/examples/venv.py
testing/mozharness/examples/verbose_script.py
testing/mozharness/external_tools/extract_and_run_command.py
testing/mozharness/external_tools/gittool.py
testing/mozharness/external_tools/packagesymbols.py
testing/mozharness/mozharness/__init__.py
testing/mozharness/mozharness/base/diskutils.py
testing/mozharness/mozharness/base/vcs/gittool.py
testing/mozharness/mozharness/mozilla/bouncer/submitter.py
testing/mozharness/mozharness/mozilla/checksums.py
testing/mozharness/mozharness/mozilla/merkle.py
testing/mozharness/mozharness/mozilla/mozbase.py
testing/mozharness/mozharness/mozilla/repo_manipulation.py
testing/mozharness/mozharness/mozilla/tooltool.py
testing/mozharness/scripts/release/generate-checksums.py
testing/mozharness/scripts/release/update-verify-config-creator.py
testing/mozharness/scripts/repackage.py
testing/mozharness/setup.py
testing/performance/perftest_android_main.js
testing/performance/perftest_bbc_link.js
testing/performance/perftest_facebook.js
testing/performance/perftest_jsconf_cold.js
testing/performance/perftest_jsconf_warm.js
testing/performance/perftest_pageload.js
testing/performance/perftest_politico_link.js
testing/performance/perftest_youtube_link.js
testing/profiles/base/user.js
testing/profiles/common/user.js
testing/profiles/geckoview-junit/user.js
testing/profiles/perf/user.js
testing/profiles/profileserver/user.js
testing/profiles/raptor-android/user.js
testing/profiles/raptor/user.js
testing/profiles/unittest-features/user.js
testing/profiles/unittest-required/user.js
testing/profiles/web-platform/user.js
testing/profiles/xpcshell/user.js
testing/raptor/.eslintrc.js
testing/raptor/browsertime/browsertime_benchmark.js
testing/raptor/browsertime/browsertime_pageload.js
testing/raptor/browsertime/browsertime_scenario.js
testing/talos/.eslintrc.js
testing/talos/INSTALL.py
testing/talos/setup.py
testing/talos/talos/bootstrap.js
testing/talos/talos/cmanager_base.py
testing/talos/talos/filter.py
testing/talos/talos/getinfooffline/background.js
testing/talos/talos/pageloader/chrome/MozillaFileLogger.js
testing/talos/talos/pageloader/chrome/a11y.js
testing/talos/talos/pageloader/chrome/tscroll.js
testing/talos/talos/scripts/report.py
testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.js
testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.js
testing/talos/talos/talosconfig.py
testing/talos/talos/test.py
testing/talos/talos/unittests/conftest.py
testing/talos/talos/webextensions/dummy/background.js
testing/talos/talos/webextensions/dummy/content.js
testing/talos/talos/xtalos/__init__.py
testing/web-platform/manifestdownload.py
testing/web-platform/meta/screen-wake-lock/wakelock-insecure-context.any.js
testing/web-platform/metamerge.py
testing/web-platform/metasummary.py
testing/web-platform/unittestrunner.py
testing/web-platform/update/upstream.py
testing/web-platform/vcs.py
testing/webdriver/src/actions.rs
testing/webdriver/src/capabilities.rs
testing/webdriver/src/command.rs
testing/webdriver/src/common.rs
testing/webdriver/src/error.rs
testing/webdriver/src/httpapi.rs
testing/webdriver/src/lib.rs
testing/webdriver/src/macros.rs
testing/webdriver/src/response.rs
testing/webdriver/src/server.rs
testing/webdriver/src/test.rs
testing/xpcshell/moz-http2/moz-http2-child.js
testing/xpcshell/xpcshellcommandline.py
--- a/devtools/shared/test-helpers/.eslintrc.js
+++ b/devtools/shared/test-helpers/.eslintrc.js
@@ -1,6 +1,10 @@
+/* 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/. */
+
 "use strict";
 
 module.exports = {
   // Extend from the shared list of defined globals for mochitests.
   extends: "../../.eslintrc.mochitests.js",
 };
--- a/testing/awsy/awsy/__init__.py
+++ b/testing/awsy/awsy/__init__.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # Maximum number of tabs to open
 MAX_TABS = 30
 
 # Default amount of seconds to wait in between opening tabs
 PER_TAB_PAUSE = 10
 
 # Default amount of seconds to wait for things to be settled down
 SETTLE_WAIT_TIME = 30
--- a/testing/condprofile/condprof/customization/__init__.py
+++ b/testing/condprofile/condprof/customization/__init__.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 import os
 import json
 
 HERE = os.path.dirname(__file__)
 
 
 def get_customizations():
--- a/testing/condprofile/condprof/scenarii/__init__.py
+++ b/testing/condprofile/condprof/scenarii/__init__.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 from condprof.scenarii.full import full
 from condprof.scenarii.settled import settled
 from condprof.scenarii.settled2 import settled2
 
 
 scenarii = {"full": full, "settled": settled, "settled2": settled2}
--- a/testing/condprofile/condprof/scenarii/full.py
+++ b/testing/condprofile/condprof/scenarii/full.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import random
 import os
 import asyncio
 from arsenic.errors import UnknownError
 
 
 from condprof.util import logger, get_credentials
 from condprof.helpers import TabSwitcher, execute_async_script, is_mobile
--- a/testing/condprofile/condprof/scenarii/settled.py
+++ b/testing/condprofile/condprof/scenarii/settled.py
@@ -1,7 +1,11 @@
+# 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/.
+
 import asyncio
 
 
 async def settled(session, options):
     # nothing is done, we just settle here for 30 seconds
     await asyncio.sleep(options.get("sleep", 30))
     return {}
--- a/testing/condprofile/condprof/scenarii/settled2.py
+++ b/testing/condprofile/condprof/scenarii/settled2.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import asyncio
 
 
 async def settled2(session, options):
     retries = 0
     while retries < 3:
         try:
             await asyncio.wait_for(session.get("https://www.mozilla.org/en-US/"), 5)
--- a/testing/condprofile/setup.py
+++ b/testing/condprofile/setup.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 import sys
 from setuptools import setup, find_packages
 
 PY3 = sys.version_info.major == 3
 
 if PY3:
     entry_points = """
--- a/testing/firefox-ui/resources/cookies/cookie_single.html
+++ b/testing/firefox-ui/resources/cookies/cookie_single.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
 <script type="text/javascript">
   function setCookie() {
     var date = new Date();
     date.setDate(new Date().getDate() + 36);
     document.cookie = "litmus_1=true;expires=" + date.toGMTString();
--- a/testing/firefox-ui/resources/layout/mozilla.html
+++ b/testing/firefox-ui/resources/layout/mozilla.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
     <title>Mozilla</title>
     <link rel="shortcut icon" type="image/ico" href="../images/mozilla_favicon.ico" />
 </head>
 
 <body>
--- a/testing/firefox-ui/resources/layout/mozilla_community.html
+++ b/testing/firefox-ui/resources/layout/mozilla_community.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
     <title>Mozilla Community</title>
     <link rel="shortcut icon" type="image/ico" href="../images/seamonkey_favicon.ico" />
 </head>
 
 <body>
--- a/testing/firefox-ui/resources/layout/mozilla_contribute.html
+++ b/testing/firefox-ui/resources/layout/mozilla_contribute.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
     <title>Mozilla Contribute</title>
     <link rel="shortcut icon" type="image/ico" href="../images/thunderbird_favicon.ico" />
 </head>
 
 <body>
--- a/testing/firefox-ui/resources/layout/mozilla_governance.html
+++ b/testing/firefox-ui/resources/layout/mozilla_governance.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
     <title>Mozilla Governance</title>
     <link rel="shortcut icon" type="image/ico" href="../images/firefox_favicon.ico" />
 </head>
 
 <body>
--- a/testing/firefox-ui/resources/layout/mozilla_grants.html
+++ b/testing/firefox-ui/resources/layout/mozilla_grants.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
     <title>Mozilla Grants</title>
     <link rel="shortcut icon" type="image/ico" href="../images/mozilla_favicon.ico" />
 </head>
 
 <body>
--- a/testing/firefox-ui/resources/layout/mozilla_mission.html
+++ b/testing/firefox-ui/resources/layout/mozilla_mission.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
     <title>Mozilla Mission</title>
     <link rel="shortcut icon" type="image/ico" href="../images/seamonkey_favicon.ico" />
 </head>
 
 <body>
--- a/testing/firefox-ui/resources/layout/mozilla_organizations.html
+++ b/testing/firefox-ui/resources/layout/mozilla_organizations.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
     <title>Mozilla Organizations</title>
     <link rel="shortcut icon" type="image/ico" href="../images/thunderbird_favicon.ico" />
 </head>
 
 <body>
--- a/testing/firefox-ui/resources/layout/mozilla_projects.html
+++ b/testing/firefox-ui/resources/layout/mozilla_projects.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
     <title>Mozilla Projects</title>
     <link rel="shortcut icon" type="image/ico" href="../images/firefox_favicon.ico" />
 </head>
 
 <body>
--- a/testing/firefox-ui/resources/private_browsing/about.html
+++ b/testing/firefox-ui/resources/private_browsing/about.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
   <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 </head>
 
 <body>
   <div id="about_pb">About Private Browsing</div>
--- a/testing/firefox-ui/resources/support.html
+++ b/testing/firefox-ui/resources/support.html
@@ -1,8 +1,12 @@
+<!-- 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/. -->
+
 <!DOCTYPE html>
 <html>
 <head>
   <meta http-equiv="content-type" content="text/html; charset=UTF-8">
   <script type="text/javascript">
     function show() {
       var results = /\?topic=(.+)$/.exec(window.document.location);
       var topic = decodeURIComponent(results[1].replace(/\+/g, " "));
--- a/testing/firefox-ui/resources/update/snippet_empty.xml
+++ b/testing/firefox-ui/resources/update/snippet_empty.xml
@@ -1,3 +1,7 @@
 <?xml version="1.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/. -->
+
 <updates>
 </updates>
--- a/testing/geckodriver/build.rs
+++ b/testing/geckodriver/build.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 // Writes build information to ${OUT_DIR}/build-info.rs which is included in
 // the program during compilation:
 //
 // ```no_run
 // const COMMIT_HASH: Option<&'static str> = Some("c31a366");
 // const COMMIT_DATE: Option<&'static str> = Some("1988-05-10");
 // ```
 //
--- a/testing/geckodriver/marionette/src/common.rs
+++ b/testing/geckodriver/marionette/src/common.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use serde::ser::SerializeMap;
 use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
 use serde_json::Value;
 
 #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
 pub struct BoolValue {
     value: bool,
 }
--- a/testing/geckodriver/marionette/src/error.rs
+++ b/testing/geckodriver/marionette/src/error.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use std::error;
 use std::fmt;
 
 use serde::{Deserialize, Serialize};
 
 #[derive(Clone, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Deserialize)]
 #[serde(untagged)]
 pub(crate) enum Error {
--- a/testing/geckodriver/marionette/src/lib.rs
+++ b/testing/geckodriver/marionette/src/lib.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 pub mod error;
 
 pub mod common;
 pub mod marionette;
 pub mod message;
 pub mod result;
 pub mod webdriver;
 
--- a/testing/geckodriver/marionette/src/marionette.rs
+++ b/testing/geckodriver/marionette/src/marionette.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use serde::{Deserialize, Serialize};
 
 use crate::common::BoolValue;
 
 #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
 #[allow(non_camel_case_types)]
 pub enum AppStatus {
     eAttemptQuit,
--- a/testing/geckodriver/marionette/src/message.rs
+++ b/testing/geckodriver/marionette/src/message.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use serde::de::{self, SeqAccess, Unexpected, Visitor};
 use serde::{Deserialize, Deserializer, Serialize, Serializer};
 use serde_json::{Map, Value};
 use serde_repr::{Deserialize_repr, Serialize_repr};
 use std::fmt;
 
 use crate::error::MarionetteError;
 use crate::marionette;
--- a/testing/geckodriver/marionette/src/result.rs
+++ b/testing/geckodriver/marionette/src/result.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use serde::de;
 use serde::{Deserialize, Deserializer, Serialize, Serializer};
 use serde_json::Value;
 
 use crate::common::{Cookie, Timeouts, WebElement};
 
 #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
 pub struct NewWindow {
--- a/testing/geckodriver/marionette/src/test.rs
+++ b/testing/geckodriver/marionette/src/test.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 pub static ELEMENT_KEY: &'static str = "element-6066-11e4-a52e-4f735466cecf";
 
 pub fn assert_ser_de<T>(data: &T, json: serde_json::Value)
 where
     T: std::fmt::Debug,
     T: std::cmp::PartialEq,
     T: serde::de::DeserializeOwned,
     T: serde::Serialize,
--- a/testing/geckodriver/marionette/src/webdriver.rs
+++ b/testing/geckodriver/marionette/src/webdriver.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 
 use crate::common::{from_cookie, from_name, to_cookie, to_name, Cookie, Frame, Timeouts, Window};
 
 #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
 pub struct Url {
     pub url: String,
--- a/testing/geckodriver/src/build.rs
+++ b/testing/geckodriver/src/build.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use serde_json::Value;
 use std::fmt;
 
 include!(concat!(env!("OUT_DIR"), "/build-info.rs"));
 
 pub struct BuildInfo;
 
 impl BuildInfo {
--- a/testing/geckodriver/src/capabilities.rs
+++ b/testing/geckodriver/src/capabilities.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use crate::command::LogOptions;
 use crate::logging::Level;
 use base64;
 use mozdevice::AndroidStorageInput;
 use mozprofile::preferences::Pref;
 use mozprofile::profile::Profile;
 use mozrunner::runner::platform::firefox_default_path;
 use mozversion::{self, firefox_binary_version, firefox_version, Version};
--- a/testing/geckodriver/src/command.rs
+++ b/testing/geckodriver/src/command.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use crate::logging;
 use base64;
 use hyper::Method;
 use serde::de::{self, Deserialize, Deserializer};
 use serde_json::{self, Value};
 use std::env;
 use std::fs::File;
 use std::io::prelude::*;
--- a/testing/geckodriver/src/logging.rs
+++ b/testing/geckodriver/src/logging.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 //! Gecko-esque logger implementation for the [`log`] crate.
 //!
 //! The [`log`] crate provides a single logging API that abstracts over the
 //! actual logging implementation.  This module uses the logging API
 //! to provide a log implementation that shares many aesthetical traits with
 //! [Log.jsm] from Gecko.
 //!
 //! Using the [`error!`], [`warn!`], [`info!`], [`debug!`], and
--- a/testing/geckodriver/src/marionette.rs
+++ b/testing/geckodriver/src/marionette.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use crate::android::AndroidHandler;
 use crate::command::{
     AddonInstallParameters, AddonUninstallParameters, GeckoContextParameters,
     GeckoExtensionCommand, GeckoExtensionRoute, CHROME_ELEMENT_KEY,
 };
 use marionette_rs::common::{
     Cookie as MarionetteCookie, Date as MarionetteDate, Frame as MarionetteFrame,
     Timeouts as MarionetteTimeouts, WebElement as MarionetteWebElement, Window,
--- a/testing/geckodriver/src/prefs.rs
+++ b/testing/geckodriver/src/prefs.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use mozprofile::preferences::Pref;
 
 // ALL CHANGES TO THIS FILE MUST HAVE REVIEW FROM A GECKODRIVER PEER!
 //
 // All preferences in this file are not immediately effective, and
 // require a restart of Firefox, or have to be set in the profile before
 // Firefox gets started the first time. If a preference has to be added,
 // which is immediately effective, it needs to be done in Marionette
--- a/testing/geckodriver/src/test.rs
+++ b/testing/geckodriver/src/test.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 pub fn assert_de<T>(data: &T, json: serde_json::Value)
 where
     T: std::fmt::Debug,
     T: std::cmp::PartialEq,
     T: serde::de::DeserializeOwned,
 {
     assert_eq!(data, &serde_json::from_value::<T>(json).unwrap());
 }
--- a/testing/marionette/.eslintrc.js
+++ b/testing/marionette/.eslintrc.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 "use strict";
 
 // inherits from ../../tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js
 
 module.exports = {
   rules: {
     camelcase: ["error", { properties: "never" }],
     "no-fallthrough": "error",
--- a/testing/marionette/client/marionette_driver/keys.py
+++ b/testing/marionette/client/marionette_driver/keys.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # copyright 2008-2009 WebDriver committers
 # Copyright 2008-2009 Google Inc.
 #
 # Licensed under the Apache License Version 2.0 = uthe "License")
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
 #     http //www.apache.org/licenses/LICENSE-2.0
--- a/testing/marionette/harness/setup.py
+++ b/testing/marionette/harness/setup.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import os
 import re
 
 from setuptools import find_packages, setup
 
 
--- a/testing/modules/MockRegistry.jsm
+++ b/testing/modules/MockRegistry.jsm
@@ -1,8 +1,12 @@
+/* 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/. */
+
 "use strict";
 
 var EXPORTED_SYMBOLS = ["MockRegistry"];
 
 const { MockRegistrar } = ChromeUtils.import(
   "resource://testing-common/MockRegistrar.jsm"
 );
 
--- a/testing/modules/Sinon.jsm
+++ b/testing/modules/Sinon.jsm
@@ -1,8 +1,12 @@
+/* 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/. */
+
 "use strict";
 
 var EXPORTED_SYMBOLS = ["sinon"];
 
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 
 // ================================================
 // Load mocking/stubbing library sinon
--- a/testing/mozbase/docs/_static/structured_example.py
+++ b/testing/mozbase/docs/_static/structured_example.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import argparse
 import sys
 import traceback
 import types
 
 from mozlog import commandline, get_default_logger
--- a/testing/mozbase/mozlog/mozlog/capture.py
+++ b/testing/mozbase/mozlog/mozlog/capture.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import sys
 import threading
 from io import BytesIO
 from multiprocessing import Queue
 
 
--- a/testing/mozbase/mozlog/mozlog/formatters/html/__init__.py
+++ b/testing/mozbase/mozlog/mozlog/formatters/html/__init__.py
@@ -1,5 +1,9 @@
+# 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/.
+
 from __future__ import absolute_import
 
 from .html import HTMLFormatter
 
 __all__ = ["HTMLFormatter"]
--- a/testing/mozbase/mozlog/mozlog/formatters/xunit.py
+++ b/testing/mozbase/mozlog/mozlog/formatters/xunit.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 from xml.etree import ElementTree
 
 import six
 
 from . import base
 
--- a/testing/mozbase/mozlog/mozlog/scripts/__init__.py
+++ b/testing/mozbase/mozlog/mozlog/scripts/__init__.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# 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/.
+
 
 from __future__ import absolute_import
 
 import argparse
 import unstable
 import format as formatlog
 import logmerge
 import six
--- a/testing/mozbase/mozlog/mozlog/scripts/format.py
+++ b/testing/mozbase/mozlog/mozlog/scripts/format.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import argparse
 import sys
 
 from .. import handlers, commandline, reader
 
 
--- a/testing/mozbase/mozlog/mozlog/scripts/logmerge.py
+++ b/testing/mozbase/mozlog/mozlog/scripts/logmerge.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import, print_function
 
 import argparse
 import json
 import os
 import sys
 from threading import current_thread
 import time
--- a/testing/mozbase/mozlog/mozlog/scripts/unstable.py
+++ b/testing/mozbase/mozlog/mozlog/scripts/unstable.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import, print_function
 
 import argparse
 from collections import defaultdict
 import json
 
 from mozlog import reader
 import six
--- a/testing/mozbase/mozlog/mozlog/stdadapter.py
+++ b/testing/mozbase/mozlog/mozlog/stdadapter.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import logging
 
 from .structuredlog import StructuredLogger, log_levels
 
 
 class UnstructuredHandler(logging.Handler):
--- a/testing/mozbase/mozprocess/mozprocess/winprocess.py
+++ b/testing/mozbase/mozprocess/mozprocess/winprocess.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # A module to expose various thread/process/job related structures and
 # methods from kernel32
 #
 # The MIT License
 #
 # Copyright (c) 2003-2004 by Peter Astrand <astrand@lysator.liu.se>
 #
 # Additions and modifications written by Benjamin Smedberg
--- a/testing/mozbase/mozprofile/mozprofile/diff.py
+++ b/testing/mozbase/mozprofile/mozprofile/diff.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# 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/.
+
 
 """
 diff two profile summaries
 """
 
 from __future__ import absolute_import, print_function
 
 import difflib
--- a/testing/mozbase/mozprofile/mozprofile/view.py
+++ b/testing/mozbase/mozprofile/mozprofile/view.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# 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/.
+
 
 """
 script to view mozilla profiles
 """
 from __future__ import absolute_import, print_function
 
 import mozprofile
 import optparse
--- a/testing/mozbase/mozproxy/mozproxy/backends/mitm/scripts/alternate-server-replay.py
+++ b/testing/mozbase/mozproxy/mozproxy/backends/mitm/scripts/alternate-server-replay.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # This file was copied from  mitmproxy/mitmproxy/addons/serverplayback.py release tag 4.0.4
 # and modified by Florin Strugariu
 
 # Altered features:
 # * returns 404 rather than dropping the whole HTTP/2 connection on the floor
 # * remove the replay packages that don't have any content in their response package
 from __future__ import absolute_import, print_function
 
--- a/testing/mozbase/mozproxy/mozproxy/backends/mitm/scripts/inject-deterministic.py
+++ b/testing/mozbase/mozproxy/mozproxy/backends/mitm/scripts/inject-deterministic.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import, print_function
 
 import base64
 import hashlib
 import re
 import time
 
 from mitmproxy import ctx
--- a/testing/mozbase/mozrunner/mozrunner/base/__init__.py
+++ b/testing/mozbase/mozrunner/mozrunner/base/__init__.py
@@ -1,6 +1,10 @@
+# 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/.
+
 # flake8: noqa
 from __future__ import absolute_import
 
 from .runner import BaseRunner
 from .device import DeviceRunner, FennecRunner
 from .browser import GeckoRuntimeRunner, BlinkRuntimeRunner
--- a/testing/mozbase/rust/mozdevice/src/adb.rs
+++ b/testing/mozbase/rust/mozdevice/src/adb.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 #[derive(Debug, PartialEq)]
 pub enum SyncCommand {
     Data,
     Dent,
     Done,
     Fail,
     List,
     Okay,
--- a/testing/mozbase/rust/mozdevice/src/lib.rs
+++ b/testing/mozbase/rust/mozdevice/src/lib.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 #[macro_use]
 extern crate log;
 extern crate once_cell;
 extern crate regex;
 extern crate tempfile;
 extern crate walkdir;
 
 pub mod adb;
--- a/testing/mozbase/rust/mozdevice/src/test.rs
+++ b/testing/mozbase/rust/mozdevice/src/test.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use crate::*;
 
 // Currently the mozdevice API is not safe for multiple requests at the same
 // time. It is recommended to run each of the unit tests on its own. Also adb
 // specific tests cannot be run in CI yet. To check those locally, also run
 // the ignored tests.
 //
 // Use the following command to accomplish that:
--- a/testing/mozbase/rust/mozprofile/src/lib.rs
+++ b/testing/mozbase/rust/mozprofile/src/lib.rs
@@ -1,9 +1,13 @@
 #![forbid(unsafe_code)]
+/* 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/. */
+
 
 extern crate tempfile;
 
 pub mod preferences;
 pub mod prefreader;
 pub mod profile;
 
 #[cfg(test)]
--- a/testing/mozbase/rust/mozprofile/src/preferences.rs
+++ b/testing/mozbase/rust/mozprofile/src/preferences.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use std::collections::BTreeMap;
 
 pub type Preferences = BTreeMap<String, Pref>;
 
 #[derive(Debug, PartialEq, Clone)]
 pub enum PrefValue {
     Bool(bool),
     String(String),
--- a/testing/mozbase/rust/mozprofile/src/prefreader.rs
+++ b/testing/mozbase/rust/mozprofile/src/prefreader.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use crate::preferences::{Pref, PrefValue, Preferences};
 use std::borrow::Borrow;
 use std::borrow::Cow;
 use std::char;
 use std::error::Error;
 use std::fmt;
 use std::io::{self, Write};
 use std::iter::Iterator;
--- a/testing/mozbase/rust/mozprofile/src/profile.rs
+++ b/testing/mozbase/rust/mozprofile/src/profile.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use crate::preferences::{Pref, Preferences};
 use crate::prefreader::{parse, serialize, PrefReaderError};
 use std::collections::btree_map::Iter;
 use std::fs::File;
 use std::io::prelude::*;
 use std::io::Result as IoResult;
 use std::path::{Path, PathBuf};
 use tempfile::{Builder, TempDir};
--- a/testing/mozbase/rust/mozrunner/src/bin/firefox-default-path.rs
+++ b/testing/mozbase/rust/mozrunner/src/bin/firefox-default-path.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 extern crate mozrunner;
 
 use mozrunner::runner::platform;
 use std::io::Write;
 
 fn main() {
     let (path, code) = platform::firefox_default_path()
         .map(|x| (x.to_string_lossy().into_owned(), 0))
--- a/testing/mozbase/rust/mozrunner/src/firefox_args.rs
+++ b/testing/mozbase/rust/mozrunner/src/firefox_args.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 //! Argument string parsing and matching functions for Firefox.
 //!
 //! Which arguments Firefox accepts and in what style depends on the platform.
 //! On Windows only, arguments can be prefixed with `/` (slash), such as
 //! `/foreground`.  Elsewhere, including Windows, arguments may be prefixed
 //! with both single (`-foreground`) and double (`--foreground`) dashes.
 //!
 //! An argument's name is determined by a space or an assignment operator (`=`)
--- a/testing/mozbase/rust/mozrunner/src/lib.rs
+++ b/testing/mozbase/rust/mozrunner/src/lib.rs
@@ -1,9 +1,13 @@
 #![forbid(unsafe_code)]
+/* 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/. */
+
 
 #[macro_use]
 extern crate log;
 #[cfg(target_os = "macos")]
 extern crate dirs;
 extern crate mozprofile;
 #[cfg(target_os = "macos")]
 extern crate plist;
--- a/testing/mozbase/rust/mozrunner/src/path.rs
+++ b/testing/mozbase/rust/mozrunner/src/path.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 //! Provides utilities for searching the system path.
 
 use std::env;
 use std::path::PathBuf;
 
 #[cfg(unix)]
 fn is_executable(path: &PathBuf) -> bool {
     use std::fs;
--- a/testing/mozbase/rust/mozrunner/src/runner.rs
+++ b/testing/mozbase/rust/mozrunner/src/runner.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use mozprofile::prefreader::PrefReaderError;
 use mozprofile::profile::Profile;
 use std::collections::HashMap;
 use std::convert::From;
 use std::error::Error;
 use std::ffi::{OsStr, OsString};
 use std::fmt;
 use std::io;
--- a/testing/mozbase/rust/mozversion/src/lib.rs
+++ b/testing/mozbase/rust/mozversion/src/lib.rs
@@ -1,9 +1,13 @@
 #![forbid(unsafe_code)]
+/* 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/. */
+
 
 extern crate ini;
 extern crate regex;
 extern crate semver;
 
 use crate::platform::ini_path;
 use ini::Ini;
 use regex::Regex;
--- a/testing/mozharness/configs/android/android_common.py
+++ b/testing/mozharness/configs/android/android_common.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # Shared/common mozharness configuration for Android unit tests.
 #
 # This configuration should be combined with platform-specific mozharness
 # configuration such as androidx86_7_0.py, android_hw, or similar.
 
 import os
 
 
--- a/testing/mozharness/configs/android/android_hw.py
+++ b/testing/mozharness/configs/android/android_hw.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # mozharness configuration for Android hardware unit tests
 #
 # This configuration should be combined with suite definitions and other
 # mozharness configuration from android_common.py, or similar.
 
 config = {
     "exes": {},
     "env": {
--- a/testing/mozharness/configs/android/android_pgo.py
+++ b/testing/mozharness/configs/android/android_pgo.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # Mozharness configuration for Android PGO.
 #
 # This configuration should be combined with platform-specific mozharness
 # configuration such as androidarm_4_3.py, or similar.
 
 config = {
     "default_actions": [
         "setup-avds",
--- a/testing/mozharness/configs/android/androidarm_4_3.py
+++ b/testing/mozharness/configs/android/androidarm_4_3.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # mozharness configuration for Android 4.3 unit tests
 #
 # This configuration should be combined with suite definitions and other
 # mozharness configuration from android_common.py, or similar.
 
 config = {
     "deprecated_sdk_path": True,
     "tooltool_manifest_path": "testing/config/tooltool-manifests/androidarm_4_3/releng.manifest",
--- a/testing/mozharness/configs/android/androidx86_7_0.py
+++ b/testing/mozharness/configs/android/androidx86_7_0.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # mozharness configuration for Android x86/x86_64 7.0 unit tests
 #
 # This configuration should be combined with suite definitions and other
 # mozharness configuration from android_common.py, or similar.
 
 config = {
     "tooltool_manifest_path": "testing/config/tooltool-manifests/androidx86_7_0/releng.manifest",
     "emulator_avd_name": "test-1",
--- a/testing/mozharness/configs/android/wrench.py
+++ b/testing/mozharness/configs/android/wrench.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # mozharness configuration for Android x86 7.0 wrench tests
 #
 # This configuration should be combined with suite definitions and other
 # mozharness configuration from android_common.py, or similar.
 
 config = {
     "tooltool_manifest_path": "testing/config/tooltool-manifests/androidx86_7_0/releng.manifest",
     "emulator_avd_name": "test-1",
--- a/testing/mozharness/configs/awsy/linux_config.py
+++ b/testing/mozharness/configs/awsy/linux_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 PYTHON = "/usr/bin/env python"
 VENV_PATH = "%s/build/venv" % os.getcwd()
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 BINARY_PATH = os.path.join(ABS_WORK_DIR, "application", "firefox", "firefox-bin")
 INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.tar.bz2")
 
--- a/testing/mozharness/configs/awsy/macosx_config.py
+++ b/testing/mozharness/configs/awsy/macosx_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 PYTHON = "/usr/bin/env python"
 VENV_PATH = "%s/build/venv" % os.getcwd()
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.dmg")
 
 config = {
--- a/testing/mozharness/configs/awsy/taskcluster_windows_config.py
+++ b/testing/mozharness/configs/awsy/taskcluster_windows_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import sys
 import mozharness
 
 external_tools_path = os.path.join(
     os.path.abspath(os.path.dirname(os.path.dirname(mozharness.__file__))),
     "external_tools",
 )
--- a/testing/mozharness/configs/balrog/production.py
+++ b/testing/mozharness/configs/balrog/production.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "balrog_servers": [
         {
             "balrog_api_root": "https://aus4-admin.mozilla.org/api",
             "ignore_failures": False,
             "url_replacements": [
                 (
                     "http://archive.mozilla.org/pub",
--- a/testing/mozharness/configs/balrog/staging.py
+++ b/testing/mozharness/configs/balrog/staging.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "balrog_servers": [
         {
             "balrog_api_root": "https://balrog-admin.stage.mozaws.net/api",
             "ignore_failures": False,
             "balrog_usernames": {
                 "firefox": "balrog-stage-ffxbld",
                 "thunderbird": "balrog-stage-tbirdbld",
--- a/testing/mozharness/configs/builds/build_pool_specifics.py
+++ b/testing/mozharness/configs/builds/build_pool_specifics.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # this is a dict of pool specific keys/values. As this fills up and more
 # fx build factories are ported, we might deal with this differently
 
 config = {
     "taskcluster": {
         "upload_env": {
             "UPLOAD_PATH": "/builds/worker/artifacts",
         },
--- a/testing/mozharness/configs/builds/releng_base_android_64_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_android_64_builds.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     #########################################################################
     ######## ANDROID GENERIC CONFIG KEYS/VAlUES
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     "default_actions": [
         "build",
--- a/testing/mozharness/configs/builds/releng_base_firefox.py
+++ b/testing/mozharness/configs/builds/releng_base_firefox.py
@@ -1,3 +1,7 @@
+# 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/.
+
 config = {
     "app_name": "browser",
 }
--- a/testing/mozharness/configs/builds/releng_base_linux_32_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_linux_32_builds.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     #########################################################################
     ######## LINUX GENERIC CONFIG KEYS/VAlUES
     # if you are updating this with custom 32 bit keys/values please add them
     # below under the '32 bit specific' code block otherwise, update in this
     # code block and also make sure this is synced with
--- a/testing/mozharness/configs/builds/releng_base_linux_64_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_linux_64_builds.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     #########################################################################
     ######## LINUX GENERIC CONFIG KEYS/VAlUES
     # if you are updating this with custom 64 bit keys/values please add them
     # below under the '64 bit specific' code block otherwise, update in this
     # code block and also make sure this is synced with
--- a/testing/mozharness/configs/builds/releng_base_mac_64_cross_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_mac_64_cross_builds.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     #########################################################################
     ######## MACOSX CROSS GENERIC CONFIG KEYS/VAlUES
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     "default_actions": [
         "build",
--- a/testing/mozharness/configs/builds/releng_base_windows_32_mingw_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_windows_32_mingw_builds.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     #########################################################################
     ######## LINUX GENERIC CONFIG KEYS/VAlUES
     # if you are updating this with custom 32 bit keys/values please add them
     # below under the '32 bit specific' code block otherwise, update in this
     # code block and also make sure this is synced with
--- a/testing/mozharness/configs/builds/releng_base_windows_64_mingw_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_windows_64_mingw_builds.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     #########################################################################
     ######## LINUX GENERIC CONFIG KEYS/VAlUES
     # if you are updating this with custom 32 bit keys/values please add them
     # below under the '32 bit specific' code block otherwise, update in this
     # code block and also make sure this is synced with
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "android-aarch64",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-aarch64/nightly",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64_beta.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64_beta.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "android-aarch64",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-aarch64/beta",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64_beta_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64_beta_debug.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "stage_platform": "android-aarch64-debug",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-aarch64/debug-beta",
     "debug_build": True,
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64_debug.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "stage_platform": "android-aarch64-debug",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-aarch64/debug",
     "debug_build": True,
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "android-api-16",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-api-16/nightly",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_beta.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_beta.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "android-api-16",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-api-16/beta",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_beta_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_beta_debug.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "stage_platform": "android-api-16-debug",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-api-16/debug-beta",
     "debug_build": True,
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_debug.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "stage_platform": "android-api-16-debug",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-api-16/debug",
     "debug_build": True,
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_debug_ccov.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_debug_ccov.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "stage_platform": "android-api-16-debug-ccov",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-api-16/debug-ccov",
     "debug_build": True,
     "postflight_build_mach_commands": [
         [
             "android",
             "archive-coverage-artifacts",
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_debug_searchfox.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_debug_searchfox.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "stage_platform": "android-api-16-debug",
     "env": {
         "SCCACHE_DISABLE": "1",
     },
     "src_mozconfig": "mobile/android/config/mozconfigs/android-api-16/debug-searchfox",
     "debug_build": True,
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_gradle_dependencies.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_gradle_dependencies.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "stage_platform": "android-api-16-gradle-dependencies",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-api-16-gradle-dependencies/nightly",
     # gradle-dependencies doesn't produce a package. So don't collect package metrics.
     "postflight_build_mach_commands": [
         [
             "android",
             "gradle-dependencies",
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_partner_sample1.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_partner_sample1.py
@@ -1,6 +1,10 @@
+# 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/.
+
 config = {
     "stage_platform": "android-api-16-partner-sample1",
     "src_mozconfig": None,  # use manifest to determine mozconfig src
     "src_mozconfig_manifest": "partner/mozconfigs/mozconfig1.json",
     "tooltool_manifest_src": "mobile/android/config/tooltool-manifests/android/releng.manifest",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_profile_generate.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_profile_generate.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "android-api-16",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-api-16/profile-generate",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_geckoview_docs.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_geckoview_docs.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "stage_platform": "android-geckoview-docs",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-api-16/nightly-android-lints",
     # geckoview-docs doesn't produce a package. So don't collect package metrics.
     "disable_package_metrics": True,
     "postflight_build_mach_commands": [
         [
             "android",
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "android-x86",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-x86/nightly",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "android-x86_64",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-x86_64/nightly",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_beta.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_beta.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "android-x86_64",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-x86_64/beta",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_beta_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_beta_debug.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "stage_platform": "android-x86_64-debug",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-x86_64/debug-beta",
     "debug_build": True,
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_debug.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "stage_platform": "android-x86_64-debug",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-x86_64/debug",
     "debug_build": True,
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_fuzzing_asan.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_64_fuzzing_asan.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "android-x86_64-asan-fuzzing",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-x86_64/nightly-fuzzing-asan",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_beta.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_beta.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "android-x86",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-x86/beta",
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_beta_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_beta_debug.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "stage_platform": "android-x86-debug",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-x86/debug-beta",
     "debug_build": True,
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_debug.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "stage_platform": "android-x86-debug",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-x86/debug",
     "debug_build": True,
 }
--- a/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_fuzzing_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_fuzzing_debug.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "stage_platform": "android-x86-fuzzing-debug",
     "src_mozconfig": "mobile/android/config/mozconfigs/android-x86/debug-fuzzing",
     "debug_build": True,
 }
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/32_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/32_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "debug_build": True,
     "stage_platform": "linux-debug",
     #### 32 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/32_rusttests.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/32_rusttests.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux-rusttests",
     #### 32 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "DISPLAY": ":2",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/32_rusttests_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/32_rusttests_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "debug_build": True,
     "stage_platform": "linux-rusttests-debug",
     #### 32 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_add-on-devel.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-add-on-devel",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "HG_SHARE_BASE_DIR": "/builds/hg-shared",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
     ],
     "stage_platform": "linux64-asan",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_and_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
     ],
     "stage_platform": "linux64-asan-debug",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_reporter_tc.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_reporter_tc.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-asan-reporter",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "MOZ_AUTOMATION": "1",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-asan",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "DISPLAY": ":2",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc_and_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-asan-debug",
     "debug_build": True,
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-ccov",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "DISPLAY": ":2",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage_opt.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage_opt.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-ccov",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "DISPLAY": ":2",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-debug",
     "debug_build": True,
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_asan_tc.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_asan_tc.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-fuzzing-asan",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "MOZ_AUTOMATION": "1",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-fuzzing-debug",
     "debug_build": True,
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_tsan_tc.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_tsan_tc.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-fuzzing-tsan",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "DISPLAY": ":2",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_noopt_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_noopt_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-noopt-debug",
     "debug_build": True,
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "DISPLAY": ":2",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_rusttests.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_rusttests.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-rusttests",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "DISPLAY": ":2",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_rusttests_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_rusttests_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-rusttests-debug",
     "debug_build": True,
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "DISPLAY": ":2",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_searchfox_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_searchfox_and_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     "default_actions": [
         "clobber",
         "build",
     ],
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_source.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_source.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "default_actions": ["package-source"],
     "stage_platform": "source",  # Not used, but required by the script
     "env": {
         "HG_SHARE_BASE_DIR": "/builds/hg-shared",
         "TINDERBOX_OUTPUT": "1",
         "LC_ALL": "C",
         "MOZ_OBJDIR": "%(abs_obj_dir)s",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_stat_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_stat_and_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     "default_actions": [
         "clobber",
         "build",
     ],
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_tsan_tc.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_tsan_tc.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "linux64-tsan",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "DISPLAY": ":2",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_valgrind.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_valgrind.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
         "valgrind-test",
     ],
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_add-on-devel.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "macosx64-add-on-devel",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "HG_SHARE_BASE_DIR": "/builds/hg-shared",
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_code_coverage_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_code_coverage_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "macosx64-ccov-debug",
     "debug_build": True,
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_code_coverage_opt.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_code_coverage_opt.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "macosx64-ccov-opt",
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
         "HG_SHARE_BASE_DIR": "/builds/hg-shared",
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "macosx64-debug",
     "debug_build": True,
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug_searchfox.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug_searchfox.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
     ],
     "stage_platform": "macosx64-searchfox-debug",
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_fuzzing_asan.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_fuzzing_asan.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "macosx64-fuzzing-asan",
     "publish_nightly_en_US_routes": False,
     "platform_supports_post_upload_to_latest": False,
     #### 64 bit build specific #####
     "env": {
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_fuzzing_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_fuzzing_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "macosx64-fuzzing-debug",
     "debug_build": True,
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_noopt_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_noopt_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "stage_platform": "macosx64-noopt-debug",
     "debug_build": True,
     #### 64 bit build specific #####
     "env": {
         "MOZBUILD_STATE_PATH": os.path.join(os.getcwd(), ".mozbuild"),
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
     ],
     "stage_platform": "macosx64-debug",
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_stat_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_stat_and_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
     ],
     "debug_build": True,
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_add-on-devel.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
     ],
     "stage_platform": "win32-add-on-devel",
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
     ],
     "stage_platform": "win32-debug",
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_mingwclang.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_mingwclang.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "platform": "win32-mingwclang",
     "stage_platform": "win32-mingwclang",
     "mozconfig_platform": "win32",
 }
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_stat_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_stat_and_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
     ],
     "stage_platform": "win32-st-an-debug",
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/64_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/64_add-on-devel.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
     ],
     "stage_platform": "win64-add-on-devel",
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/64_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "clobber",
         "build",
     ],
     "stage_platform": "win64-debug",
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/64_mingwclang.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/64_mingwclang.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "platform": "win64-mingwclang",
     "stage_platform": "win64-mingwclang",
     "mozconfig_platform": "win64",
 }
--- a/testing/mozharness/configs/builds/taskcluster_base_macosx.py
+++ b/testing/mozharness/configs/builds/taskcluster_base_macosx.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "get-secrets",
         "build",
     ],
     "vcs_share_base": os.path.join(os.getcwd(), "checkouts", "hg-shared"),
--- a/testing/mozharness/configs/builds/taskcluster_base_win32.py
+++ b/testing/mozharness/configs/builds/taskcluster_base_win32.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "platform": "win32",
     "mozconfig_platform": "win32",
 }
--- a/testing/mozharness/configs/builds/taskcluster_base_win64.py
+++ b/testing/mozharness/configs/builds/taskcluster_base_win64.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "platform": "win64",
     "mozconfig_platform": "win64",
 }
--- a/testing/mozharness/configs/builds/taskcluster_base_windows.py
+++ b/testing/mozharness/configs/builds/taskcluster_base_windows.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "default_actions": [
         "get-secrets",
         "build",
     ],
     "vcs_share_base": os.path.join("y:", os.sep, "hg-shared"),
--- a/testing/mozharness/configs/builds/taskcluster_sub_win32/debug.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win32/debug.py
@@ -1,7 +1,11 @@
+# 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/.
+
 config = {
     "stage_platform": "win32-debug",
     "debug_build": True,
     "env": {
         "XPCOM_DEBUG_BREAK": "stack-and-abort",
     },
 }
--- a/testing/mozharness/configs/builds/taskcluster_sub_win32/noopt_debug.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win32/noopt_debug.py
@@ -1,7 +1,11 @@
+# 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/.
+
 config = {
     "stage_platform": "win32-noopt-debug",
     "debug_build": True,
     "env": {
         "XPCOM_DEBUG_BREAK": "stack-and-abort",
     },
 }
--- a/testing/mozharness/configs/builds/taskcluster_sub_win64/asan_debug.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win64/asan_debug.py
@@ -1,7 +1,11 @@
+# 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/.
+
 config = {
     "stage_platform": "win64-asan-debug",
     "debug_build": True,
     "env": {
         "XPCOM_DEBUG_BREAK": "stack-and-abort",
     },
 }
--- a/testing/mozharness/configs/builds/taskcluster_sub_win64/asan_reporter_opt.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win64/asan_reporter_opt.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "stage_platform": "win64-asan-reporter",
     "mozconfig_variant": "nightly-asan-reporter",
 }
--- a/testing/mozharness/configs/builds/taskcluster_sub_win64/ccov_opt.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win64/ccov_opt.py
@@ -1,6 +1,10 @@
+# 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/.
+
 config = {
     "stage_platform": "win64-ccov",
     "env": {
         "XPCOM_DEBUG_BREAK": "stack-and-abort",
     },
 }
--- a/testing/mozharness/configs/builds/taskcluster_sub_win64/debug.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win64/debug.py
@@ -1,7 +1,11 @@
+# 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/.
+
 config = {
     "stage_platform": "win64-debug",
     "debug_build": True,
     "env": {
         "XPCOM_DEBUG_BREAK": "stack-and-abort",
     },
 }
--- a/testing/mozharness/configs/builds/taskcluster_sub_win64/noopt_debug.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win64/noopt_debug.py
@@ -1,7 +1,11 @@
+# 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/.
+
 config = {
     "stage_platform": "win64-noopt-debug",
     "debug_build": True,
     "env": {
         "XPCOM_DEBUG_BREAK": "stack-and-abort",
     },
 }
--- a/testing/mozharness/configs/builds/taskcluster_sub_win64/plain_opt.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win64/plain_opt.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "default_actions": [
         "build",
     ],
     "disable_package_metrics": True,
     "mozconfig_variant": "plain-opt",
     "stage_platform": "win64",
 }
--- a/testing/mozharness/configs/builds/taskcluster_sub_win64/rusttests_opt.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win64/rusttests_opt.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "default_actions": [
         "build",
     ],
     "stage_platform": "win64-rusttests",
     "env": {
         "XPCOM_DEBUG_BREAK": "stack-and-abort",
     },
--- a/testing/mozharness/configs/builds/taskcluster_sub_win64/searchfox_debug.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win64/searchfox_debug.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "stage_platform": "win64-st-an-debug",
     "debug_build": True,
     "env": {
         "XPCOM_DEBUG_BREAK": "stack-and-abort",
         # Disable sccache because otherwise we won't index the files that
         # sccache optimizes away compilation for
         "SCCACHE_DISABLE": "1",
--- a/testing/mozharness/configs/developer_config.py
+++ b/testing/mozharness/configs/developer_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 """
 This config file can be appended to any other mozharness job
 running under treeherder. The purpose of this config is to
 override values that are specific to Release Engineering machines
 that can reach specific hosts within their network.
 In other words, this config allows you to run any job
 outside of the Release Engineering network
 
--- a/testing/mozharness/configs/firefox_ui_tests/qa_jenkins.py
+++ b/testing/mozharness/configs/firefox_ui_tests/qa_jenkins.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # Default configuration as used by Mozmill CI (Jenkins)
 
 
 config = {
     # Tests run in mozmill-ci do not use RelEng infra
     "developer_mode": True,
     # mozcrash support
     "download_symbols": "ondemand",
--- a/testing/mozharness/configs/firefox_ui_tests/releng_release.py
+++ b/testing/mozharness/configs/firefox_ui_tests/releng_release.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # Default configuration as used by Release Engineering for testing release/beta builds
 
 import os
 import sys
 
 import mozharness
 
 
--- a/testing/mozharness/configs/firefox_ui_tests/taskcluster.py
+++ b/testing/mozharness/configs/firefox_ui_tests/taskcluster.py
@@ -1,7 +1,11 @@
+# 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/.
+
 # Config file for firefox ui tests run via TaskCluster.
 
 
 config = {
     "vcs_share_base": "/builds/hg-shared",
     "tooltool_cache": "/builds/worker/tooltool-cache",
 }
--- a/testing/mozharness/configs/firefox_ui_tests/taskcluster_mac.py
+++ b/testing/mozharness/configs/firefox_ui_tests/taskcluster_mac.py
@@ -1,4 +1,8 @@
+# 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/.
+
 # Configuration over-rides for taskcluter.py, for osx
 config = {
     "tooltool_cache": "/builds/tooltool_cache",
 }
--- a/testing/mozharness/configs/firefox_ui_tests/taskcluster_windows.py
+++ b/testing/mozharness/configs/firefox_ui_tests/taskcluster_windows.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # Config file for firefox ui tests run via TaskCluster.
 
 import os
 import sys
 
 
 config = {
     "virtualenv_path": "venv",
--- a/testing/mozharness/configs/l10n_bumper/jamun.py
+++ b/testing/mozharness/configs/l10n_bumper/jamun.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import sys
 
 MULTI_REPO = "projects/jamun"
 EXES = {}
 if sys.platform.startswith("linux"):
     EXES = {
         # Get around the https warnings
         "hg": [
--- a/testing/mozharness/configs/l10n_bumper/mozilla-beta.py
+++ b/testing/mozharness/configs/l10n_bumper/mozilla-beta.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import sys
 
 MULTI_REPO = "releases/mozilla-beta"
 EXES = {}
 if sys.platform.startswith("linux"):
     EXES = {
         # Get around the https warnings
         "hg": [
--- a/testing/mozharness/configs/l10n_bumper/mozilla-central.py
+++ b/testing/mozharness/configs/l10n_bumper/mozilla-central.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import sys
 
 MULTI_REPO = "mozilla-central"
 EXES = {}
 if sys.platform.startswith("linux"):
     EXES = {
         # Get around the https warnings
         "hg": [
--- a/testing/mozharness/configs/l10n_bumper/mozilla-esr68.py
+++ b/testing/mozharness/configs/l10n_bumper/mozilla-esr68.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import sys
 
 MULTI_REPO = "releases/mozilla-esr68"
 EXES = {}
 if sys.platform.startswith("linux"):
     EXES = {
         # Get around the https warnings
         "hg": [
--- a/testing/mozharness/configs/marionette/mac_taskcluster_config.py
+++ b/testing/mozharness/configs/marionette/mac_taskcluster_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # Configuration over-rides for prod_config.py, for osx
 
 # OS Specifics
 DISABLE_SCREEN_SAVER = False
 ADJUST_MOUSE_AND_SCREEN = False
 
 #####
 config = {
--- a/testing/mozharness/configs/marionette/prod_config.py
+++ b/testing/mozharness/configs/marionette/prod_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # This is a template config file for marionette production.
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 # OS Specifics
 DISABLE_SCREEN_SAVER = True
 ADJUST_MOUSE_AND_SCREEN = False
 
 #####
--- a/testing/mozharness/configs/marionette/windows_config.py
+++ b/testing/mozharness/configs/marionette/windows_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # This is a template config file for marionette production on Windows.
 config = {
     # marionette options
     "marionette_address": "localhost:2828",
     "test_manifest": "unit-tests.ini",
     "virtualenv_path": "venv",
     "exes": {
         "python": "c:/mozilla-build/python27/python",
--- a/testing/mozharness/configs/marionette/windows_taskcluster_config.py
+++ b/testing/mozharness/configs/marionette/windows_taskcluster_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # This is a template config file for marionette production on Windows.
 import os
 import platform
 import sys
 
 # OS Specifics
 DISABLE_SCREEN_SAVER = False
 ADJUST_MOUSE_AND_SCREEN = True
--- a/testing/mozharness/configs/merge_day/beta_to_release.py
+++ b/testing/mozharness/configs/merge_day/beta_to_release.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 
 config = {
     "log_name": "beta_to_release",
     "copy_files": [
         {
--- a/testing/mozharness/configs/merge_day/bump_central.py
+++ b/testing/mozharness/configs/merge_day/bump_central.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 
 config = {
     "log_name": "bump_central",
     "version_files": [
         {"file": "browser/config/version.txt", "suffix": ""},
--- a/testing/mozharness/configs/merge_day/bump_esr.py
+++ b/testing/mozharness/configs/merge_day/bump_esr.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 config = {
     "vcs_share_base": os.path.join(ABS_WORK_DIR, "hg-shared"),
     "log_name": "bump_esr",
     "version_files": [
         {"file": "browser/config/version.txt", "suffix": ""},
--- a/testing/mozharness/configs/merge_day/central_to_beta.py
+++ b/testing/mozharness/configs/merge_day/central_to_beta.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 
 config = {
     "log_name": "central_to_beta",
     "version_files": [
         {"file": "browser/config/version.txt", "suffix": ""},
--- a/testing/mozharness/configs/merge_day/early_to_late_beta.py
+++ b/testing/mozharness/configs/merge_day/early_to_late_beta.py
@@ -1,7 +1,11 @@
+# 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/.
+
 # This config is for `mach try release` to support beta simulations.
 
 config = {
     "replacements": [
         ("build/defines.sh", "EARLY_BETA_OR_EARLIER=1", "EARLY_BETA_OR_EARLIER="),
     ],
 }
--- a/testing/mozharness/configs/merge_day/release_to_esr.py
+++ b/testing/mozharness/configs/merge_day/release_to_esr.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 NEW_ESR_REPO = "https://hg.mozilla.org/releases/mozilla-esr68"
 
 config = {
     "log_name": "relese_to_esr",
     "version_files": [
--- a/testing/mozharness/configs/merge_day/staging_beta_migration.py
+++ b/testing/mozharness/configs/merge_day/staging_beta_migration.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # Use this script in conjunction with aurora_to_beta.py.
 # mozharness/scripts/merge_day/gecko_migration.py -c \
 #   mozharness/configs/merge_day/aurora_to_beta.py -c
 #   mozharness/configs/merge_day/staging_beta_migration.py ...
 import os
 
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 
--- a/testing/mozharness/configs/openh264/linux32.py
+++ b/testing/mozharness/configs/openh264/linux32.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 import mozharness
 
 external_tools_path = os.path.join(
     os.path.abspath(os.path.dirname(os.path.dirname(mozharness.__file__))),
     "external_tools",
 )
--- a/testing/mozharness/configs/openh264/linux64.py
+++ b/testing/mozharness/configs/openh264/linux64.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 import mozharness
 
 external_tools_path = os.path.join(
     os.path.abspath(os.path.dirname(os.path.dirname(mozharness.__file__))),
     "external_tools",
 )
--- a/testing/mozharness/configs/openh264/macosx64.py
+++ b/testing/mozharness/configs/openh264/macosx64.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 import mozharness
 
 external_tools_path = os.path.join(
     os.path.abspath(os.path.dirname(os.path.dirname(mozharness.__file__))),
     "external_tools",
 )
--- a/testing/mozharness/configs/openh264/win32.py
+++ b/testing/mozharness/configs/openh264/win32.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import sys
 import os
 
 import mozharness
 
 external_tools_path = os.path.join(
     os.path.abspath(os.path.dirname(os.path.dirname(mozharness.__file__))),
     "external_tools",
--- a/testing/mozharness/configs/openh264/win64-aarch64.py
+++ b/testing/mozharness/configs/openh264/win64-aarch64.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import sys
 import os
 
 import mozharness
 
 external_tools_path = os.path.join(
     os.path.abspath(os.path.dirname(os.path.dirname(mozharness.__file__))),
     "external_tools",
--- a/testing/mozharness/configs/openh264/win64.py
+++ b/testing/mozharness/configs/openh264/win64.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import sys
 import os
 
 import mozharness
 
 external_tools_path = os.path.join(
     os.path.abspath(os.path.dirname(os.path.dirname(mozharness.__file__))),
     "external_tools",
--- a/testing/mozharness/configs/partner_repacks/release_mozilla-release_desktop.py
+++ b/testing/mozharness/configs/partner_repacks/release_mozilla-release_desktop.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "appName": "Firefox",
     "log_name": "partner_repack",
     "repack_manifests_url": "git@github.com:mozilla-partners/repack-manifests.git",
     "repo_file": "https://raw.githubusercontent.com/mozilla/git-repo/master/repo",
     "secret_files": [
         {
             "filename": "/builds/partner-github-ssh",
--- a/testing/mozharness/configs/partner_repacks/release_mozilla-release_desktop_EME-free.py
+++ b/testing/mozharness/configs/partner_repacks/release_mozilla-release_desktop_EME-free.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "appName": "Firefox",
     "log_name": "partner_repack",
     "repack_manifests_url": "git@github.com:mozilla-partners/mozilla-EME-free-manifest.git",
     "repo_file": "https://raw.githubusercontent.com/mozilla/git-repo/master/repo",
     "secret_files": [
         {
             "filename": "/builds/partner-github-ssh",
--- a/testing/mozharness/configs/partner_repacks/staging_release_mozilla-release_desktop.py
+++ b/testing/mozharness/configs/partner_repacks/staging_release_mozilla-release_desktop.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "appName": "Firefox",
     "log_name": "partner_repack",
     "repack_manifests_url": "git@github.com:mozilla-partners/repack-manifests.git",
     "repo_file": "https://raw.githubusercontent.com/mozilla/git-repo/master/repo",
     "secret_files": [
         {
             "filename": "/builds/partner-github-ssh",
--- a/testing/mozharness/configs/raptor/android_hw_config.py
+++ b/testing/mozharness/configs/raptor/android_hw_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "log_name": "raptor",
     "title": os.uname()[1].lower().split(".")[0],
     "default_actions": [
         "clobber",
         "download-and-extract",
--- a/testing/mozharness/configs/raptor/linux64_config_taskcluster.py
+++ b/testing/mozharness/configs/raptor/linux64_config_taskcluster.py
@@ -1,28 +1,32 @@
-import os
-import sys
-
-PYTHON = sys.executable
-VENV_PATH = "%s/build/venv" % os.getcwd()
-
-exes = {
-    "python": PYTHON,
-}
-ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
-INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.tar.bz2")
-
-config = {
-    "log_name": "raptor",
-    "installer_path": INSTALLER_PATH,
-    "virtualenv_path": VENV_PATH,
-    "exes": exes,
-    "title": os.uname()[1].lower().split(".")[0],
-    "default_actions": [
-        "clobber",
-        "download-and-extract",
-        "populate-webroot",
-        "create-virtualenv",
-        "install",
-        "run-tests",
-    ],
-    "tooltool_cache": "/builds/worker/tooltool-cache",
-}
+# 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/.
+
+import os
+import sys
+
+PYTHON = sys.executable
+VENV_PATH = "%s/build/venv" % os.getcwd()
+
+exes = {
+    "python": PYTHON,
+}
+ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
+INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.tar.bz2")
+
+config = {
+    "log_name": "raptor",
+    "installer_path": INSTALLER_PATH,
+    "virtualenv_path": VENV_PATH,
+    "exes": exes,
+    "title": os.uname()[1].lower().split(".")[0],
+    "default_actions": [
+        "clobber",
+        "download-and-extract",
+        "populate-webroot",
+        "create-virtualenv",
+        "install",
+        "run-tests",
+    ],
+    "tooltool_cache": "/builds/worker/tooltool-cache",
+}
--- a/testing/mozharness/configs/raptor/linux_config.py
+++ b/testing/mozharness/configs/raptor/linux_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 VENV_PATH = "%s/build/venv" % os.getcwd()
 
 config = {
     "log_name": "raptor",
     "installer_path": "installer.exe",
     "virtualenv_path": VENV_PATH,
--- a/testing/mozharness/configs/raptor/mac_config.py
+++ b/testing/mozharness/configs/raptor/mac_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 VENV_PATH = "%s/build/venv" % os.getcwd()
 
 config = {
     "log_name": "raptor",
     "installer_path": "installer.exe",
     "virtualenv_path": VENV_PATH,
--- a/testing/mozharness/configs/raptor/windows_config.py
+++ b/testing/mozharness/configs/raptor/windows_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import socket
 import sys
 
 PYTHON = sys.executable
 PYTHON_DLL = "c:/mozilla-build/python27/python27.dll"
 VENV_PATH = os.path.join(os.getcwd(), "build/venv")
 
--- a/testing/mozharness/configs/raptor/windows_vm_config.py
+++ b/testing/mozharness/configs/raptor/windows_vm_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import socket
 import sys
 
 PYTHON = sys.executable
 PYTHON_DLL = "c:/mozilla-build/python27/python27.dll"
 VENV_PATH = os.path.join(os.getcwd(), "build/venv")
 
--- a/testing/mozharness/configs/releases/bouncer_firefox_beta.py
+++ b/testing/mozharness/configs/releases/bouncer_firefox_beta.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # lint_ignore=E501
 config = {
     "products": {
         # for installers, stubs, msi (ie not updates) ...
         # products containing "latest" are for www.mozilla.org via cron-bouncer-check
         # products using versions are for release automation via release-bouncer-check-firefox
         "installer": {
             "product-name": "Firefox-%(version)s",
--- a/testing/mozharness/configs/releases/bouncer_firefox_devedition.py
+++ b/testing/mozharness/configs/releases/bouncer_firefox_devedition.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # lint_ignore=E501
 config = {
     "products": {
         # for installers, stubs, msi (ie not updates) ...
         # products containing "latest" are for www.mozilla.org via cron-bouncer-check
         # products using versions are for release automation via release-bouncer-check-firefox
         "installer": {
             "product-name": "Devedition-%(version)s",
--- a/testing/mozharness/configs/releases/bouncer_firefox_esr.py
+++ b/testing/mozharness/configs/releases/bouncer_firefox_esr.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # lint_ignore=E501
 config = {
     "products": {
         # for installers, stubs, msi (ie not updates) ...
         # products containing "latest" are for www.mozilla.org via cron-bouncer-check
         # products using versions are for release automation via release-bouncer-check-firefox
         "installer": {
             "product-name": "Firefox-%(version)s",
--- a/testing/mozharness/configs/releases/bouncer_firefox_nightly.py
+++ b/testing/mozharness/configs/releases/bouncer_firefox_nightly.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # lint_ignore=E501
 config = {
     "products": {
         "installer-latest": {
             "product-name": "Firefox-nightly-latest",
             "check_uptake": True,
             "platforms": [
                 "linux",
--- a/testing/mozharness/configs/releases/bouncer_firefox_release.py
+++ b/testing/mozharness/configs/releases/bouncer_firefox_release.py
@@ -1,8 +1,12 @@
+# 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/.
+
 # lint_ignore=E501
 config = {
     "products": {
         # for installers, stubs, msi (ie not updates) ...
         # products containing "latest" are for www.mozilla.org via cron-bouncer-check
         # products using versions are for release automation via release-bouncer-check-firefox
         "installer": {
             "product-name": "Firefox-%(version)s",
--- a/testing/mozharness/configs/releases/dev_postrelease_fennec_beta.py
+++ b/testing/mozharness/configs/releases/dev_postrelease_fennec_beta.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     # maple is used for staging mozilla-beta
     "log_name": "bump_maple",
     "version_files": [{"file": "browser/config/version_display.txt"}],
     "repo": {
         # maple is used for staging mozilla-beta
         "repo": "https://hg.mozilla.org/projects/maple",
         "branch": "default",
--- a/testing/mozharness/configs/releases/dev_postrelease_fennec_release.py
+++ b/testing/mozharness/configs/releases/dev_postrelease_fennec_release.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "log_name": "bump_release_dev",
     "version_files": [
         {"file": "browser/config/version.txt"},
         {"file": "browser/config/version_display.txt"},
         {"file": "config/milestone.txt"},
     ],
     "repo": {
--- a/testing/mozharness/configs/releases/dev_postrelease_firefox_beta.py
+++ b/testing/mozharness/configs/releases/dev_postrelease_firefox_beta.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     # date is used for staging mozilla-beta
     "log_name": "bump_date",
     "version_files": [{"file": "browser/config/version_display.txt"}],
     "repo": {
         # maple is used for staging mozilla-beta
         "repo": "https://hg.mozilla.org/projects/jamun",
         "branch": "default",
--- a/testing/mozharness/configs/releases/dev_postrelease_firefox_release.py
+++ b/testing/mozharness/configs/releases/dev_postrelease_firefox_release.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "log_name": "bump_release_dev",
     "version_files": [
         {"file": "browser/config/version.txt"},
         {"file": "browser/config/version_display.txt"},
         {"file": "config/milestone.txt"},
     ],
     "repo": {
--- a/testing/mozharness/configs/releases/dev_postrelease_firefox_release_birch.py
+++ b/testing/mozharness/configs/releases/dev_postrelease_firefox_release_birch.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "log_name": "bump_release_dev",
     "version_files": [
         {"file": "browser/config/version.txt"},
         {"file": "browser/config/version_display.txt"},
         {"file": "config/milestone.txt"},
     ],
     "repo": {
--- a/testing/mozharness/configs/releases/dev_updates_firefox_beta.py
+++ b/testing/mozharness/configs/releases/dev_updates_firefox_beta.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "log_name": "bump_beta_dev",
     # TODO: use real repo
     "repo": {
         "repo": "https://hg.mozilla.org/users/stage-ffxbld/tools",
         "branch": "default",
         "dest": "tools",
         "vcs": "hg",
--- a/testing/mozharness/configs/releases/dev_updates_firefox_devedition.py
+++ b/testing/mozharness/configs/releases/dev_updates_firefox_devedition.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "log_name": "updates_devedition",
     # TODO: use real repo
     "repo": {
         "repo": "https://hg.mozilla.org/users/asasaki_mozilla.com/tools",
         "branch": "default",
         "dest": "tools",
         "vcs": "hg",
--- a/testing/mozharness/configs/releases/dev_updates_firefox_release.py
+++ b/testing/mozharness/configs/releases/dev_updates_firefox_release.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "log_name": "updates_release_dev",
     # TODO: use real repo
     "repo": {
         "repo": "https://hg.mozilla.org/users/stage-ffxbld/tools",
         "branch": "default",
         "dest": "tools",
         "vcs": "hg",
--- a/testing/mozharness/configs/releases/dev_updates_firefox_release_birch.py
+++ b/testing/mozharness/configs/releases/dev_updates_firefox_release_birch.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "log_name": "updates_release_dev",
     # TODO: use real repo
     "repo": {
         "repo": "https://hg.mozilla.org/users/bhearsum_mozilla.com/tools",
         "branch": "default",
         "dest": "tools",
         "vcs": "hg",
--- a/testing/mozharness/configs/releases/updates_firefox_beta.py
+++ b/testing/mozharness/configs/releases/updates_firefox_beta.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "log_name": "updates_beta",
     "repo": {
         "repo": "https://hg.mozilla.org/build/tools",
         "branch": "default",
         "dest": "tools",
         "vcs": "hg",
     },
--- a/testing/mozharness/configs/releases/updates_firefox_devedition.py
+++ b/testing/mozharness/configs/releases/updates_firefox_devedition.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "log_name": "updates_devedition",
     "repo": {
         "repo": "https://hg.mozilla.org/build/tools",
         "branch": "default",
         "dest": "tools",
         "vcs": "hg",
     },
--- a/testing/mozharness/configs/releases/updates_firefox_release.py
+++ b/testing/mozharness/configs/releases/updates_firefox_release.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "log_name": "updates_release",
     "repo": {
         "repo": "https://hg.mozilla.org/build/tools",
         "branch": "default",
         "dest": "tools",
         "vcs": "hg",
     },
--- a/testing/mozharness/configs/remove_executables.py
+++ b/testing/mozharness/configs/remove_executables.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     # We bake this directly into the tester image now...
     "nodejs_path": "/usr/local/bin/node",
     "exes": {},
 }
--- a/testing/mozharness/configs/repackage/base.py
+++ b/testing/mozharness/configs/repackage/base.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "package-name": "firefox",
     "installer-tag": "browser/installer/windows/app.tag",
     "stub-installer-tag": "browser/installer/windows/stub.tag",
     "wsx-stub": "browser/installer/windows/msi/installer.wxs",
     "fetch-dir": os.environ.get("MOZ_FETCHES_DIR"),
--- a/testing/mozharness/configs/repackage/linux32_signed.py
+++ b/testing/mozharness/configs/repackage/linux32_signed.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 platform = "linux32"
 
 config = {
     "locale": os.environ.get("LOCALE"),
     # ToolTool
     "tooltool_cache": os.environ.get("TOOLTOOL_CACHE"),
--- a/testing/mozharness/configs/repackage/linux64_signed.py
+++ b/testing/mozharness/configs/repackage/linux64_signed.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 platform = "linux64"
 
 config = {
     "locale": os.environ.get("LOCALE"),
     # ToolTool
     "tooltool_cache": os.environ.get("TOOLTOOL_CACHE"),
--- a/testing/mozharness/configs/repackage/osx_partner.py
+++ b/testing/mozharness/configs/repackage/osx_partner.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "src_mozconfig": "browser/config/mozconfigs/macosx64/repack",
     "repack_id": os.environ.get("REPACK_ID"),
     # ToolTool
     "tooltool_cache": os.environ.get("TOOLTOOL_CACHE"),
 }
--- a/testing/mozharness/configs/repackage/osx_signed.py
+++ b/testing/mozharness/configs/repackage/osx_signed.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "src_mozconfig": "browser/config/mozconfigs/macosx64/repack",
     "locale": os.environ.get("LOCALE"),
     # ToolTool
     "tooltool_cache": os.environ.get("TOOLTOOL_CACHE"),
 }
--- a/testing/mozharness/configs/repackage/win32_partner.py
+++ b/testing/mozharness/configs/repackage/win32_partner.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 platform = "win32"
 
 config = {
     "repack_id": os.environ.get("REPACK_ID"),
     "run_configure": False,
     "env": {
--- a/testing/mozharness/configs/repackage/win32_sfx_stub.py
+++ b/testing/mozharness/configs/repackage/win32_sfx_stub.py
@@ -1,3 +1,7 @@
+# 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/.
+
 config = {
     "sfx-stub": "other-licenses/7zstub/firefox/7zSD.Win32.sfx",
 }
--- a/testing/mozharness/configs/repackage/win32_signed.py
+++ b/testing/mozharness/configs/repackage/win32_signed.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 platform = "win32"
 
 config = {
     "locale": os.environ.get("LOCALE"),
     "run_configure": False,
     "env": {
--- a/testing/mozharness/configs/repackage/win64-aarch64_sfx_stub.py
+++ b/testing/mozharness/configs/repackage/win64-aarch64_sfx_stub.py
@@ -1,3 +1,7 @@
+# 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/.
+
 config = {
     "sfx-stub": "other-licenses/7zstub/firefox/7zSD.ARM64.sfx",
 }
--- a/testing/mozharness/configs/repackage/win64_partner.py
+++ b/testing/mozharness/configs/repackage/win64_partner.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 platform = "win64"
 
 config = {
     "repack_id": os.environ.get("REPACK_ID"),
     "run_configure": False,
     "env": {
--- a/testing/mozharness/configs/repackage/win64_signed.py
+++ b/testing/mozharness/configs/repackage/win64_signed.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 platform = "win64"
 
 config = {
     "locale": os.environ.get("LOCALE"),
     "run_configure": False,
     "env": {
--- a/testing/mozharness/configs/servo/mac.py
+++ b/testing/mozharness/configs/servo/mac.py
@@ -1,3 +1,7 @@
+# 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/.
+
 config = {
     "concurrency": 6,
 }
--- a/testing/mozharness/configs/single_locale/devedition.py
+++ b/testing/mozharness/configs/single_locale/devedition.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "app_name": "browser",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "locales_dir": "browser/locales",
 }
--- a/testing/mozharness/configs/single_locale/firefox.py
+++ b/testing/mozharness/configs/single_locale/firefox.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "app_name": "browser",
     "mozconfig_variant": "l10n-mozconfig",
     "locales_dir": "browser/locales",
 }
--- a/testing/mozharness/configs/single_locale/linux32.py
+++ b/testing/mozharness/configs/single_locale/linux32.py
@@ -1,7 +1,11 @@
+# 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/.
+
 config = {
     "mozconfig_platform": "linux32",
     "log_name": "single_locale",
     "vcs_share_base": "/builds/hg-shared",
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
 }
--- a/testing/mozharness/configs/single_locale/linux64.py
+++ b/testing/mozharness/configs/single_locale/linux64.py
@@ -1,6 +1,10 @@
+# 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/.
+
 config = {
     "mozconfig_platform": "linux64",
     "vcs_share_base": "/builds/hg-shared",
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
 }
--- a/testing/mozharness/configs/single_locale/macosx64.py
+++ b/testing/mozharness/configs/single_locale/macosx64.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "mozconfig_platform": "macosx64",
     "upload_env_extra": {
         "MOZ_PKG_PLATFORM": "mac",
     },
     # l10n
     "ignore_locales": ["en-US", "ja"],
 }
--- a/testing/mozharness/configs/single_locale/tc_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/tc_android-api-16.py
@@ -1,8 +1,12 @@
+# 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/.
+
 config = {
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "repack_env": {
         "MOZ_OBJDIR": "%(abs_obj_dir)s",
     },
     "vcs_share_base": "/builds/hg-shared",
     "mozconfig": "src/mobile/android/config/mozconfigs/android-api-16/l10n-nightly",
--- a/testing/mozharness/configs/single_locale/tc_common.py
+++ b/testing/mozharness/configs/single_locale/tc_common.py
@@ -1,7 +1,11 @@
+# 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/.
+
 config = {
     "simple_name_move": True,
     "vcs_share_base": "/builds/hg-shared",
     "upload_env": {
         "UPLOAD_PATH": "/builds/worker/artifacts/",
     },
 }
--- a/testing/mozharness/configs/single_locale/tc_linux32.py
+++ b/testing/mozharness/configs/single_locale/tc_linux32.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "%(abs_obj_dir)s",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "DIST": "%(abs_obj_dir)s",
--- a/testing/mozharness/configs/single_locale/tc_linux_common.py
+++ b/testing/mozharness/configs/single_locale/tc_linux_common.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "%(abs_obj_dir)s",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "DIST": "%(abs_obj_dir)s",
--- a/testing/mozharness/configs/single_locale/tc_macosx64.py
+++ b/testing/mozharness/configs/single_locale/tc_macosx64.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "%(abs_obj_dir)s",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "DIST": "%(abs_obj_dir)s",
--- a/testing/mozharness/configs/single_locale/tc_win32.py
+++ b/testing/mozharness/configs/single_locale/tc_win32.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "%(abs_obj_dir)s",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "DIST": "%(abs_obj_dir)s",
--- a/testing/mozharness/configs/single_locale/tc_win64.py
+++ b/testing/mozharness/configs/single_locale/tc_win64.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 config = {
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "%(abs_obj_dir)s",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "DIST": "%(abs_obj_dir)s",
--- a/testing/mozharness/configs/single_locale/win32.py
+++ b/testing/mozharness/configs/single_locale/win32.py
@@ -1,6 +1,10 @@
+# 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/.
+
 config = {
     "mozconfig_platform": "win32",
     "log_name": "single_locale",
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
 }
--- a/testing/mozharness/configs/single_locale/win64-aarch64.py
+++ b/testing/mozharness/configs/single_locale/win64-aarch64.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "mozconfig_platform": "win64-aarch64",
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
 }
--- a/testing/mozharness/configs/single_locale/win64.py
+++ b/testing/mozharness/configs/single_locale/win64.py
@@ -1,5 +1,9 @@
+# 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/.
+
 config = {
     "mozconfig_platform": "win64",
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
 }
--- a/testing/mozharness/configs/talos/linux64_config_taskcluster.py
+++ b/testing/mozharness/configs/talos/linux64_config_taskcluster.py
@@ -1,28 +1,32 @@
-import os
-import sys
-
-PYTHON = sys.executable
-VENV_PATH = "%s/build/venv" % os.getcwd()
-
-exes = {
-    "python": PYTHON,
-}
-ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
-INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.tar.bz2")
-
-config = {
-    "log_name": "talos",
-    "installer_path": INSTALLER_PATH,
-    "virtualenv_path": VENV_PATH,
-    "exes": exes,
-    "title": os.uname()[1].lower().split(".")[0],
-    "default_actions": [
-        "clobber",
-        "download-and-extract",
-        "populate-webroot",
-        "create-virtualenv",
-        "install",
-        "run-tests",
-    ],
-    "tooltool_cache": "/builds/worker/tooltool-cache",
-}
+# 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/.
+
+import os
+import sys
+
+PYTHON = sys.executable
+VENV_PATH = "%s/build/venv" % os.getcwd()
+
+exes = {
+    "python": PYTHON,
+}
+ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
+INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.tar.bz2")
+
+config = {
+    "log_name": "talos",
+    "installer_path": INSTALLER_PATH,
+    "virtualenv_path": VENV_PATH,
+    "exes": exes,
+    "title": os.uname()[1].lower().split(".")[0],
+    "default_actions": [
+        "clobber",
+        "download-and-extract",
+        "populate-webroot",
+        "create-virtualenv",
+        "install",
+        "run-tests",
+    ],
+    "tooltool_cache": "/builds/worker/tooltool-cache",
+}
--- a/testing/mozharness/configs/talos/linux_config.py
+++ b/testing/mozharness/configs/talos/linux_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 VENV_PATH = "%s/build/venv" % os.getcwd()
 
 config = {
     "log_name": "talos",
     "installer_path": "installer.exe",
     "virtualenv_path": VENV_PATH,
--- a/testing/mozharness/configs/talos/mac_config.py
+++ b/testing/mozharness/configs/talos/mac_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 VENV_PATH = "%s/build/venv" % os.getcwd()
 
 config = {
     "log_name": "talos",
     "installer_path": "installer.exe",
     "virtualenv_path": VENV_PATH,
--- a/testing/mozharness/configs/talos/windows_config.py
+++ b/testing/mozharness/configs/talos/windows_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import socket
 import sys
 
 PYTHON = sys.executable
 PYTHON_DLL = "c:/mozilla-build/python27/python27.dll"
 VENV_PATH = os.path.join(os.getcwd(), "build/venv")
 
--- a/testing/mozharness/configs/talos/windows_taskcluster_config.py
+++ b/testing/mozharness/configs/talos/windows_taskcluster_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import socket
 import sys
 
 PYTHON = sys.executable
 PYTHON_DLL = "c:/mozilla-build/python/python27.dll"
 VENV_PATH = os.path.join(os.getcwd(), "venv")
 
--- a/testing/mozharness/configs/talos/windows_vm_config.py
+++ b/testing/mozharness/configs/talos/windows_vm_config.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import socket
 import sys
 
 PYTHON = sys.executable
 PYTHON_DLL = "c:/mozilla-build/python27/python27.dll"
 VENV_PATH = os.path.join(os.getcwd(), "build/venv")
 
--- a/testing/mozharness/configs/taskcluster_nightly.py
+++ b/testing/mozharness/configs/taskcluster_nightly.py
@@ -1,4 +1,8 @@
+# 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/.
+
 config = {
     "nightly_build": True,
     "taskcluster_nightly": True,
 }
--- a/testing/mozharness/configs/unittests/linux_unittest.py
+++ b/testing/mozharness/configs/unittests/linux_unittest.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import platform
 
 # OS Specifics
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 BINARY_PATH = os.path.join(ABS_WORK_DIR, "application", "firefox", "firefox-bin")
 INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.tar.bz2")
 XPCSHELL_NAME = "xpcshell"
--- a/testing/mozharness/configs/unittests/mac_unittest.py
+++ b/testing/mozharness/configs/unittests/mac_unittest.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 
 # OS Specifics
 INSTALLER_PATH = os.path.join(os.getcwd(), "installer.dmg")
 NODEJS_PATH = None
 if "MOZ_FETCHES_DIR" in os.environ:
     NODEJS_PATH = os.path.join(os.environ["MOZ_FETCHES_DIR"], "node/bin/node")
 
--- a/testing/mozharness/configs/unittests/win_unittest.py
+++ b/testing/mozharness/configs/unittests/win_unittest.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import platform
 import sys
 
 # OS Specifics
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 BINARY_PATH = os.path.join(ABS_WORK_DIR, "firefox", "firefox.exe")
 INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.zip")
--- a/testing/mozharness/examples/action_config_script.py
+++ b/testing/mozharness/examples/action_config_script.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python -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/.
+
 """action_config_script.py
 
 Demonstrate actions and config.
 """
 
 import os
 import sys
 import time
--- a/testing/mozharness/examples/silent_script.py
+++ b/testing/mozharness/examples/silent_script.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# 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/.
+
 """ This script is an example of why I care so much about Mozharness' 2nd core
 concept, logging.  http://escapewindow.dreamwidth.org/230853.html
 """
 
 import os
 import shutil
 
 # print "downloading foo.tar.bz2..."
--- a/testing/mozharness/examples/venv.py
+++ b/testing/mozharness/examples/venv.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# 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/.
+
 """venv.py
 
 Test virtualenv creation. This installs talos in the local venv; that's it.
 """
 
 import os
 import sys
 
--- a/testing/mozharness/examples/verbose_script.py
+++ b/testing/mozharness/examples/verbose_script.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# 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/.
+
 """verbose_script.py
 
 Contrast to silent_script.py.
 """
 
 import os
 import sys
 
--- a/testing/mozharness/external_tools/extract_and_run_command.py
+++ b/testing/mozharness/external_tools/extract_and_run_command.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# 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/.
+
 """
 Usage: extract_and_run_command.py [-j N] [command to run] -- [files and/or directories]
     -j is the number of workers to start, defaulting to 1.
     [command to run] must be a command that can accept one or many files
     to process as arguments.
 
 WARNING: This script does NOT respond to SIGINT. You must use SIGQUIT or SIGKILL to
          terminate it early.
--- a/testing/mozharness/external_tools/gittool.py
+++ b/testing/mozharness/external_tools/gittool.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# 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/.
+
 ### Compressed module sources ###
 module_sources = [
     (
         "util",
         "eJxlkMEKgzAQRO/5isWTQhFaSg8Ff6LnQknM2ixoItmov1+T2FLb3DY7mZkXGkbnAxjJpiclKI+K\nrOSWSAihsQM28sjBk32WXF0FrKe4YZi8hWAwrZMDuC5fJC1wkaQ+K7eIOqpXm1rTEzmU1ZahLuc/\ncwYlGS9nQNs6jfoACwUDQVIf/RdDAXmULYK0Gpo1aXAz6l3sG6VWJ/nIdjHdx45jWTR3W3xVSKTT\n8NuEE9a+DMzomZz9QOencdyDJ7LvH6zEC9SEeBQ=\n",
     ),
     (
         "util.file",
--- a/testing/mozharness/external_tools/packagesymbols.py
+++ b/testing/mozharness/external_tools/packagesymbols.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# 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/.
+
 
 from __future__ import print_function
 
 import argparse
 import os
 import subprocess
 import sys
 import zipfile
--- a/testing/mozharness/mozharness/__init__.py
+++ b/testing/mozharness/mozharness/__init__.py
@@ -1,2 +1,6 @@
+# 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/.
+
 version = (0, 7)
 version_string = ".".join(["%d" % i for i in version])
--- a/testing/mozharness/mozharness/base/diskutils.py
+++ b/testing/mozharness/mozharness/base/diskutils.py
@@ -1,8 +1,12 @@
+# 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/.
+
 """Disk utility module, no mixins here!
 
     examples:
     1) get disk size
     from mozharness.base.diskutils import DiskInfo, DiskutilsError
     ...
     try:
         DiskSize().get_size(path='/', unit='Mb')
--- a/testing/mozharness/mozharness/base/vcs/gittool.py
+++ b/testing/mozharness/mozharness/base/vcs/gittool.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import re
 
 try:
     import urlparse
 except ImportError:
     import urllib.parse as urlparse
 
--- a/testing/mozharness/mozharness/mozilla/bouncer/submitter.py
+++ b/testing/mozharness/mozharness/mozilla/bouncer/submitter.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import base64
 import socket
 import sys
 import traceback
 from xml.dom.minidom import parseString
 
 from mozharness.base.log import FATAL
 
--- a/testing/mozharness/mozharness/mozilla/checksums.py
+++ b/testing/mozharness/mozharness/mozilla/checksums.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import six
 
 
 def parse_checksums_file(checksums):
     """
     Parses checksums files that the build system generates and uploads:
     https://hg.mozilla.org/mozilla-central/file/default/build/checksums.py
     """
--- a/testing/mozharness/mozharness/mozilla/merkle.py
+++ b/testing/mozharness/mozharness/mozilla/merkle.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import struct
 
 
 def _round2(n):
     k = 1
     while k < n:
         k <<= 1
     return k >> 1
--- a/testing/mozharness/mozharness/mozilla/mozbase.py
+++ b/testing/mozharness/mozharness/mozilla/mozbase.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 from mozharness.base.script import PreScriptAction
 
 
 class MozbaseMixin(object):
     """Automatically set virtualenv requirements to use mozbase
     from test package.
     """
--- a/testing/mozharness/mozharness/mozilla/repo_manipulation.py
+++ b/testing/mozharness/mozharness/mozilla/repo_manipulation.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import ConfigParser
 import json
 import os
 
 from mozharness.base.errors import HgErrorList
 from mozharness.base.log import FATAL, INFO
 from mozharness.base.vcs.mercurial import MercurialVCS
 
--- a/testing/mozharness/mozharness/mozilla/tooltool.py
+++ b/testing/mozharness/mozharness/mozilla/tooltool.py
@@ -1,8 +1,12 @@
+# 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/.
+
 """module for tooltool operations"""
 import os
 import sys
 
 from mozharness.base.errors import PythonErrorList
 from mozharness.base.log import ERROR, FATAL
 
 TooltoolErrorList = PythonErrorList + [{"substr": "ERROR - ", "level": ERROR}]
--- a/testing/mozharness/scripts/release/generate-checksums.py
+++ b/testing/mozharness/scripts/release/generate-checksums.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import binascii
 import hashlib
 import os
 import re
 import sys
 from multiprocessing.pool import ThreadPool
 
 import six
--- a/testing/mozharness/scripts/release/update-verify-config-creator.py
+++ b/testing/mozharness/scripts/release/update-verify-config-creator.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from distutils.version import LooseVersion
 import json
 import math
 import os
 import pprint
 import re
 import sys
 from six.moves.urllib.parse import urljoin
--- a/testing/mozharness/scripts/repackage.py
+++ b/testing/mozharness/scripts/repackage.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import sys
 
 sys.path.insert(1, os.path.dirname(sys.path[0]))  # noqa - don't warn about imports
 
 from mozharness.base.log import FATAL
 from mozharness.base.script import BaseScript
 
--- a/testing/mozharness/setup.py
+++ b/testing/mozharness/setup.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 from setuptools import setup, find_packages
 
 try:
     here = os.path.dirname(os.path.abspath(__file__))
     description = open(os.path.join(here, "README.txt")).read()
 except IOError:
     description = ""
--- a/testing/performance/perftest_android_main.js
+++ b/testing/performance/perftest_android_main.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 /* eslint-env node */
 
 async function test(context, commands) {
   "use strict";
   // Nothing to do -- the timing is captured via logcat
   return true;
 }
 
--- a/testing/performance/perftest_bbc_link.js
+++ b/testing/performance/perftest_bbc_link.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 async function test(context, commands) {
   let rootUrl = "https://www.bbc.com/";
 
   await commands.navigate(rootUrl);
 
   // Wait for browser to settle
   await commands.wait.byTime(10000);
 
--- a/testing/performance/perftest_facebook.js
+++ b/testing/performance/perftest_facebook.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 async function test(context, commands) {
   await commands.navigate("https://www.example.com");
   await commands.wait.byTime(15000);
 
   // Fill in:
   let username = "some_user@mail.com";
   let passworld = "topsecretpassword";
 
--- a/testing/performance/perftest_jsconf_cold.js
+++ b/testing/performance/perftest_jsconf_cold.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 async function test(context, commands) {
   let rootUrl = "https://2019.jsconf.eu/";
 
   await commands.navigate(rootUrl);
 
   // Wait for browser to settle
   await commands.wait.byTime(10000);
 
--- a/testing/performance/perftest_jsconf_warm.js
+++ b/testing/performance/perftest_jsconf_warm.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 async function test(context, commands) {
   let rootUrl = "https://2019.jsconf.eu/";
 
   await commands.navigate(rootUrl);
 
   // Wait for browser to settle
   await commands.wait.byTime(10000);
 
--- a/testing/performance/perftest_pageload.js
+++ b/testing/performance/perftest_pageload.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 async function setUp(context) {
   context.log.info("setUp example!");
 }
 
 async function test(context, commands) {
   let url = context.options.browsertime.url;
   await commands.navigate("https://www.mozilla.org/en-US/");
   await commands.wait.byTime(100);
--- a/testing/performance/perftest_politico_link.js
+++ b/testing/performance/perftest_politico_link.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 async function test(context, commands) {
   let rootUrl = "https://www.politico.com/";
 
   await commands.navigate(rootUrl);
 
   // Wait for browser to settle
   await commands.wait.byTime(10000);
 
--- a/testing/performance/perftest_youtube_link.js
+++ b/testing/performance/perftest_youtube_link.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 async function test(context, commands) {
   let rootUrl = "https://www.politico.com/";
 
   await commands.navigate(rootUrl);
 
   // Wait for browser to settle
   await commands.wait.byTime(10000);
 
--- a/testing/profiles/base/user.js
+++ b/testing/profiles/base/user.js
@@ -1,3 +1,7 @@
+/* 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/. */
+
 // Empty base preferences file used by everything.
 // This is useful for testing a pref on try.
 /* globals user_pref */
--- a/testing/profiles/common/user.js
+++ b/testing/profiles/common/user.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 // Common preferences file used by both unittest and perf harnesses.
 /* globals user_pref */
 user_pref("app.update.checkInstallTime", false);
 user_pref("app.update.disabledForTesting", true);
 user_pref("browser.chrome.guess_favicon", false);
 user_pref("browser.dom.window.dump.enabled", true);
 user_pref("devtools.console.stdout.chrome", true);
 // asrouter expects a plain object or null
--- a/testing/profiles/geckoview-junit/user.js
+++ b/testing/profiles/geckoview-junit/user.js
@@ -1,6 +1,10 @@
+/* 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/. */
+
 // Base preferences file used by the mochitest
 /* globals user_pref */
 /* eslint quotes: 0 */
 
 // Always run in e10s
 user_pref("browser.tabs.remote.autostart", true);
--- a/testing/profiles/perf/user.js
+++ b/testing/profiles/perf/user.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 // Base preferences file used by performance harnesses
 /* globals user_pref */
 user_pref("app.normandy.api_url", "https://127.0.0.1/selfsupport-dummy/");
 user_pref("browser.EULA.override", true);
 user_pref("browser.addon-watch.interval", -1); // Deactivate add-on watching
 // Disable Bookmark backups by default.
 user_pref("browser.bookmarks.max_backups", 0);
 user_pref("browser.cache.disk.smart_size.enabled", false);
--- a/testing/profiles/profileserver/user.js
+++ b/testing/profiles/profileserver/user.js
@@ -1,4 +1,8 @@
+/* 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/. */
+
 // Preferences file for profileserver.
 /* globals user_pref */
 // Turn off budget throttling for the profile server
 user_pref("dom.timeout.enable_budget_timer_throttling", false);
--- a/testing/profiles/raptor-android/user.js
+++ b/testing/profiles/raptor-android/user.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 // Preferences file used by the raptor harness exclusively on android
 /* globals user_pref */
 
 // disk cache smart size is enabled in shipped apps
 user_pref("browser.cache.disk.smart_size.enabled", true);
 
 // Raptor's manifest.json contains the "geckoProfiler" permission, which is
 // not supported on Android. Ignore the warning about the unknown permission.
--- a/testing/profiles/raptor/user.js
+++ b/testing/profiles/raptor/user.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 // Preferences file used by the raptor harness
 /* globals user_pref */
 // prevents normandy from running updates during the tests
 user_pref("app.normandy.enabled", false);
 
 user_pref("dom.performance.time_to_non_blank_paint.enabled", true);
 user_pref("dom.performance.time_to_contentful_paint.enabled", true);
 user_pref("dom.performance.time_to_dom_content_flushed.enabled", true);
--- a/testing/profiles/unittest-features/user.js
+++ b/testing/profiles/unittest-features/user.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 // Base preferences file for enabling unittest features.
 // Not enabling these features cause many unittests that
 // expect these prefs to be set to fail.
 // Ideally, tests depending on these prefs should be setting
 // the prefs themselves in their manifests...
 // NOTE: Setting prefs to enable unittests to run at all
 // should occur in unittest-required/user.js, not here!
 /* globals user_pref */
--- a/testing/profiles/unittest-required/user.js
+++ b/testing/profiles/unittest-required/user.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 // Base preferences file to allow unittests to run successfully.
 // NOTE: Toggling prefs for testing features should happen in
 // unittest-features/user.js or in harness/test manifests, not here!
 /* globals user_pref */
 user_pref("accessibility.typeaheadfind.autostart", false);
 // Make sure Shield doesn't hit the network.
 user_pref("app.normandy.api_url", "");
 // Make sure the notification permission migration test doesn't hit the network.
--- a/testing/profiles/web-platform/user.js
+++ b/testing/profiles/web-platform/user.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 // Base preferences file for web-platform-tests.
 /* globals user_pref */
 // Don't use the new tab page but about:blank for opened tabs
 user_pref("browser.newtabpage.enabled", false);
 // Don't restore the last open set of tabs if the browser has crashed
 user_pref("browser.sessionstore.resume_from_crash", false);
 // Don't show the Bookmarks Toolbar on any tab (the above pref that
 // disables the New Tab Page ends up showing the toolbar on about:blank).
--- a/testing/profiles/xpcshell/user.js
+++ b/testing/profiles/xpcshell/user.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 // Base preferences file used by the xpcshell harness
 /* globals user_pref */
 /* eslint quotes: 0 */
 user_pref("app.normandy.api_url", "https://%(server)s/selfsupport-dummy/");
 user_pref("browser.safebrowsing.downloads.remote.url", "https://%(server)s/safebrowsing-dummy");
 user_pref("extensions.systemAddon.update.url", "http://%(server)s/dummy-system-addons.xml");
 // Treat WebExtension API/schema warnings as errors.
 user_pref("extensions.webextensions.warnings-as-errors", true);
--- a/testing/raptor/.eslintrc.js
+++ b/testing/raptor/.eslintrc.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 "use strict";
 
 module.exports = {
   env: {
     webextensions: true,
   },
 
   globals: {
--- a/testing/raptor/browsertime/browsertime_benchmark.js
+++ b/testing/raptor/browsertime/browsertime_benchmark.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 (function() {
   return new Promise(function(resolve) {
     window.addEventListener("message", function(event) {
       if (event.data[0] == "raptor-benchmark") {
         console.log("Benchmark data received for ", event.data[0]);
         let data = {
           [event.data[1]]: event.data.slice(2),
         };
--- a/testing/raptor/browsertime/browsertime_pageload.js
+++ b/testing/raptor/browsertime/browsertime_pageload.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 /* eslint-env node */
 
 module.exports = async function(context, commands) {
   context.log.info("Starting a browsertime pageload");
   let url = context.options.browsertime.url;
   let page_cycles = context.options.browsertime.page_cycles;
   let page_cycle_delay = context.options.browsertime.page_cycle_delay;
   let post_startup_delay = context.options.browsertime.post_startup_delay;
--- a/testing/raptor/browsertime/browsertime_scenario.js
+++ b/testing/raptor/browsertime/browsertime_scenario.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 /* eslint-env node */
 
 module.exports = async function(context, commands) {
   context.log.info("Starting a browsertime scenario test");
   let page_cycles = context.options.browsertime.page_cycles;
   let page_cycle_delay = context.options.browsertime.page_cycle_delay;
   let post_startup_delay = context.options.browsertime.post_startup_delay;
   let scenario_time = context.options.browsertime.scenario_time;
--- a/testing/talos/.eslintrc.js
+++ b/testing/talos/.eslintrc.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 "use strict";
 
 module.exports = {
   globals: {
     Cc: false,
     Ci: false,
     Cu: false,
     content: true,
--- a/testing/talos/INSTALL.py
+++ b/testing/talos/INSTALL.py
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# 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/.
+
 
 """
 installation script for talos. This script:
 - creates a virtualenv in the current directory
 - sets up talos in development mode: `python setup.py develop`
 - downloads pageloader and packages to talos/page_load_test/pageloader.xpi
 """
 from __future__ import absolute_import
--- a/testing/talos/setup.py
+++ b/testing/talos/setup.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import os
 
 from setuptools import setup, find_packages
 
 try:
     here = os.path.dirname(os.path.abspath(__file__))
--- a/testing/talos/talos/bootstrap.js
+++ b/testing/talos/talos/bootstrap.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 "use strict";
 
 /* globals initializeBrowser */
 
 // PLEASE NOTE:
 //
 // The canonical version of this file lives in testing/talos/talos, and
 // is duplicated in a number of test add-ons in directories below it.
--- a/testing/talos/talos/cmanager_base.py
+++ b/testing/talos/talos/cmanager_base.py
@@ -1,26 +1,30 @@
-from __future__ import absolute_import
-
-
-class CounterManager(object):
-
-    counterDict = {}
-
-    def __init__(self):
-        self.allCounters = {}
-        self.registeredCounters = {}
-
-    def _loadCounters(self):
-        """Loads all of the counters defined in the counterDict"""
-        for counter in self.counterDict.keys():
-            self.allCounters[counter] = self.counterDict[counter]
-
-    def registerCounters(self, counters):
-        """Registers a list of counters that will be monitoring.
-        Only counters whose names are found in allCounters will be added
-        """
-        for counter in counters:
-            if counter in self.allCounters:
-                self.registeredCounters[counter] = [self.allCounters[counter], []]
-
-    def getCounterValue(self, counterName):
-        """Returns the last value of the counter 'counterName'"""
+# 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/.
+
+from __future__ import absolute_import
+
+
+class CounterManager(object):
+
+    counterDict = {}
+
+    def __init__(self):
+        self.allCounters = {}
+        self.registeredCounters = {}
+
+    def _loadCounters(self):
+        """Loads all of the counters defined in the counterDict"""
+        for counter in self.counterDict.keys():
+            self.allCounters[counter] = self.counterDict[counter]
+
+    def registerCounters(self, counters):
+        """Registers a list of counters that will be monitoring.
+        Only counters whose names are found in allCounters will be added
+        """
+        for counter in counters:
+            if counter in self.allCounters:
+                self.registeredCounters[counter] = [self.allCounters[counter], []]
+
+    def getCounterValue(self, counterName):
+        """Returns the last value of the counter 'counterName'"""
--- a/testing/talos/talos/filter.py
+++ b/testing/talos/talos/filter.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import math
 import six
 
 """
 data filters:
 takes a series of run data and applies statistical transforms to it
--- a/testing/talos/talos/getinfooffline/background.js
+++ b/testing/talos/talos/getinfooffline/background.js
@@ -1,6 +1,10 @@
+/* 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/. */
+
 // We've run once, and hopefully bypassed any network connections that add-ons
 // might have tried to make after first install. Now let's uninstall ourselves
 // so that subsequent starts run in online mode.
 
 /* globals browser */
 browser.management.uninstallSelf({});
--- a/testing/talos/talos/pageloader/chrome/MozillaFileLogger.js
+++ b/testing/talos/talos/pageloader/chrome/MozillaFileLogger.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 /**
  * MozillaFileLogger, a log listener that can write to a local file.
  */
 
 const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 
 // double logging to account for normal mode and ipc mode (mobile_profile only)
 // Ideally we would remove the dump() and just do ipc logging
--- a/testing/talos/talos/pageloader/chrome/a11y.js
+++ b/testing/talos/talos/pageloader/chrome/a11y.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 (function() {
   let gAccService = 0;
 
   function initAccessibility() {
     if (!gAccService) {
       var service = Cc["@mozilla.org/accessibilityService;1"];
       if (service) {
         // fails if build lacks accessibility module
--- a/testing/talos/talos/pageloader/chrome/tscroll.js
+++ b/testing/talos/talos/pageloader/chrome/tscroll.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 // Note: This file is used at both tscrollx and tp5o_scroll. With the former as
 //       unprivileged code.
 // - Please make sure that any changes apply cleanly to all use cases.
 
 function testScroll(target, stepSize, opt_reportFunc, opt_numSteps) {
   var win;
   if (target == "content") {
     target = content.wrappedJSObject;
--- a/testing/talos/talos/scripts/report.py
+++ b/testing/talos/talos/scripts/report.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import argparse
 import collections
 import csv
 import os
 import six
 import sys
--- a/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.js
+++ b/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 {
     "version": ["sessionrestore", 1],
     "windows": [{
         "tabs": [{
             "entries": [{
                 "url": "about:home",
                 "title": "Nightly Start Page",
                 "cacheKey": 0,
--- a/testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.js
+++ b/testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 {
   "windows": [
     {
       "tabs": [
         {
           "entries": [
             {
               "url": "about:home",
--- a/testing/talos/talos/talosconfig.py
+++ b/testing/talos/talos/talosconfig.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import, print_function
 
 import json
 import os
 
 
 def writeConfigFile(obj, vals):
     data = dict((opt, obj[opt]) for opt in (vals or obj.keys()))
--- a/testing/talos/talos/test.py
+++ b/testing/talos/talos/test.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import os
 
 from talos import filter
 
 """
 test definitions for Talos
--- a/testing/talos/talos/unittests/conftest.py
+++ b/testing/talos/talos/unittests/conftest.py
@@ -1,46 +1,50 @@
-from __future__ import absolute_import
-
-import os
-
-here = os.path.realpath(__file__)
-__TESTS_DIR = os.path.join(os.path.dirname(os.path.dirname(here)), "tests")
-
-
-def remove_develop_files(starting_dir=__TESTS_DIR):
-    for file_name in os.listdir(starting_dir):
-
-        file_path = os.path.join(starting_dir, file_name)
-
-        if file_name.endswith(".develop") and os.path.isfile(file_path):
-            os.remove(file_path)
-        elif os.path.isdir(file_path):
-            remove_develop_files(file_path)
-
-
-def patched_build_manifest(config, manifestName):
-    # for unit testing, we aren't downloading the tp5 pageset; therefore
-    # manifest file doesn't exist; create a dummy one so we can continue
-    if not os.path.exists(manifestName):
-        try:
-            if not os.path.exists(os.path.dirname(manifestName)):
-                os.makedirs(os.path.dirname(manifestName))
-            f = open(manifestName, "w")
-            f.close()
-        except Exception as e:
-            raise (e)
-
-    # read manifest lines
-    with open(manifestName, "r") as fHandle:
-        manifestLines = fHandle.readlines()
-
-    # write modified manifest lines
-    with open(manifestName + ".develop", "w") as newHandle:
-        for line in manifestLines:
-            newline = line.replace("localhost", config["webserver"])
-            newline = newline.replace("page_load_test", "tests")
-            newHandle.write(newline)
-
-    newManifestName = manifestName + ".develop"
-
-    # return new manifest
-    return newManifestName
+# 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/.
+
+from __future__ import absolute_import
+
+import os
+
+here = os.path.realpath(__file__)
+__TESTS_DIR = os.path.join(os.path.dirname(os.path.dirname(here)), "tests")
+
+
+def remove_develop_files(starting_dir=__TESTS_DIR):
+    for file_name in os.listdir(starting_dir):
+
+        file_path = os.path.join(starting_dir, file_name)
+
+        if file_name.endswith(".develop") and os.path.isfile(file_path):
+            os.remove(file_path)
+        elif os.path.isdir(file_path):
+            remove_develop_files(file_path)
+
+
+def patched_build_manifest(config, manifestName):
+    # for unit testing, we aren't downloading the tp5 pageset; therefore
+    # manifest file doesn't exist; create a dummy one so we can continue
+    if not os.path.exists(manifestName):
+        try:
+            if not os.path.exists(os.path.dirname(manifestName)):
+                os.makedirs(os.path.dirname(manifestName))
+            f = open(manifestName, "w")
+            f.close()
+        except Exception as e:
+            raise (e)
+
+    # read manifest lines
+    with open(manifestName, "r") as fHandle:
+        manifestLines = fHandle.readlines()
+
+    # write modified manifest lines
+    with open(manifestName + ".develop", "w") as newHandle:
+        for line in manifestLines:
+            newline = line.replace("localhost", config["webserver"])
+            newline = newline.replace("page_load_test", "tests")
+            newHandle.write(newline)
+
+    newManifestName = manifestName + ".develop"
+
+    # return new manifest
+    return newManifestName
--- a/testing/talos/talos/webextensions/dummy/background.js
+++ b/testing/talos/talos/webextensions/dummy/background.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 "use strict";
 
 /* eslint-env webextensions */
 
 let skipFilters = false;
 
 browser.webRequest.onBeforeRequest.addListener(
   details => {
--- a/testing/talos/talos/webextensions/dummy/content.js
+++ b/testing/talos/talos/webextensions/dummy/content.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 "use strict";
 
 /* eslint-env webextensions */
 
 browser.runtime.sendMessage({
   msg: "Hello from content script",
   url: location.href,
 });
--- a/testing/talos/talos/xtalos/__init__.py
+++ b/testing/talos/talos/xtalos/__init__.py
@@ -1,1 +1,5 @@
+# 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/.
+
 from __future__ import absolute_import
--- a/testing/web-platform/manifestdownload.py
+++ b/testing/web-platform/manifestdownload.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import os
 from datetime import datetime, timedelta
 import tarfile
 import requests
 import six
 import mozversioncontrol
--- a/testing/web-platform/meta/screen-wake-lock/wakelock-insecure-context.any.js
+++ b/testing/web-platform/meta/screen-wake-lock/wakelock-insecure-context.any.js
@@ -1,3 +1,7 @@
+/* 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/. */
+
 [wakelock-type.https.any.html]
   disabled:
     if (os == "win" and debug and bits == "32"): https://bugzilla.mozilla.org/show_bug.cgi?id=1591125
--- a/testing/web-platform/metamerge.py
+++ b/testing/web-platform/metamerge.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import argparse
 import logging
 import os
 from collections import namedtuple
 
 from six import iteritems
 
 from wptrunner.wptmanifest.serializer import serialize
--- a/testing/web-platform/metasummary.py
+++ b/testing/web-platform/metasummary.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import argparse
 import json
 import logging
 import os
 import re
 from urllib import parse as urlparse
 from collections import defaultdict
 
--- a/testing/web-platform/unittestrunner.py
+++ b/testing/web-platform/unittestrunner.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import argparse
 import configparser
 import os
 import re
 import subprocess
 import sys
 
 
--- a/testing/web-platform/update/upstream.py
+++ b/testing/web-platform/update/upstream.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import re
 import subprocess
 import sys
 import tempfile
 from six.moves import input
 from six.moves.urllib import parse as urlparse
 
--- a/testing/web-platform/vcs.py
+++ b/testing/web-platform/vcs.py
@@ -1,8 +1,12 @@
+# 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/.
+
 import os
 import subprocess
 
 
 class Mercurial(object):
     def __init__(self, repo_root):
         self.root = os.path.abspath(repo_root)
         self.hg = Mercurial.get_func(repo_root)
--- a/testing/webdriver/src/actions.rs
+++ b/testing/webdriver/src/actions.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use crate::common::{WebElement, ELEMENT_KEY};
 use serde::de::{self, Deserialize, Deserializer};
 use serde::ser::{Serialize, Serializer};
 use serde_json::Value;
 use std::default::Default;
 use unicode_segmentation::UnicodeSegmentation;
 
 #[derive(Debug, PartialEq, Serialize, Deserialize)]
--- a/testing/webdriver/src/capabilities.rs
+++ b/testing/webdriver/src/capabilities.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use crate::common::MAX_SAFE_INTEGER;
 use crate::error::{ErrorStatus, WebDriverError, WebDriverResult};
 use serde_json::{Map, Value};
 use url::Url;
 
 pub type Capabilities = Map<String, Value>;
 
 /// Trait for objects that can be used to inspect browser capabilities
--- a/testing/webdriver/src/command.rs
+++ b/testing/webdriver/src/command.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use crate::actions::ActionSequence;
 use crate::capabilities::{
     BrowserCapabilities, Capabilities, CapabilitiesMatching, LegacyNewSessionParameters,
     SpecNewSessionParameters,
 };
 use crate::common::{Date, FrameId, LocatorStrategy, WebElement, MAX_SAFE_INTEGER};
 use crate::error::{ErrorStatus, WebDriverError, WebDriverResult};
 use crate::httpapi::{Route, VoidWebDriverExtensionRoute, WebDriverExtensionRoute};
--- a/testing/webdriver/src/common.rs
+++ b/testing/webdriver/src/common.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use serde::ser::{Serialize, Serializer};
 use serde::{Deserialize, Deserializer};
 use std::collections::HashMap;
 
 pub static ELEMENT_KEY: &str = "element-6066-11e4-a52e-4f735466cecf";
 pub static FRAME_KEY: &str = "frame-075b-4da1-b6ba-e579c2d3230a";
 pub static WINDOW_KEY: &str = "window-fcc6-11e5-b4f8-330a88ab9d7f";
 
--- a/testing/webdriver/src/error.rs
+++ b/testing/webdriver/src/error.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use base64::DecodeError;
 use http::StatusCode;
 use serde::de::{Deserialize, Deserializer};
 use serde::ser::{Serialize, Serializer};
 use serde_json;
 use std::borrow::Cow;
 use std::convert::From;
 use std::error::Error;
--- a/testing/webdriver/src/httpapi.rs
+++ b/testing/webdriver/src/httpapi.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use http::Method;
 use serde_json::Value;
 
 use crate::command::{VoidWebDriverExtensionCommand, WebDriverCommand, WebDriverExtensionCommand};
 use crate::error::WebDriverResult;
 use crate::Parameters;
 
 pub(crate) fn standard_routes<U: WebDriverExtensionRoute>() -> Vec<(Method, &'static str, Route<U>)>
--- a/testing/webdriver/src/lib.rs
+++ b/testing/webdriver/src/lib.rs
@@ -1,9 +1,13 @@
 #![allow(non_snake_case)]
+/* 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/. */
+
 #![forbid(unsafe_code)]
 
 extern crate base64;
 extern crate cookie;
 #[macro_use]
 extern crate log;
 extern crate http;
 extern crate serde;
--- a/testing/webdriver/src/macros.rs
+++ b/testing/webdriver/src/macros.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 macro_rules! try_opt {
     ($expr:expr, $err_type:expr, $err_msg:expr) => {{
         match $expr {
             Some(x) => x,
             None => return Err(WebDriverError::new($err_type, $err_msg)),
         }
     }};
 }
--- a/testing/webdriver/src/response.rs
+++ b/testing/webdriver/src/response.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use crate::common::Cookie;
 use serde::ser::{Serialize, Serializer};
 use serde_json::Value;
 
 #[derive(Debug, PartialEq, Serialize)]
 #[serde(untagged, remote = "Self")]
 pub enum WebDriverResponse {
     NewWindow(NewWindowResponse),
--- a/testing/webdriver/src/server.rs
+++ b/testing/webdriver/src/server.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 use serde_json;
 use std::marker::PhantomData;
 use std::net::{SocketAddr, TcpListener as StdTcpListener};
 use std::sync::mpsc::{channel, Receiver, Sender};
 use std::sync::{Arc, Mutex};
 use std::thread;
 
 use bytes::Bytes;
--- a/testing/webdriver/src/test.rs
+++ b/testing/webdriver/src/test.rs
@@ -1,8 +1,12 @@
+/* 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/. */
+
 pub fn assert_ser_de<T>(data: &T, json: serde_json::Value)
 where
     T: std::fmt::Debug,
     T: std::cmp::PartialEq,
     T: serde::de::DeserializeOwned,
     T: serde::Serialize,
 {
     assert_eq!(serde_json::to_value(data).unwrap(), json);
--- a/testing/xpcshell/moz-http2/moz-http2-child.js
+++ b/testing/xpcshell/moz-http2/moz-http2-child.js
@@ -1,8 +1,12 @@
+/* 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/. */
+
 /* eslint-env node */
 
 function sendBackResponse(evalResult, e) {
   const output = { result: evalResult, error: "", errorStack: "" };
   if (e) {
     output.error = e.toString();
     output.errorStack = e.stack;
   }
--- a/testing/xpcshell/xpcshellcommandline.py
+++ b/testing/xpcshell/xpcshellcommandline.py
@@ -1,8 +1,12 @@
+# 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/.
+
 from __future__ import absolute_import
 
 import argparse
 
 from mozlog import commandline
 
 
 def add_common_arguments(parser):