diff options
-rw-r--r-- | .github/workflows/main.yml | 14 | ||||
-rw-r--r-- | python/servo/devenv_commands.py | 38 | ||||
-rw-r--r-- | tests/wpt/servowpt.py | 2 |
3 files changed, 50 insertions, 4 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 97c8ff57fe7..9e15e465edc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -35,6 +35,7 @@ jobs: }); build-win: + if: contains(fromJSON('["auto", "try", "try-windows"]'), github.ref_name) name: Build (Windows) runs-on: windows-2019 needs: ["decision"] @@ -60,6 +61,7 @@ jobs: run: python mach smoketest --angle build-mac: + if: contains(fromJSON('["auto", "try", "try-mac"]'), github.ref_name) name: Build (macOS) runs-on: macos-12 needs: ["decision"] @@ -157,6 +159,7 @@ jobs: # filtered-wpt-summary.${{ matrix.chunk_id }}.log build-linux: + if: contains(fromJSON('["auto", "try", "try-linux", "try-wpt"]'), github.ref_name) name: Build (Linux) runs-on: ubuntu-20.04 needs: ["decision"] @@ -183,6 +186,7 @@ jobs: path: target.tar.gz linux-wpt: + if: contains(fromJSON('["auto", "try", "try-wpt"]'), github.ref_name) name: Linux WPT Tests runs-on: ubuntu-20.04 needs: ["build-linux"] @@ -241,7 +245,7 @@ jobs: report_test_results: name: Reporting test results runs-on: ubuntu-latest - if: always() + if: "!cancelled() && success('build-linux') && contains(fromJSON('[\"auto\", \"try\", \"try-wpt\"]'), github.ref_name)" needs: - "linux-wpt" steps: @@ -269,16 +273,20 @@ jobs: build_result: name: homu build finished runs-on: ubuntu-latest + if: always() + # needs all build to detect cancellation needs: + - "decision" - "build-win" - "build-mac" + - "build-linux" - "linux-wpt" # - "mac-wpt" steps: - name: Mark the job as successful run: exit 0 - if: success() + if: "!contains(join(needs.*.result, ','), 'failure') && !contains(join(needs.*.result, ','), 'cancelled')" - name: Mark the job as unsuccessful run: exit 1 - if: "!success()" + if: contains(join(needs.*.result, ','), 'failure') || contains(join(needs.*.result, ','), 'cancelled') diff --git a/python/servo/devenv_commands.py b/python/servo/devenv_commands.py index bd4ada00ea7..db44ad2121c 100644 --- a/python/servo/devenv_commands.py +++ b/python/servo/devenv_commands.py @@ -349,3 +349,41 @@ class MachCommands(CommandBase): "--verbose", ], env=env) return p.wait() + + @Command('try', + description='Runs try jobs by force pushing to personal fork try branches', + category='devenv') + @CommandArgument( + 'jobs', default=["try"], nargs='...', + help="Name(s) of job(s) (ex: try, linux, mac, windows, wpt)") + def try_jobs(self, jobs): + branches = [] + # we validate branches because force pushing is destructive + VALID_TRY_BRACHES = ["try", "try-linux", "try-mac", "try-windows", "try-wpt"] + for job in jobs: + # branches must start with try- + if "try" not in job: + job = "try-" + job + if job not in VALID_TRY_BRACHES: + print(job + " job doesn't exist") + return -1 + branches.append(job) + remote = "origin" + if "servo/servo" in subprocess.check_output(["git", "config", "--get", "remote.origin.url"]).decode(): + # if we have servo/servo for origin check try remote + try: + if "servo/servo" in subprocess.check_output(["git", "config", "--get", "remote.try.url"]).decode(): + # User has servo/servo for try remote + print("You should not use servo/servo for try remote!") + return -1 + else: + remote = "try" + except subprocess.CalledProcessError: + print("It looks like you are patching in upstream servo.") + print("Set try remote to your personal fork with `git remote add try https://github.com/user/servo`") + return -1 + for b in branches: + res = call(["git", "push", remote, "--force", f"HEAD:{b}"], env=self.build_env()) + if res != 0: + return res + return 0 diff --git a/tests/wpt/servowpt.py b/tests/wpt/servowpt.py index 477e00eb168..7766d19ff88 100644 --- a/tests/wpt/servowpt.py +++ b/tests/wpt/servowpt.py @@ -227,7 +227,7 @@ class TrackerDashboardFilter(): self.headers = { "Content-Type": "application/json" } - if TRACKER_DASHBOARD_SECRET_ENV_VAR in os.environ: + if TRACKER_DASHBOARD_SECRET_ENV_VAR in os.environ and os.environ[TRACKER_DASHBOARD_SECRET_ENV_VAR]: self.url = f"{base_url}/dashboard/attempts" secret = os.environ[TRACKER_DASHBOARD_SECRET_ENV_VAR] self.headers["Authorization"] = f"Bearer {secret}" |