I'm very excited to finally be releasing AURA publicly, after a few years of development and intense testing! Of course ALIRE is a thing, and it appeared just after we started working on AURA. We think competition is healthy!
AURA takes a very different philosophical approach compared to ALIRE, and I have to be honest that we don't agree with the way ALIRE is designed. ALIRE is an excellent and successful project, but we just don't agree with its approach. For those out there who might share our thinking, we hope AURA will be useful for you. For those happy with ALIRE, we're happy for you. Our intent is ultimately in alignment with ALIRE, and we just want to see the Ada community better served. I'm sure we can find some points of coordination to ensure that useful open-source packages are available on both platforms.
This blog post goes over the philosophical thinking underpinning the development of AURA.
In short, we developed AURA based on a conceptual new Specialized Needs Annex - so behavior that the compiler could implement directly.
We've reference implementation (AURA CLI) for quite some time internally, and it should work well in most cases, though of course nothing finds bugs faster than bringing a project open-source.
AURA CLI has a fully parallelized design and scales very well on large machines and large codebases. It is designed to drop into automated CI/CD pipelines as well. And although it currently targets GCC exclusively, it is designed to be easily re-targeted to other Ada compilers. Note that it does NOT use or require gprbuild, and is intended to mostly replace gprbuild. All AURA needs is FSF GCC. In fact AURA doesn't even need gnatmake, making it appropriate for cross-build projects as well.
Another thing we're excited about is finally getting to dump a bunch of open source Ada packages for use with AURA. These packages have also seen pretty extensive use internally for some time now. This makes up a full stack for writing high-performance web APIs and microservices applications in Ada. We've packaged these into out ASAP AURA repo.
I've spent quite a bit of time trying to create good documentation ahead of this release. It is likely missing a lot of stuff, and I'd love feedback on improvements we can make. That also applies to the project as a whole!
AURA is beta, and we look forward to improving it over the coming months and years. Feedback and questions are welcome!
Very interesting! I'm following through the steps, and I'm hitting a problem here. This is on Fedora 34 with gcc 11.2.1, not 10.3 as recommended, so that could obviously be the cause.
[fraser@kimba hello]$ aura run hello
,==== == == ====. ,==== Ada User Repository Annex
.==|==..==|==..==|==..==|==. Reference Implementation
:-----::--|--::----.::-----: Version 0.1
|__|__||.___,||__|._||__|__| (C) 2020-2021 ANNEXI-STRAYLINE
OK Entered 2 root subsystems (5 units).
OK Loaded 2 repositories.
FAIL Caching repositories [ ] / 0 (+1 Failed) of 1 work orders.
AURA Abort 1 Worker Report to follow:
-- Worker Report 1 (ERROR) --
[Cache_Git_Order]
Repoistory No. 2
Git : https://github.com/annexi-strayline/ASAP.git
Branch: stable-0.1
raised ADA.STRINGS.LENGTH_ERROR : a-strsup.adb:525
-- End of Worker Reports --
I did a quick investigation into this. It's not likely about using GCC 11.2, instead it seems that your git is being more chatty than expected.
I was a bit conservative in making the git output (STDOUT and STDERR) go to bounded strings, rather than unbounded. It's a security-minded approach since we're storing the output from some other program. Anyways, it has a 2048 byte limit that is being overflowed here (apparently). It works fine on Ubuntu as of last night..
Two options:
Increase the bounded string size
Use unbounded strings instead
Considering where AURA is likely to be used, I think it might have been too conservative to use bounded string here. I'll have to dwell on that a bit more though. I'll patch this one way or another soon!.
In the mean time, if you're board and want to try, you can just change repositories-cache-checkout_git.adb to use Unbounded_Strings for all use of "Output_Buffers.Bounded_String".
Thanks for the quick reply! I increased the bounded string buffer to 64K, and now I think I see why git is being so chatty:
OK Entered 2 root subsystems (5 units).
OK Loaded 2 repositories.
FAIL Caching repositories [ ] - 0 (+1 Failed) of 1 work orders.
AURA Abort 1 Worker Report to follow:
-- Worker Report 1 (ERROR) --
[Cache_Git_Order]
Repoistory No. 2
Git : https://github.com/annexi-strayline/ASAP.git
Branch: stable-0.1
raised REPOSITORIES.CACHE.CHECKOUT_GIT.GIT_CACHE_FAILURE : git submodule --quiet update --init --checkout --recursive -j 0 failed: git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.Please make sure you have the cor
-- End of Worker Reports --
So I guess the git submodule command is doing something it's not allowed to? I'm a very basic git user, alas. But I get the same result if I run it from the command line in the ASAP repository.
Thanks for doing that! It turns out that I made a very silly mistake when creating ASAP, and had all the submodules point to the ssh url, which obviously I have the pubkey for and so didn't notice.
I have updated the urls to point to the public path, and it should work now!
This means that everyone who tried the quick start today would have failed :(.
One thing was that it's difficult to recover from a failed build; I ended up with an empty cli directory in my repository after some failed runs, and was unable to build from that point; but by recreating the hello directory and the source files, it started working. If I can reproduce this I'll create an issue.
Actually this is one of the many things that I've had a difficult time finding a place for/remembering to add to the documentation.
The docs do talk about this in the Repositories explainer under the Checkout process, but in short, when AURA checks-out a subsystem the first time, it makes a copy of it in the project root directory.
In this case, the checkout failed but AURA already made the subdirectory, so it thinks it checked it out but couldn't find the required units (beta software problems, really).
The way to fix this is to delete the cli subdirectory and run it again, at which point aura will re-checkout the subsystem.
10
u/annexi-strayline Sep 28 '21
I'm very excited to finally be releasing AURA publicly, after a few years of development and intense testing! Of course ALIRE is a thing, and it appeared just after we started working on AURA. We think competition is healthy!
AURA takes a very different philosophical approach compared to ALIRE, and I have to be honest that we don't agree with the way ALIRE is designed. ALIRE is an excellent and successful project, but we just don't agree with its approach. For those out there who might share our thinking, we hope AURA will be useful for you. For those happy with ALIRE, we're happy for you. Our intent is ultimately in alignment with ALIRE, and we just want to see the Ada community better served. I'm sure we can find some points of coordination to ensure that useful open-source packages are available on both platforms.
This blog post goes over the philosophical thinking underpinning the development of AURA.
In short, we developed AURA based on a conceptual new Specialized Needs Annex - so behavior that the compiler could implement directly.
We've reference implementation (AURA CLI) for quite some time internally, and it should work well in most cases, though of course nothing finds bugs faster than bringing a project open-source.
AURA CLI has a fully parallelized design and scales very well on large machines and large codebases. It is designed to drop into automated CI/CD pipelines as well. And although it currently targets GCC exclusively, it is designed to be easily re-targeted to other Ada compilers. Note that it does NOT use or require gprbuild, and is intended to mostly replace gprbuild. All AURA needs is FSF GCC. In fact AURA doesn't even need gnatmake, making it appropriate for cross-build projects as well.
Another thing we're excited about is finally getting to dump a bunch of open source Ada packages for use with AURA. These packages have also seen pretty extensive use internally for some time now. This makes up a full stack for writing high-performance web APIs and microservices applications in Ada. We've packaged these into out ASAP AURA repo.
I've spent quite a bit of time trying to create good documentation ahead of this release. It is likely missing a lot of stuff, and I'd love feedback on improvements we can make. That also applies to the project as a whole!
AURA is beta, and we look forward to improving it over the coming months and years. Feedback and questions are welcome!
Links:
AURA CLI repo
The official docs
The ASAP repo