Skip to content

Commit ceeacb1

Browse files
committed
WIP
1 parent 1d66e9c commit ceeacb1

File tree

8 files changed

+191
-7
lines changed

8 files changed

+191
-7
lines changed

.cron.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,10 @@ jobs:
2323
target-tasks-method: firebase_performance_test
2424
treeherder-symbol: firebase-performance
2525
when:
26-
- {hour: 22, minute: 0}
26+
- {hour: 22, minute: 0}
27+
- name: beta-releases
28+
job:
29+
type: decision-task
30+
target-tasks-method: beta_releases
31+
treeherder-symbol: beta_releases
32+
when: [] # TODO: Manual only for now

taskcluster/ffios_taskgraph/target_tasks.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,11 @@ def filter(task, parameters):
8686
)
8787

8888
return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)]
89+
90+
91+
@register_target_task("beta_releases")
92+
def target_task_beta_releases(full_task_graph, parameters, graph_config):
93+
def filter(task, parameters):
94+
return task.kind == "beta-releases"
95+
96+
return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)]
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# This Source Code Form is subject to the terms of the Mozilla Public
2+
# License, v. 2.0. If a copy of the MPL was not distributed with this
3+
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
4+
5+
import os.path
6+
7+
from git import Repo
8+
from mozilla_version.ios import MobileIosVersion
9+
from taskgraph.transforms.base import TransformSequence
10+
from taskgraph.util.schema import resolve_keyed_by
11+
import taskgraph
12+
13+
14+
transforms = TransformSequence()
15+
16+
@transforms.add
17+
def resolve_keys(config, tasks):
18+
for task in tasks:
19+
for key in ("scopes",):
20+
resolve_keyed_by(
21+
task,
22+
key,
23+
item_name=task["name"],
24+
**{
25+
"level": config.params["level"],
26+
}
27+
)
28+
29+
yield task
30+
31+
32+
@transforms.add
33+
def resolve_beta_branch_and_head(config, tasks):
34+
RELEASE_BRANCH_PREFIX = "release/v"
35+
36+
for task in tasks:
37+
current_release_branch = "[SKIPPED]"
38+
revision = "[SKIPPED]"
39+
version = "[SKIPPED]"
40+
41+
repo_dir = os.path.join(config.graph_config.root_dir, "../")
42+
43+
if not taskgraph.fast:
44+
repo = Repo(repo_dir)
45+
46+
remote = repo.remote()
47+
# Make sure we're up to date
48+
remote.fetch()
49+
50+
current_release_branch = max(ref.remote_head for ref in remote.refs if ref.remote_head.startswith(RELEASE_BRANCH_PREFIX))
51+
revision = remote.refs[current_release_branch].object.hexsha
52+
commit = repo.commit(revision)
53+
file_blob = commit.tree / "version.txt"
54+
version = file_blob.data_stream.read().decode('utf-8').strip()
55+
parsed_version = MobileIosVersion.parse(version)
56+
if not parsed_version.is_beta:
57+
print("The latest release branch isn't a beta, not generating a beta release task")
58+
return
59+
60+
worker = task.setdefault("worker", {})
61+
worker["branch"] = current_release_branch
62+
worker["revision"] = revision
63+
worker["version"] = version
64+
65+
yield task
66+

taskcluster/ffios_taskgraph/worker_types.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,24 @@ def build_github_release_payload(config, task, task_def):
8686
]
8787
)
8888

89+
90+
@payload_builder(
91+
"scriptworker-shipit-release",
92+
schema={
93+
Required("branch"): str,
94+
Required("phase"): str,
95+
Required("product"): str,
96+
Required("revision"): str,
97+
Required("version"): str,
98+
}
99+
)
100+
def build_shipit_release_payload(config, task, task_def):
101+
task_def["payload"] = {
102+
"product": task["worker"]["product"],
103+
"branch": task["worker"]["branch"],
104+
"phase": task["worker"]["phase"],
105+
"version": task["worker"]["version"],
106+
"cron_revision": task["worker"]["revision"],
107+
"repository_url": config.params["head_repository"],
108+
}
109+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# This Source Code Form is subject to the terms of the Mozilla Public
2+
# License, v. 2.0. If a copy of the MPL was not distributed with this
3+
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
4+
---
5+
loader: taskgraph.loader.transform:loader
6+
7+
transforms:
8+
- ffios_taskgraph.transforms.beta_releases
9+
- taskgraph.transforms.task
10+
11+
tasks:
12+
firefox:
13+
description: Create a beta firefox release in ship-it
14+
worker-type: ship-it
15+
run-on-tasks-for: []
16+
scopes:
17+
by-level:
18+
'3':
19+
- project:mobile:releng:ship-it:action:create-new-release
20+
- project:mobile:releng:ship-it:server:production
21+
'1':
22+
- project:mobile:releng:ship-it:action:create-new-release
23+
- project:mobile:releng:ship-it:server:staging
24+
treeherder:
25+
symbol: Rel
26+
tier: 1
27+
kind: build
28+
platform: ios/opt
29+
worker:
30+
implementation: scriptworker-shipit-release
31+
product: firefox-ios
32+
phase: ship
33+
# branch, revision and version are filled out in the transform
34+

