-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Beta and dev versions in Docker Hub #1286
Comments
I think the idea makes sense. However, there are several open questions:
Thanks for sharing the Twilio link, but I imagine they do not offer any type of support for it, do they? I am not opposing to the idea at all, only thinking how these images should work and under what conditions they can be offiered. For now, we are focusing on Selenium 4, and probably after that, we want to have the Helm Chart merged to this repo. Which means that we do not have the bandwidth to work on this for now. Would you like to formulate a more complete proposal and then maybe a PR? What do you think? |
I suppose this could be done with a scheduled task (e.g., nightly) in your CI server to check the availability of new browser releases. When a new release is detected, the Docker container could be automatically built and deployed to Docker Hub. Is this the process you follow for stable releases? If so, extending it to the beta and dev channel should not be very difficult. I guess it can be done by checking the proper distribution channels. Regarding the support of these images, if the test pipeline fails for a given version, perhaps it is better not to release the image to the Docker hub and wait until the next nightly (hopefully, the problem will be solved by the next version). I am open to contribute, let me investigate a bit more about it. |
There are different projects that have implemented this feature. I think the process they follow is similar, i.e., installing a given Linux package (e.g., Selenoid As you probably know, Selenoid is a golang lightweight implementation of the Selenium Hub created and maintained by Aerokube. They also maintain a set of Docker images for the main browsers (e.g., Chrome, Firefox, Opera, Edge). I also asked this feature (i.e., publish beta/dev images in Docker Hub) some time ago (see issue). At the time of this writing, these images are not available yet in Docker Hub, although we can see how these beta/dev images images are built (see doc): ElasTest ElasTest was a EU-funded project I used to collaborate. Among other features, the ElasTest project maintained Docker images for Chrome and Firefox, including beta and dev channels (see Docker Hub). Although it seems these images are not maintained anymore, we can see the how these images were generated:
@diemol Do you think these approaches could fit in docker-selenium? |
That makes sense, I think we could have separate GitHub workflows to build., test and push those images. Just bare in mind we won't offer Opera as the |
On the same vein, I can no longer tell which tags for the nodes are safe to use with a Selenium 3 grid. Seems recent ones past "latest" are all from beta 4 base but nothing indicates they are built on beta 4 ie 91.0 that my organization just tried to deploy and failed. Had to roll it back |
@Luckless, not at all. Images for Grid 3 are either with |
A recent PSA in the discuss-webrtc forums has shown a perfect example to add into the Motivation section of this bug report: Being able to run our Selenium tests with Firefox Nightly would have been great, in order to anticipate all problems that will probably arise from such big update on their side. So consider this a contextualized "+1" |
As this has gone quiet since last November... This would greatly help us. We'd like to be able to run our automated tests on the next stable version (i.e. Chrome Beta channel) in our framework, to test a version before Google pushes it to Stable; we need a standalone-chrome beta container for this. Another contextualized +1. |
I agree it'd be great to have this, we "just" need help implementing it :) |
One thing I've learned by working on the multi-arch-images is that it may be easier to investigate this first on Firefox. The same geckodriver has been used since I believe Firefox 53 and still works on Firefox 98+. Mozilla hasn't released a geckodriver since September 2021. It's very likely that we'd only need to fetch the latest Firefox nightly in most cases and only need to deal with a geckodriver update perhaps once every 3 to 6 months. To the best of my knowledge, Chrome, on the other hand, requires a chromedriver that matches the Chrome version within at least one major version. A quick Google search shows that the latest Google Chrome is v101 if installed using google-chrome-unstable. Also, the Chromedriver download page shows the latest chromedriver as v100. Maybe someone can build the Chrome images with those versions to validate if this is indeed true or not. The corresponding versions for Chrome and Chromedriver can be passed into docker build as build arguments. Here they are in the code: docker-selenium/NodeChrome/Dockerfile.txt Line 18 in 0bdf761
docker-selenium/NodeChrome/Dockerfile.txt Line 36 in 0bdf761
After building selenium/base and selenium/node-base, you should be able to build node-chrome and standalone-chrome using the below build commands:
After building, start and run the container using:
At the time of this writing, Chromedriver 100.0.4896 and Chrome 101.0.4929.5-1 are the latest. If someone tries to build it later, see the above resources in the second paragraph to derive what the latest versions are. |
Some notes that may help with this implementation:Obtaining browsers and drivers (for x86_64 platform only)
Possible build commands for Beta images:The Dockerfiles already allow passing in a CHROME_VERSION and FIREFOX_VERSION at build time.
Corresponding beta versions for Chrome, at the time of this writing:
Corresponding beta versions for Edge, at the time of this writing:Beta msedgedriver version is different than Beta MS Edge browser version:
Unexpectedly, Beta MS Edge browser is an older version than stable:
But the Beta edgedriver is newer than the stable edgedriver
Automation can be used in tagging:
Tagging Beta ImagesAnd tags could look like this, if we follow the existing tagging paradigm:
But this raises some questions regarding whether or not there are any challenges with maintaining the same level of tagging granularity with Chrome beta images. The number of tags for each Selenium release or browser update increases significantly. However, releases are managed by a bot, so this approach may not be problematic in most cases. What about when Selenium 5.0-beta is released? Do we need to differentiate between Selenium-5.0-beta but with Chrome stable? How do we communicate this in a clear manner? Tagging does indeed get complicated when we consider that different components may be independently "beta" or "stable release". Scope of feature request - Beta Chrome and Firefox onlyMy thought is to scope this feature request to just the Beta channels for Chrome and Firefox, since they're more likely to be more stable than the dev/nightly channels. If it works well, and if the community continues to request nightlies, we can then take that into consideration. We'll need to do the same assessment on the Firefox beta and stable versions that we've done on Chrome and Edge. Edge seems to be rather inconsistent, so we may want to leave Edge out for now. |
Modify Dockerfile for NodeFirefox to include FIREFOX_VERSION "beta-latest" as an option:
Then build the image for Firefox beta as follows:
Afterwards, we confirm beta-latest is newer than latest:
Unlike the Chromium-based browsers, the geckodriver update-cycle is significantly longer, so we don't need to be as concerned with matching geckodriver versions with browser versions. Based on this information, it seems that Chrome and Firefox beta could perhaps be supported on a trial basis? |
Thank you for the comments and research, @jamesmortensen! I believe we could offer the three browsers on beta and dev. If Edge is not consistent on their versioning, we cannot do much about it. And in general, we won't be offering support for beta and dev images, if there are any issues related to those browser versions, well... they are beta and dev versions, issues are expected. Regarding, image tagging. When we were doing alpha, beta and rc releases for Selenium 4, this was the convention being used: But for simplicity, I think we should just tag the images with
Also, we should generate this images periodically, like every 2 days or so. Automatically. I do not think we need to create a release tag for this. They simply get generated and pushed to Docker Hub. What do you think? |
Hi @diemol I think what you're proposing would be a lot simpler. We don't need a release and we also don't need to maintain historical beta versions. A rolling tag sounds a lot simpler to maintain. I'll create another workflow, which runs on a schedule, in GitHub actions to build just the base, node-base, node-chrome/firefox/edge, and the standalones for those 3 browsers. If the tests pass, then I'll run another job to push them to Docker Hub. I'll work on these changes. |
Hi @diemol this is setup as follows:
Unless there's any changes, I believe this is ready to be merged. |
🚀 Feature Proposal
It would be amazing if we could pull the official selenium-docker images for the beta and development versions of the major browsers (i.e., Chrome, Firefox, and Edge) from Docker Hub. It would be also great if we could have a new tag for the current stable version.
Motivation
For many companies, it is key to have the possibility of checking if a web application continues working as expected in the next stable release. This process can be tricky, but it can be easily done with Docker containers. Companies like Twilio are already maintaining similar Docker images.
Example
Currently, we can pull a given version of the major browsers as follows:
My proposal requires to include and maintain new tags:
stable
,beta
(typically stable+1), anddev
(typically stable+2):The text was updated successfully, but these errors were encountered: