This document is for Release Engineering, on how to maintain this repo, and how to deal with ad-hoc signing requests.
- Find out what needs signing, and why
- Make sure the signing format is a supported signing format. (These are currently both Firefox Release and Firefox Nightly cert formats.)
- Make sure this is a valid request. (e.g. check the requester identity on PMO, ensure the binary is related to the requester organization, etc)
- Get the binary to sign. This can be via bug attachment, taskcluster artifact link, magic wormhole
- Calculate the checksum and the filesize:
openssl sha256 <filename> cat <filename> | wc -c
- Create a pull request, adding a new signing manifest to the signing manifest directory. Use the template and create a new
.yml
file. - Get review, and merge.
- Promote your manifest to get a valid release signature. Someday these steps will be in shipit, but for now:
- Go to the merge taskgroup. Generally this is linked from the status symbol of the latest merge to master: a yellow dot for in-progress, a red X for failure, and a for success. Click it.
- Click on
details
of the decision task, thenView task in taskcluster
to go to the decision task. This task will need to be green before we can proceed. - Go to the task group view: Either click on
Task Group
at the top left, or change thetasks/TASKID
totasks/groups/TASKID
in the url bar. - Click the vertical three dots in the lower right, and choose
Promote an adhoc signature
. You will need to be signed in for this to work. The sign-in link is in the top right. - In the
Promote an adhoc signature
page, fill in theadhoc_name
. This will match the name of the new signing manifest, minus the trailing.yml
. So if you just addedbug12345.yml
for this signing request, youradhoc_name
would bebug12345
. - Click
Promote an Adhoc Signature
in the bottom right. This will spawn an action task. Once it goes green, go to the action task group by changing the url fromtasks/TASKID
totasks/groups/TASKID
. (TheTask Group
link in the top left will bring you to the decision task group, not the action task group.) Therelease-signing
task will have the signed artifact.
If the fetch task fails with an error similar to:
[task 2022-05-09T18:26:34.476Z] Downloading https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/ZkERnaA8TDqw53rZVdG1lA/runs/0/artifacts/public%2Fwindows%2Finstaller%2FMozillaVPN.msi
[task 2022-05-09T18:26:35.075Z] https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/ZkERnaA8TDqw53rZVdG1lA/runs/0/artifacts/public%2Fwindows%2Finstaller%2FMozillaVPN.msi resolved to 21618688 bytes with sha256 50aab8a6508f5155c275e25e490bc41a112223b060c708cee3883cbd294940eb in 0.599s
[task 2022-05-09T18:26:35.078Z] Traceback (most recent call last):
[task 2022-05-09T18:26:35.078Z] File "/usr/local/bin/fetch-content", line 675, in <module>
[task 2022-05-09T18:26:35.079Z] sys.exit(main())
[task 2022-05-09T18:26:35.079Z] File "/usr/local/bin/fetch-content", line 671, in main
[task 2022-05-09T18:26:35.079Z] return args.func(args)
[task 2022-05-09T18:26:35.079Z] File "/usr/local/bin/fetch-content", line 554, in command_static_url
[task 2022-05-09T18:26:35.079Z] download_to_path(args.url, dl_dest, sha256=args.sha256, size=args.size)
[task 2022-05-09T18:26:35.079Z] File "/usr/local/bin/fetch-content", line 226, in download_to_path
[task 2022-05-09T18:26:35.079Z] for chunk in stream_download(url, sha256=sha256, size=size):
[task 2022-05-09T18:26:35.079Z] File "/usr/local/bin/fetch-content", line 200, in stream_download
[task 2022-05-09T18:26:35.079Z] url, size, length))
[task 2022-05-09T18:26:35.079Z] __main__.IntegrityError: size mismatch on https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/ZkERnaA8TDqw53rZVdG1lA/runs/0/artifacts/public%2Fwindows%2Finstaller%2FMozillaVPN.msi: wanted 21453995; got 21618688
[taskcluster 2022-05-09 18:26:35.351Z] === Task Finished ===
[taskcluster 2022-05-09 18:26:35.479Z] Unsuccessful task run with exit code: 1 completed in 8.074 seconds
This could be due to a network error, mitm attack or (most likely) file compression. To resolve this:
- Make sure the file was decompressed when you downloaded it locally to check the hash / size. Either download it through Firefox or use
curl --compressed
. - If the sizes still don't match, try re-running the task to rule out a network intermittent.
- If the sizes still don't match you may be the target of a mitm attack. Try using a VPN and/or avoid public WiFi.