taskcluster/requirements.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44
mozilla-taskgraph>=3.0.3
55
mozilla-version>=4.0.0
66
taskcluster-taskgraph>=13.1.0
7+
GitPython>=3.1.44

taskcluster/requirements.txt

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
#
2-
# This file is autogenerated by pip-compile with Python 3.13
3-
# by the following command:
4-
#
5-
# pip-compile --generate-hashes --output-file=requirements.txt requirements.in
6-
#
1+
# This file was autogenerated by uv via the following command:
2+
# uv pip compile requirements.in -o requirements.txt --generate-hashes
73
appdirs==1.4.4 \
84
--hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \
95
--hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128
@@ -128,6 +124,14 @@ cookiecutter==2.6.0 \
128124
--hash=sha256:a54a8e37995e4ed963b3e82831072d1ad4b005af736bb17b99c2cbd9d41b6e2d \
129125
--hash=sha256:db21f8169ea4f4fdc2408d48ca44859349de2647fbe494a9d6c3edfc0542c21c
130126
# via taskcluster-taskgraph
127+
gitdb==4.0.12 \
128+
--hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \
129+
--hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf
130+
# via gitpython
131+
gitpython==3.1.44 \
132+
--hash=sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110 \
133+
--hash=sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269
134+
# via -r requirements.in
131135
giturlparse==0.12.0 \
132136
--hash=sha256:412b74f2855f1da2fefa89fd8dde62df48476077a72fc19b62039554d27360eb \
133137
--hash=sha256:c0fff7c21acc435491b1779566e038757a205c1ffdcb47e4f81ea52ad8c3859a
@@ -317,6 +321,10 @@ slugid==2.0.0 \
317321
--hash=sha256:a950d98b72691178bdd4d6c52743c4a2aa039207cf7a97d71060a111ff9ba297 \
318322
--hash=sha256:aec8b0e01c4ad32e38e12d609eab3ec912fd129aaf6b2ded0199b56a5f8fd67c
319323
# via taskcluster-taskgraph
324+
smmap==5.0.2 \
325+
--hash=sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5 \
326+
--hash=sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e
327+
# via gitdb
320328
taskcluster-taskgraph==13.1.0 \
321329
--hash=sha256:68bbcb094d4b97c4fd59a5f61385bca5aee70f8da7b432a139efe221153abe36 \
322330
--hash=sha256:be7d8dea6587eca3a751a501afe2708e37f8dbea631614775cca21432fa4f2d0
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
base_ref: origin/main
2+
base_repository: https://github.com/mozilla-mobile/staging-firefox-ios
3+
base_rev: 6a5ff6fb20e56f7963c81509a8933d7019028e16
4+
build_date: 1747826577
5+
build_number: 1
6+
commit_message: 'WIP
7+
8+
9+
'
10+
do_not_optimize: []
11+
enable_always_target: true
12+
existing_tasks: {}
13+
files_changed:
14+
- .cron.yml
15+
- taskcluster/config.yml
16+
- taskcluster/ffios_taskgraph/target_tasks.py
17+
- taskcluster/ffios_taskgraph/transforms/beta_releases.py
18+
- taskcluster/ffios_taskgraph/worker_types.py
19+
- taskcluster/kinds/beta-releases/kind.yml
20+
filters:
21+
- target_tasks_method
22+
head_ref: main
23+
head_repository: https://github.com/mozilla-mobile/staging-firefox-ios
24+
head_rev: 3943c2420bd7eb7357e067c9f469346264d6bd5e
25+
head_tag: ''
26+
level: '1'
27+
moz_build_date: '20250521112257'
28+
next_version: null
29+
optimize_strategies: null
30+
optimize_target_tasks: true
31+
owner: cron@noreply.mozilla.org
32+
project: staging-firefox-ios
33+
pull_request_number: null
34+
pushdate: 0
35+
pushlog_id: '0'
36+
repository_type: git
37+
target_tasks_method: beta_releases
38+
tasks_for: cron
39+
version: '140.0'
40+

0 commit comments

Comments
 (0)