name: 'Cache APT Packages' description: 'Install APT based packages and cache them for future runs.' author: awalsh128 branding: icon: 'hard-drive' color: 'green' inputs: packages: description: 'Space delimited list of packages to install. Version can be specified optionally using APT command syntax of = (e.g. xdot=1.2-2).' required: true default: '' version: description: 'Version of cache to load. Each version will have its own cache. Note, all characters except spaces are allowed.' required: false default: '' execute_install_scripts: description: 'Execute Debian package pre and post install script upon restore. See README.md caveats for more information.' required: false default: 'false' refresh: description: 'OBSOLETE: Refresh is not used by the action, use version instead.' deprecationMessage: 'Refresh is not used by the action, use version instead.' debug: description: 'Enable debugging when there are issues with action. Minor performance penalty.' required: false default: 'false' outputs: cache-hit: description: 'A boolean value to indicate a cache was found for the packages requested.' # This compound expression is needed because lhs can be empty. # Need to output true and false instead of true and nothing. value: ${{ steps.load-cache.outputs.cache-hit || false }} package-version-list: description: 'The main requested packages and versions that are installed. Represented as a comma delimited list with equals delimit on the package version (i.e. ::).' value: ${{ steps.post-cache.outputs.package-version-list }} all-package-version-list: description: 'All the pulled in packages and versions, including dependencies, that are installed. Represented as a comma delimited list with equals delimit on the package version (i.e. ::).' value: ${{ steps.post-cache.outputs.all-package-version-list }} runs: using: "composite" steps: - id: pre-cache run: | ${GITHUB_ACTION_PATH}/pre_cache_action.sh \ ~/cache-apt-pkgs \ "$VERSION" \ "$EXEC_INSTALL_SCRIPTS" \ "$DEBUG" \ "$PACKAGES" echo "CACHE_KEY=$(cat ~/cache-apt-pkgs/cache_key.md5)" >> $GITHUB_ENV shell: bash env: VERSION: "${{ inputs.version }}" EXEC_INSTALL_SCRIPTS: "${{ inputs.execute_install_scripts }}" DEBUG: "${{ inputs.debug }}" PACKAGES: "${{ inputs.packages }}" - id: load-cache uses: actions/cache/restore@v3 with: path: ~/cache-apt-pkgs key: cache-apt-pkgs_${{ env.CACHE_KEY }} - id: post-cache run: | ${GITHUB_ACTION_PATH}/post_cache_action.sh \ ~/cache-apt-pkgs \ / \ "$CACHE_HIT" \ "$EXEC_INSTALL_SCRIPTS" \ "$DEBUG" \ "$PACKAGES" function create_list { local list=$(cat ~/cache-apt-pkgs/manifest_${1}.log | tr '\n' ','); echo ${list:0:-1}; }; echo "package-version-list=$(create_list main)" >> $GITHUB_OUTPUT echo "all-package-version-list=$(create_list all)" >> $GITHUB_OUTPUT shell: bash env: CACHE_HIT: "${{ steps.load-cache.outputs.cache-hit }}" EXEC_INSTALL_SCRIPTS: "${{ inputs.execute_install_scripts }}" DEBUG: "${{ inputs.debug }}" PACKAGES: "${{ inputs.packages }}" - id: upload-logs if: ${{ inputs.debug == 'true' }} uses: actions/upload-artifact@v3 with: name: cache-apt-pkgs-logs_${{ env.CACHE_KEY }} path: ~/cache-apt-pkgs/*.log - id: save-cache if: ${{ ! steps.load-cache.outputs.cache-hit }} uses: actions/cache/save@v3 with: path: ~/cache-apt-pkgs key: ${{ steps.load-cache.outputs.cache-primary-key }} - id: clean-cache run: | rm -rf ~/cache-apt-pkgs shell: bash