-
Notifications
You must be signed in to change notification settings - Fork 54
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
Use Github actions to compile and push all supported precompiled libraries #102
Use Github actions to compile and push all supported precompiled libraries #102
Conversation
13e9c3c
to
c88ec29
Compare
I haven't had a chance to try this, but I wanted to add an FYI that this is finally possible using darling. At time of writing this, precompiled binaries for Debian systems are available. The process of getting the rest of the tools setup may take a while in CI (e.g. Xcode xip, Command Line tools) and (for performance reasons) likely require a caching between builds.
We may choose to deprecate support for Solaris by only providing outdated binaries until the API changes. If we do this, I'd recommend we bump to version 3.0.0 to signify a cut-off to any users. Studies show it as < 0.1% of "known" servers, it probably won't be missed. |
Linux Binaries
Windows Binaries
MacOS Binaries
|
Github actions allows
I am not sure I grasp the distinction between MacOS, Xcode and SDK version. Would you care to confirm that what is needed is listed here? |
... or we choose a non-Ubuntu machine with older ABI, such as Centos, Redhat, etc. I'm not sure if these are options, but 18.04 is too new. For example, Ubuntu 16.04 is supported until 2023. If Linux offers a way to use older ABI that would also work (and possible better for our tutorials, older OSs can be hard to get packages and updates for)
Unfortunately it is not listed in the link you provided. We use |
fff6063
to
426fd3a
Compare
For Linux/Windows targets I'd with the docker route. This IMO is a good way to provide really portable script that could also go to the wiki, because docker is available for windows and MacOS too. docker run --rm --workdir=/jssc --volume $PWD:/jssc ${{ matrix.image }} bash -c \
' apt-get update && apt-get install --yes mvn openjdk-11-jdk-headless ${{ matrix.packages }} && \
/mvn/bin/mvn -B clean install -P ${{ matrix.profile }} ' Clean docker images for Ubuntu:14.03 with predictable preinstaleld software are easily available. |
I think this is good for manually publishing a release, but I do not think it is a good baseline for people interested in developing, as the complexity of troubleshooting becomes a game of debug "inception", e.g. Docker -> Ubuntu -> Maven -> Ant -> Cmake -> Clang, etc. Docker instructions do help keep the CIs in good shape, and many people prefer them to VMs these days, but I just don't want to minimize the difficulties it can potentially create. :). |
But yes, let's please add anything that's helpful to the wiki. I'm happy to test any commands on other platforms if needed. Note: At time of writing this the newer M1 macs would pose some limitations for example, Ubuntu 20.04 running in a container or VM on ARM64 (M1) can build This has less to do with Docker and more to do with the toolchain availability, but these things can be less obvious when executing a small script versus setting up the environment from scratch. |
426fd3a
to
29f3b60
Compare
I have updated the pipeline. Current version builds the libraries in the following way:
The following modifications vs the wikis were required:
It would be great if someone with access to non-x64 pc would verify if the artifacts commited to branch |
I believe you mean
Added to tutorial.
I'm not sure I understand, I believe this is already part of our tutorial.
Maven is not available for Solaris 10. We can archive that tutorial if we plan to drop support for Solaris 10.
Understood. |
29f3b60
to
72fddc7
Compare
72fddc7
to
20dfefe
Compare
b6d5c3a
to
854e3ad
Compare
Thanks you for the version improvements. I've left some feedback on the cmake stuff, with a request to restore the old functionality as a fallback for cmake standalone builds where this version information would otherwise be unavailable. |
854e3ad
to
0f9f4da
Compare
… deprecated internal methods for partial version extraction.
…r all supported architectures
0f9f4da
to
ae95f9c
Compare
Current project setup treats native libraries as part of the source, and enforces commiting the artifacts alongside the source. Naturally this may lead to hard to detect errors resulting from commiting libraries built on wrongly configured environment, unintended differences in provided functionalities between platforms or even introduction of malware by malicious "hypocrite committer".
The proposed solution to this problem is to only allow transparent, reproducible Github Action to build and commit the libraries. This way anyone can review the script and the logs resulting from the operation.
There are currently 12 native library variants, and to my knowledge, no cross-compiling options that would match them all from a single machine (compilation targetting MacOS and Solaris is not possible from any other OS), so the solution is to set up several runs on different machines, each compiling relevant version.
In this pipeline the following happens:
Now it is up to the maintainer to either merge the branch, or simply delete it if further testing reveals any problems. Not merging to the master too often should prevent the repository from swellling in size too much. As the action is also part of the fork repositories, each developer can execute it on their own repo - no sharing of CI access is required.
Word about Solaris:
I was unable to find any information on how to configure cross compilation targeting Solaris on Linux, but it seems there is a way to run VirtualBox VM right inside the Github Actions. The process is terribly slow (takes about 30 minutes to set up VM, download dependencies and run the job - compared to 30 seconds it takes on other platforms), and not 100% reliable (issues), but it does work with result like this.
Goals:
Non-Goals: