-
-
Notifications
You must be signed in to change notification settings - Fork 5.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
RFC: Windows CI #6028
RFC: Windows CI #6028
Conversation
It looks like |
Tried that, see https://ci-beta.appveyor.com/project/tkelman/julia/build/1.0.96 - still "key not found: HOMEDRIVE", but a less-threatening warning about boilerplate git version info rather than "fatal". |
I did not expect it to to fix the main problem, but I thought it was nice to not have useless errors. The version_git.sh file there to create the This might be a error that should be fixed anyway. The problem is that I do not have a Windows computer. |
Sure, though that git info would be useful if you do both CI and automatic deployment of successful builds with the same setup. It doesn't seem as though the Windows binaries are automated right now, as it can be several weeks between updates. It's something having to do with the CI environment. The version of Git they have installed isn't from Cygwin, so it has some configuration that I'm not familiar with. I tried installing Cygwin's git, but that was giving errors about not finding some shared libraries. When I run my cygwin_build.sh script in Cygwin locally I don't see anything about HOMEDRIVE, but I am getting a barrage of access violations. It may be that the binary version of LLVM or OpenBlas that I'm using has some problems. Compiling both from source avoids the access violations but is much too time-consuming for CI purposes. This same script and downloaded binaries might work for a Linux-to-Windows cross compile too, if you can get recent-enough MinGW compilers and Wine? |
There is also #5629 where I use libgit2 to create the |
Wow, it's awesome when something magically shows up the next day!
Yes, the download here is a tgz.
this would be great.
seems rather limiting... Thanks for taking this on! (we should have Windows nightlies going again tonight or tomorrow, but I don't think it's feasible to do CI on that build system). |
Very cool. How difficult would it be to set up windows CI for packages as well? Can this be done now using the 0.2 binaries? |
Good to know. Worth looking at then, though the recent guidance by @cmundi in #6019 concerns me because of the need to restart MSYS2 multiple times.
Is that cross-compiling in Jenkins or a cron job somewhere? Had a thought this morning that maybe the most-recent binary Julia download is the best place to get Julia's dependencies, assuming they change more slowly than Julia itself. Then an MSVC build might also be feasible, though I have very little experience using MSVC with a no-bash, no-gmake, non-autotools build system. There's a src/Windows.mk file that @vharavy and @tknopp have worked on that might work with nmake?
Probably, worth a try. Wouldn't need to bother with Cygwin/MinGW if you're not compiling any Fortran dependencies. Have a guinea-pig package with good tests you'd want to play with first? |
It'd be great to have windows tests for packages
https://github.com/JuliaLang/JSON.jl would be good candidate. No dependencies, native or julia. and decent test coverage. |
@tkelman - The need to restart MSYS[2] shell can be eliminated. Here's what I think it takes to support continuous integration:
|
Thanks for the input @cmundi.
Do you mean pre-installed on AppVeyor's VM's? I don't think this is feasible, since they're primarily targeting .NET developers rather than cross-platform projects. If I knew more about NuGet or Chocolatey then maybe MSYS2 could be set up via those package managers in a ready-to-go way? Could contact AppVeyor and make a feature request to support MSYS2, but I suspect they'd respond by saying to make a package for it.
This won't show up if you're using a binary openblas. I have yet to see this one in my Cygwin-to-MinGW cross compiles even with openblas from source, otherwise I could help find where in the openblas build it happens. Is there more info on this in a separate issue, either here or on openblas' tracker? |
AppVeyor is definitely .NET centtic. That's not a bad thing; I'm just not I have not had time to chase down the exact location of the OpenBLAS build
|
What else is there? Wercker had a beta on Windows that actually started up inside Cygwin, but they closed it down for now. Jenkins or TeamCity take a lot of work to get set up and need dedicated hardware (AFAIK). Running a cross-compile build + Wine in the Travis matrix should also work, but it might miss some things that only happen on an actual Windows box? Dunno. |
All of the CI tools I've see require significant effort. Some, like One thought which might be helpful or not is separating testing from
|
Sounds complicated. I personally like the "CI as blueprint for dependencies and how to build" philosophy, but maybe others differ.
Thanks for the suggestion. Here's what I put together as a package-level appveyor.yml. I ran into |
The build for Julia itself is looking much better, now using the most recent Julia binary download as the source for almost all of the dependencies. It's getting to the tests, failing due to #6016. https://ci-beta.appveyor.com/project/tkelman/julia/build/1.0.130 |
Thanks @tkelman, that's brilliant. (Although the I'll try to enable this in the JSON.jl repo. I don't think many Julia packages use OS specific functionality, but at the very least, testing a broad set of packages will provide a decent smoke test of the Julia windows build. Should we try to set up a chocolatey/NuGet package for julia nightlies and releases, like we do for ubuntu? Is that easy to do? Might make it easier to write and maintain the appveyor scripts. |
Trying to run a slightly more complex package on AppVeyor seems to produce a crash inside LLVM : https://ci-beta.appveyor.com/project/aviks/ito-jl/build/1.0.4 |
I think that's just PowerShell being weird. Lots of *nix commands (and Pkg in Julia) tend to print informational messages to stderr, but still return success. PowerShell seems to catch everything that goes to stderr as a
Agreed.
Either that or a mingw64 rpm. Chocolatey or NuGet wouldn't (AFAIK) help people who are cross-compiling from Linux, an rpm would.
No idea, haven't tried it.
Don't know enough about LLVM to have any idea on that one, can you replicate it outside of AppVeyor? It might be a case of LLVM trying to use an instruction that AppVeyor's VM can't handle. |
Looks like 5809f6f resolved the test failure from #6016, but now it's failing in the numbers tests, most likely due to #3081. There's a patch for this problem at |
Nope, the tests run successfully on Windows 7 with the latest Julia 0.3 binary snapshot. |
@tkelman that patch doesn't exist outside of Julia's codebase. you would need to compile your own (adding encouragement to get this merged on upstream issue might also help) |
@vtjnash Right, I can see that. The upstream issue is http://llvm.org/bugs/show_bug.cgi?id=16168? Was the patch submitted via Phabricator as suggested there? I attempted a build using LLVM 3.4 but ran into build errors that look like API changes https://gist.github.com/tkelman/9405781, and I'm building with 3.5svn right now. I also tried a 32-bit build here https://ci-beta.appveyor.com/project/tkelman/julia/build/1.0.176 but ran into one of the linear algebra tolerance issues addressed in #5902. |
You'll lose progressively more Windows features if you try upgrading to a newer version of LLVM. Phabricator link: http://llvm-reviews.chandlerc.com/D1998 |
@vtjnash : Are you saying Julia is locked into an old release/fork of llvm? If so, is this just a temporary fact while the core devs focus on building out the language? Or is this something which requires a fix in llvm? kind of looks that way... (please pardon my naivety, I've just started studying the pipeline for julia and have only ever dabbled with llvm before) |
Only on Windows, where we have tended to only support one version of LLVM at a time due to the complexity of the patches required for error handling and i128 support. |
Thanks for your explainng about the LLVM patches. Everything is harder on
|
I clearly have no idea what I'm doing when it comes to rebasing... |
Once you've signed up you go to https://ci.appveyor.com/projects/new, hover over JuliaLang/julia and click add. Then we merge this and see what happens. |
@StefanKarpinski or @alanedelman will have to do the signup and put the credit card details, since I do not have them. Hopefully will happen soon, or ping by email or on this thread. |
You don't need credit card to do Pro trial. -Feodor On Sun, Nov 23, 2014 at 2:16 PM, Viral B. Shah [email protected]
|
But we will need a credit card to upgrade from the trial, the only part we still need to evaluate is setting it up on a more permanent basis and seeing how well it works when running on every commit and pull request. It should probably be Stefan not Alan to sign up, since it looks like Alan doesn't even have commit credentials here. |
@ViralBShah I added all the necessary hooks here and on all other JuliaLang packages for which I might at some point want to turn on AppVeyor, so you may as well remove my admin privileges before I misclick something. Unless @StefanKarpinski can get to activating this soon since there's an off chance I may need to adjust something once this is turned on. |
What do I need to do to get this paid for? |
Once you've signed up via https://ci.appveyor.com/signup for a Pro trial, log in either via github auth or create a new appveyor-only account, then under your name in the upper right click Plan. @FeodorFitsner how do we request the open-source discount? I think you can add me as a collaborator to your appveyor account so I can modify the settings, under Team. Feodor can you confirm whether I should be added as User or Collaborator, in order to be able to modify CI settings but not access any billing info? |
Sure, let me guys configure this plan for you. So, it's Pro with 50% off, right? |
Yes, Pro with open-source. No need for private projects but we do want the high-performance build environment. |
Right. While logged into AppVeyor use this link (https://ci.appveyor.com/plan/order/oss_pro_monthly) to purchase "Pro FOSS" plan. It's on dedicated Hyper-V. |
Ok, I did that for my AppVeyor account linked to my GitHub account. There's a bunch of options under https://ci.appveyor.com/team and unclear which I should choose. There's also the tantalizing "GitHub teams" option, which seems like it might make it easy to give all JuliaLang contributors the ability to mess with our AppVeyor setup, which would be quite handy. |
I added the JuliaLang/Contributors team so maybe that gives people who can push to Julia access. |
Yay! It sounds like we're in business then, I see it going at https://ci.appveyor.com/project/stefankarpinski/julia/history I do not see the ability to adjust the settings though, so that part didn't quite work yet. |
I added you as an Administrator using your kelman.net email address. |
Ah, there it is, I just need to log out then log back in and select which account to log in under. Slightly odd system. |
Yay! Thanks everyone for making this happen. |
Let's see how long the queue gets. We could turn it off for PR's and only run it on master if the wait gets too long. What would be nifty is an @AppVeyorBot we could ping on pr's to selectively run only on the pr's where it makes sense to. |
Pretty cool! |
This is great! |
cc @StefanKarpinski @FeodorFitsner I'm seeing a warning banner on AppVeyor today:
Can we make sure over the next couple days that the subscription is set up properly and we stay on the fast build environment? Assuming people are happy enough to continue with AppVeyor, I think despite the occasional timeout it's definitely been worth having enabled. |
Just in case I've sent Stefan the link to re-subscribe to the same plan. It's holidays right now, so if you need more days to sort it out let me know. Merry Christmas and Happy New Year! :) |
Thanks so much Feodor, you too! |
I would like to say that despite the issues we have seen, appveyor is great to have and we will be certainly staying with it. |
That's an odd way to say it, since "I would like to say" usually ends with a "but". However, I agree that AppVeyor has been an extremely crucial for improving the quality of the Windows side of Julia, even just in the short time that it's been active. |
I'll deal with this shortly – we're in the middle of switching bank accounts. Does it make sense to switch to a JuliaLang account on AppVeyor? It feels a little weird to have everyone using my personal account. Not that I mind, it's just confusing. |
If AppVeyor supports organization-named accounts, that would make sense to me. |
Travis can't run on Windows yet, and the MinGW cross-compilers in the Ubuntu repository are a few versions old. AppVeyor recently launched a beta for a Windows-based CI system very similar in functionality to Travis. It's pretty straightforward to get Cygwin and the necessary MinGW compiler packages installed from the appveyor.yml file. MSYS2 could be tried here instead of Cygwin, I don't know whether there's a non-interactive version of the MSYS2 installer.
The difficult part is getting a Windows build of Julia to run in a reasonable amount of time. The script cygwin_build.sh downloads binaries for as many dependencies as I could find. A decent number have mingw64 rpm's available, but for the largest two (LLVM and OpenBlas) I had to dig around a little. Any volunteers want to try putting together a mingw64-llvm or mingw64-openblas (or suitesparse, arpack, etc) rpm, either in Fedora or the OpenSuse build service?
The initial time limit for free plans in AppVeyor is only 10 minutes per build, and it takes almost half that time just to install Cygwin and packages, and download dependency binaries. If you hit the time limit a few times it looks like they bump you up to 30 minutes.Here is the build result in the current state, some errors are happening related to version_git at the end, andkey not found: "HOMEDRIVE"
whatever that means. Any suggestions?Edit: they increased the time limit to 30 minutes for everyone, I just happened to notice it immediately as they made that change.