Hi all,
Quite a few things have changed since the last geckodriver release
back in January, and I want to spend a few moments looking into
some of the challenges I faced making today’s 0.25.0 release.
Crate dependencies by relative path cause problems when they are
attempted published, as
crates.io needs a specific semver range.
For each release we make this necessitates local changes to Cargo.toml
coupled with "cargo publish --allow-dirty", and this is bad for a
number of really good reasons. I intend to fix this and I’ve gone
into more detail on the bug:
https://bugzilla.mozilla.org/show_bug.cgi?id=1579902#c0
0.25.0 was also released entirely without Travis. Earlier today
we decided to disable all Travis hooks on GitHub, and I’m working
on removing any leftover configuration:
https://bugzilla.mozilla.org/show_bug.cgi?id=1580265
The primary motivation for using binaries built on TaskCluster has
been code signing. With 0.25.0 we are shipping builds signed with
the same key as Firefox on Windows and macOS. We should in the
future set up a process that also publishes the ASC (PGP) key so
downloads can be verified against Mozilla’s public chain of trust.
Releases on GitHub cannot be drafted without creating a new git
tag. To circumvent this I created v0.25.0 which points to the exact
same thing as v0.24.0. We should revisit the discussion to wean
us off GitHub before the 1.0 release.
The Linux builds produced on the TaskCluster signing jobs appear
to be debug builds (>60M in size) which make them unsuited for
publication:
https://treeherder.mozilla.org/#/jobs?repo=mozilla-central&searchStr=geckodriver&group_state=expanded
I don’t know if we have a bug that tracks this?
For 0.25.0 I built the Linux binaries locally and stripped the debug
symbols manually. The 32-bit Linux build using cross-compilation
worked without a hitch:
% cargo build --target=i686-unknown-linux-musl --release
I have a concern we should follow up on that the Linux binaries are
not built using static linking and libmusl on TaskCluster. I didn’t
yet file a bug for this because I’m time-constrained, and before
we do so we should confirm with the build team if it actually matters
that we ship statically linked binaries.
Following the elimination of the libbzip2 dependency, I can’t see
anything of particular concern in a dynamically linked build:
% ldd ldd obj-x86_64-pc-linux-gnu/dist/bin/geckodriver
linux-vdso.so.1 (0x00007ffea78e0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5e351af000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5e351aa000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f5e351a0000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5e35186000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5e34fc5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5e35965000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5e34e42000)
In the past the commit containing the geckodriver version bump has
been deemed the canonical commit from where we have tagged and made
the release. This is no longer the case when we have twice-daily
signing tasks on TaskCluster.
We sign release twice daily for Nightly, and for 0.25.0 I picked
up the first subsequent signing job following the version bump. I
feel there is an argument to be made that releasing geckodriver
should be more flexible than having to wait for the twice-daily
Nightly.
This also has some unforeseen consequences. As whimboo pointed out
to me yesterday, I had in the interim between the version bump and
the next signing rebased and landed a stale patch from a contributor:
https://bugzilla.mozilla.org/show_bug.cgi?id=1529296
This caused an additional change to be included in 0.25.0. In this
particular case there was no cause for concern as the change was
not user-facing, but it’s not hard to imagine a case where an
experimental change intended for the next release lands between the
version bump and the next signing.
The solution I see to this problem is to either sign _every_
geckodriver build, which means we could return to the version bump
being the canonical release commit. But I don’t know how easy or
what impact it would have to sign every build for every push to
central. Alternatively we could have a “special” file that, when
touched, causes a TaskCluster signing job to be triggered. I feel
the input from jlorenzo and RelEng is needed.
When we start development on the next milestone for geckodriver we
should make it a habit to bump the version number immediately after
the release similarly to sccache:
https://github.com/mozilla/sccache/commit/d5b98e7e4b6d75c98d1e275c75922e22e28cf829
This would prevent subsequent builds produced on TaskCluster being
mistakenly branded with the previous version number despite containing
several new changes.
Finally, it comes as no surprise after reading this wall of text
that the instructions for releasing geckodriver are now completely
out of date:
https://firefox-source-docs.mozilla.org/testing/geckodriver/Releasing.html
I don’t feel compelled to update those until we’ve addressed at
least a few of the points raised above.