diff --git a/action.yml b/action.yml index 0798f6a..12e2e0f 100644 --- a/action.yml +++ b/action.yml @@ -23,6 +23,14 @@ inputs: You should prefer adjusting root-reserve-mb/temp-reserve-mb over using this option. required: false default: 'false' + filesystem-type: + description: 'The filesystem to use' + required: false + default: 'ext4' + btrfs-compression-level: + description: 'The compression level to use if the filesystem is btrfs' + required: false + default: '0' build-mount-path: description: 'Absolute path to the mount point where the build space will be available, defaults to $GITHUB_WORKSPACE if unset.' required: false @@ -177,12 +185,27 @@ runs: echo "Creating build volume" # create and mount build volume sudo lvcreate -l 100%FREE -n buildlv "${VG_NAME}" - if [[ ${{ inputs.overprovision-lvm }} == 'true' ]]; then - sudo mkfs.ext4 -m0 "/dev/mapper/${VG_NAME}-buildlv" + if [[ ${inputs.filesystem-type} == 'btrfs' ]]; then + sudo mkfs.btrfs -m single -d single "/dev/mapper/${VG_NAME}-buildlv" + + mount_options=('space_cache=v2' 'noatime') + if [[ ${{ inputs.overprovision-lvm }} == 'true' ]]; then + mount_options+=('discard=async') + else + mount_options+=('nodiscard') + fi + if [[ ${{ inputs.btrfs-compression-level }} != '0' ]]; then + mount_options+=("compress-force=zstd:${inputs.build-compression-level}") + fi + IFS="," sudo mount -t btrfs -o ${mount_options[*]} "/dev/mapper/${VG_NAME}-buildlv" "${BUILD_MOUNT_PATH}" else - sudo mkfs.ext4 -Enodiscard -m0 "/dev/mapper/${VG_NAME}-buildlv" + if [[ ${{ inputs.overprovision-lvm }} == 'true' ]]; then + sudo mkfs.ext4 -m0 "/dev/mapper/${VG_NAME}-buildlv" + else + sudo mkfs.ext4 -Enodiscard -m0 "/dev/mapper/${VG_NAME}-buildlv" + fi + IFS="," sudo mount -t ext4 "/dev/mapper/${VG_NAME}-buildlv" "${BUILD_MOUNT_PATH}" fi - sudo mount "/dev/mapper/${VG_NAME}-buildlv" "${BUILD_MOUNT_PATH}" sudo chown -R "${{ inputs.build-mount-path-ownership }}" "${BUILD_MOUNT_PATH}" # if build mount path is a parent of $GITHUB_WORKSPACE, and has been deleted, recreate it