Add github cache actions for build dependencies
Add github cache actions for build dependencies
Add github cache actions to speed up build and possible test times when pushing changes to Apache Celix.
Background
Workflow runs often reuse the same outputs or downloaded dependencies from one run to another. For example, package and dependency management tools such as Maven, Gradle, npm, and Yarn keep a local cache of downloaded dependencies.
Jobs on GitHub-hosted runners start in a clean runner image and must download dependencies each time, causing increased network utilization, longer runtime, and increased cost. To help speed up the time it takes to recreate files like dependencies, GitHub can cache files you frequently use in workflows.
To cache dependencies for a job, you can use GitHub's cache action. The action creates and restores a cache identified by a unique key. Alternatively, if you are caching the package managers listed below, using their respective setup-* actions requires minimal configuration and will create and restore dependency caches for you.
Source: https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows
Implementation hints
Try to add cache actions for the following build results:
apt installin the Linux ubuntu builds (https://github.com/apache/celix/blob/master/.github/workflows/ubuntu.yml), this is for the "Configure and install dependencies" stepbrew installin the masos builds (https://github.com/apache/celix/blob/master/.github/workflows/macos.yml), this is for the "Install dependencies" step ~~-conan installin the Linux ubuntu and coverage builds (https://github.com/apache/celix/blob/master/.github/workflows/ubuntu.yml and https://github.com/apache/celix/blob/master/.github/workflows/coverage.yml), this is for the "Configure and install dependencies" step.~~ Done in #628
Maybe there is already some existing actions for this and if not try to store and recover the apt, brew and conan cache dirs.
Next to caching, could it maybe help to offer a apache/celix-build container image where all the dependencies are already preinstalled? This can be used during the CI build of Celix (where dependencies are not re-installed every build and can potentially also be used by current and new developers working on Celix ?
Next to caching, could it maybe help to offer a
apache/celix-buildcontainer image where all the dependencies are already preinstalled? This can be used during the CI build of Celix (where dependencies are not re-installed every build and can potentially also be used by current and new developers working on Celix ?
That is an interesting idea. I believe this is very doable and there might be some overlap with adding Gitpod support (also based on building in a container image). One of the image layers could be the installation of Conan Celix dependencies. I also expect (note assumption) that caching an image is well-supported and documented.
That being said, I would also like to retain the build on Ubuntu and MacOS systems. In my opinion, this demonstrates and proves that Apache Celix is usable on those systems. In other words, +1 for adding a celix-build image and using that in our CI, but in my opinion, this should be complementary to the already existing Ubuntu and MacOS builds.