No description
Find a file
Andrew Walsh c51c800bea
Dev (#67)
* Fix permission denied error.

* Fix permission denied error. (#51)

* Remove compression from file caching. (#53)

* Draft of postinst support from issue #44.

* Remove bad option.

* Removed extraneous line.

* Cover no packages edge case when writing manifest.

* Fix postinst bugs and add docs to lib.

* Made cache directory variable and more refinements to postinst.

* Update deprecated option.

https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

* Rollback accidental commit of new postinst feature.

* Minor edit ands full install script execution FR.

* Fix execute_install_scripts message to show the right param name.

* Fix param check.

* Minor fix to doc.

* Upload action logs for debugging.

* Make artifact names unique.

* Add debug option.

* Update description.

* Debug package list issue.

* Rollback 76128c60a1

* Revert outputs set behavior to see if it fixes outputs issue in dev.

* Restore updated outputs behavior. So strange it is working when I revert.

* Fix bugs in install script execution.

* Add error suppression on file testing.

* Debug feature.

* Link to the issue that started the postinst troubleshooting.

* Describe action version usage.

* Fix package outputs command.

* Execute installation scripts and debug mode features. (#64)

* Provide the ability to call Debian package manager installation scripts (i.e. `*.[preinst, postinst]`).
* Introduce a debug mode that runs the scripts in verbose mode and uploads the logs for retrieval.
* Updated README to reflect new features and provided more info on how to use the action versions.

* Restore execute bit for script.

* Fix execute bit on script.
2022-11-23 22:32:40 -08:00
.github Update issue templates 2022-11-23 22:13:12 -08:00
action.yml Execute installation scripts feature, debug mode, and permission denied fix. (#65) 2022-11-23 22:24:00 -08:00
install_and_cache_pkgs.sh Execute installation scripts feature, debug mode, and permission denied fix. (#65) 2022-11-23 22:24:00 -08:00
lib.sh Execute installation scripts feature, debug mode, and permission denied fix. (#65) 2022-11-23 22:24:00 -08:00
LICENSE Fix issues #36, #37, and minor refactors. (#40) (#41) 2022-08-02 21:14:51 -07:00
post_cache_action.sh Execute installation scripts feature, debug mode, and permission denied fix. (#65) 2022-11-23 22:24:00 -08:00
pre_cache_action.sh Execute installation scripts feature, debug mode, and permission denied fix. (#65) 2022-11-23 22:24:00 -08:00
README.md Execute installation scripts feature, debug mode, and permission denied fix. (#65) 2022-11-23 22:24:00 -08:00
restore_pkgs.sh Execute installation scripts feature, debug mode, and permission denied fix. (#65) 2022-11-23 22:24:00 -08:00

cache-apt-pkgs-action

License: Apache2 Master Test status Staging Test status

This action allows caching of Advanced Package Tool (APT) package dependencies to improve workflow execution time instead of installing the packages on every run.

Documentation

This action is a composition of actions/cache and the apt utility. Some actions require additional APT based packages to be installed in order for other steps to be executed. Packages can be installed when ran but can consume much of the execution workflow time.

Usage

Pre-requisites

Create a workflow .yml file in your repositories .github/workflows directory. An example workflow is available below. For more information, reference the GitHub Help Documentation for Creating a workflow file.

Versions

There are three kinds of version labels you can use.

  • @latest - This will give you the latest release.
  • @v# - Major only will give you the latest release for that major version only (e.g. v1).
  • Branch
    • @master - Most recent manual and automated tested code. Possibly unstable since it is pre-release.
    • @staging - Most recent automated tested code and can sometimes contain experimental features. Is pulled from dev stable code.
    • @dev - Very unstable and contains experimental features. Automated testing may not show breaks since CI is also updated based on code in dev.

Inputs

  • packages - Space delimited list of packages to install.
  • version - Version of cache to load. Each version will have its own cache. Note, all characters except spaces are allowed.
  • execute_install_scripts - Execute Debian package pre and post install script upon restore. See Caveats / Non-file Dependencies for more information.

Outputs

  • cache-hit - A boolean value to indicate a cache was found for the packages requested.
  • package-version-list - The main requested packages and versions that are installed. Represented as a comma delimited list with colon delimit on the package version (i.e. <package1>:<version1>,<package2>:<version2>,...).
  • all-package-version-list - All the pulled in packages and versions, including dependencies, that are installed. Represented as a comma delimited list with colon delimit on the package version (i.e. <package1>:<version1>,<package2>:<version2>,...).

Cache scopes

The cache is scoped to the packages given and the branch. The default branch cache is available to other branches.

Example workflow

This was a motivating use case for creating this action.

name: Create Documentation
on: push
jobs:
  
  build_and_deploy_docs:
    runs-on: ubuntu-latest
    name: Build Doxygen documentation and deploy
    steps:
      - uses: actions/checkout@v2
      - uses: awalsh128/cache-apt-pkgs-action@latest
        with:
          packages: dia doxygen doxygen-doc doxygen-gui doxygen-latex graphviz mscgen
          version: 1.0

      - name: Build        
        run: |
          cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}      
          cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}          

      - name: Deploy
        uses: JamesIves/github-pages-deploy-action@4.1.5
        with:
          branch: gh-pages
          folder: ${{github.workspace}}/build/website
...
  install_doxygen_deps:
    runs-on: ubuntu-latest    
    steps:
      - uses: actions/checkout@v2
      - uses: awalsh128/cache-apt-pkgs-action@latest
        with:
          packages: dia doxygen doxygen-doc doxygen-gui doxygen-latex graphviz mscgen
          version: 1.0

Caveats

Non-file Dependencies

This action is based on the principle that most packages can be cached as a fileset. There are situations though where this is not enough.

  • Pre and post installation scripts needs to be ran from /var/lib/dpkg/info/{package name}.[preinst, postinst].
  • The Debian package database needs to be queried for scripts above (i.e. dpkg-query).

The execute_install_scripts argument can be used to attempt to execute the install scripts but they are no guaranteed to resolve the issue.

- uses: awalsh128/cache-apt-pkgs-action@latest
  with:
    packages: mypackage
    version: 1.0
    execute_install_scripts: true

If this does not solve your issue, you will need to run apt-get install as a separate step for that particular package unfortunately.

run: apt-get install mypackage
shell: bash

Please reach out if you have found a workaround for your scenario and it can be generalized. There is only so much this action can do and can't get into the area of reverse engineering Debian package manager. It would be beyond the scope of this action and may result in a lot of extended support and brittleness. Also, it would be better to contribute to Debian packager instead at that point.

For more context and information see issue #57 which contains the investigation and conclusion.

Cache Limits

A repository can have up to 5GB of caches. Once the 5GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted.