test: Add testing for FileCopyMethod #6
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Some platform-specific file copy syscalls (e.g. creating reflinks) are only | |
# supported on some platforms, and only with specific filesystems. These | |
# syscalls are used by different FileCopyMethod implementations. | |
# | |
# This workflow sets up the conditions needed for those syscalls to work, | |
# and then runs the tests with the different FileCopyMethods. | |
name: FileCopyMethod | |
on: | |
push: | |
branches: [ main, develop ] | |
pull_request: | |
branches: [ main, develop ] | |
workflow_dispatch: | |
jobs: | |
test-linux: | |
name: Test Linux | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
environment: | |
- filesystem: btrfs | |
filecopymethod: CopyBytes | |
steps: | |
- name: Set up Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: 'stable' | |
- name: Check out code into the Go module directory | |
uses: actions/checkout@v3 | |
- name: Get dependencies | |
run: go get -v -t -d ./... | |
- name: Build | |
run: go build -v . | |
- name: Set up filesystem | |
run: |- | |
mkdir ./test-filesystem | |
IMAGE_PATH="./test-filesystem/contents.img" | |
MOUNT_PATH="./test-filesystem/mounted" | |
truncate -s 500m "$IMAGE_PATH" | |
mkfs -t "${{matrix.environment.filesystem}}" "$IMAGE_PATH" | |
mkdir "$MOUNT_PATH" | |
sudo mount -o loop "$IMAGE_PATH" "$MOUNT_PATH" | |
sudo chown -R "$(id -u):$(id -g)" "$MOUNT_PATH" | |
- name: Copy files to mounted filesystem | |
run: |- | |
rsync -av --exclude=".*" --exclude "test-filesystem" . "test-filesystem/mounted" | |
- name: Test | |
working-directory: test-filesystem/mounted | |
run: go test -v | |
env: | |
TEST_FILECOPYMETHOD: ${{matrix.environment.filecopymethod}} | |
test-macos: | |
name: Test MacOS | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
environment: | |
- filesystem: APFS | |
steps: | |
- name: Set up Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: 'stable' | |
- name: Check out code into the Go module directory | |
uses: actions/checkout@v3 | |
- name: Get dependencies | |
run: go get -v -t -d ./... | |
- name: Build | |
run: go build -v . | |
- name: Set up filesystem (MacOS) | |
run: |- | |
mkdir ./test-filesystem | |
IMAGE_PATH="./test-filesystem/contents.img" | |
MOUNT_PATH="./test-filesystem/mounted" | |
hdiutil create -size 500m -fs "${{matrix.environment.filesystem}}" "$IMAGE_PATH" | |
hdiutil attach -mountpoint "$MOUNT_PATH" "$IMAGE_PATH" | |
- name: Copy files to mounted filesystem | |
run: |- | |
rsync -av --exclude=".*" --exclude "test-filesystem" . "test-filesystem/mounted" | |
- name: Test | |
working-directory: test-filesystem/mounted | |
run: go test -v | |
env: | |
TEST_FILECOPYMETHOD: ${{matrix.environment.filecopymethod}} |