Skip to content

Test

Test #179

Workflow file for this run

name: Test
on:
workflow_dispatch:
schedule:
# weekly, randomly chosen time
- cron: "17 18 * * 0"
push:
branches-ignore:
- 'test-report'
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: true
env:
REPORT_DIR: /tmp/build-report
jobs:
test-docker-tmp:
name: Test removing root-owned folder
runs-on: ubuntu-latest
steps:
- name: Check out Maximize Build Space action
uses: actions/checkout@v4
with:
path: ./.github/actions/maximize-test
- name: Maximize build space
uses: ./.github/actions/maximize-test
with:
build-mount-path: /var/lib/docker/tmp
test-mount-parent-of-workspace:
name: Test mounting the parent of GITHUB_WORKSPACE
runs-on: ubuntu-latest
steps:
- name: Check out Maximize Build Space action
uses: actions/checkout@v4
with:
path: ./.github/actions/maximize-test
- name: Calculate parent of workspace
id: workspace-parent
run: echo "parent=$(dirname "${GITHUB_WORKSPACE}")" >> "$GITHUB_OUTPUT"
- name: Maximize build space
uses: ./.github/actions/maximize-test
with:
build-mount-path: ${{ steps.workspace-parent.outputs.parent }}
- name: Create file in build folder as runner user (test ownership)
run: |
mkdir -p ${{ steps.workspace-parent.outputs.parent }}/new
touch ${{ steps.workspace-parent.outputs.parent }}/new/file.txt
touch ${GITHUB_WORKSPACE}/file.txt
ls -alR ${{ steps.workspace-parent.outputs.parent }}
determine-free-space:
name: Determine free space with different settings
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-20.04
- ubuntu-22.04
remove-android:
- 'true'
- 'false'
remove-dotnet:
- 'true'
- 'false'
remove-haskell:
- 'true'
- 'false'
remove-codeql:
- 'true'
- 'false'
remove-docker-images:
- 'true'
- 'false'
steps:
- name: Record start time
run: |
echo "START_TIME=$(date +%s)" >> $GITHUB_ENV
- name: Determine free space before
run: |
echo "FREE_GIG_BEFORE=$(df --output=avail --sync -BG "${{ github.workspace }}" | tail -1 | sed 's/[^0-9]*//g')" >> $GITHUB_ENV
- name: Check out Maximize Build Space action
uses: actions/checkout@v4
with:
path: ./.github/actions/maximize-test
- name: Maximize build space
uses: ./.github/actions/maximize-test
with:
remove-android: ${{ matrix.remove-android }}
remove-dotnet: ${{ matrix.remove-dotnet }}
remove-haskell: ${{ matrix.remove-haskell }}
remove-codeql: ${{ matrix.remove-codeql }}
remove-docker-images: ${{ matrix.remove-docker-images }}
- name: Record end time
run: |
echo "END_TIME=$(date +%s)" >> $GITHUB_ENV
- name: Determine free space after
run: |
echo "FREE_GIG_AFTER=$(df --output=avail --sync -BG "${{ github.workspace }}" | tail -1 | sed 's/[^0-9]*//g')" >> $GITHUB_ENV
- name: Calculate freed space and elapsed time
run: |
REPORT_FILENAME_BASE="${REPORT_DIR}/${{ matrix.os }}_${{ matrix.remove-android }}_${{ matrix.remove-dotnet }}_${{ matrix.remove-haskell }}_${{ matrix.remove-codeql }}_${{ matrix.remove-docker-images }}"
FREED_GIG=$(expr ${FREE_GIG_AFTER} - ${FREE_GIG_BEFORE})
ELAPSED_TIME=$(expr ${END_TIME} - ${START_TIME})
echo "Free space before: ${FREE_GIG_BEFORE}G"
echo "Free space after : ${FREE_GIG_AFTER}G"
echo "Space freed : ${FREED_GIG}G"
echo "Time elapsed : ${ELAPSED_TIME} seconds"
mkdir -p "${REPORT_DIR}"
REMOVE_ANDROID="${{ matrix.remove-android }}"
REMOVE_DOTNET="${{ matrix.remove-dotnet }}"
REMOVE_HASKELL="${{ matrix.remove-haskell }}"
REMOVE_CODEQL="${{ matrix.remove-codeql }}"
REMOVE_DOCKER_IMAGES="${{ matrix.remove-docker-images }}"
cat <<EOF > "${REPORT_FILENAME_BASE}.json"
{
"os": "${{ matrix.os }}",
"remove_android": "${REMOVE_ANDROID//false/}",
"remove_dotnet": "${REMOVE_DOTNET//false/}",
"remove_haskell": "${REMOVE_HASKELL//false/}",
"remove_codeql": "${REMOVE_CODEQL//false/}",
"remove_docker_images": "${REMOVE_DOCKER_IMAGES//false/}",
"space_free_before": "${FREE_GIG_BEFORE}",
"space_free_after": "${FREE_GIG_AFTER}",
"space_freed": "${FREED_GIG}",
"elapsed_time": "${ELAPSED_TIME}"
}
EOF
jq -r '[.os, .remove_android, .remove_dotnet, .remove_haskell, .remove_codeql, .remove_docker_images, .space_freed, .space_free_after, .elapsed_time] | join(" | ")' < "${REPORT_FILENAME_BASE}.json" >> "${REPORT_FILENAME_BASE}.txt"
- name: Upload disk space report
uses: actions/upload-artifact@v3
with:
name: disk-space-report-single
path: ${{ env.REPORT_DIR }}
collect-reports:
name: Collect reports
runs-on: ubuntu-latest
needs: determine-free-space
env:
REPORT_FILE: space-free-report.md
steps:
- name: Download single reports
uses: actions/download-artifact@v3
with:
name: disk-space-report-single
path: ${{ env.REPORT_DIR }}
- name: Join Markdown report
run: |
echo 'OS | Android SDKs removed | .NET SDKs removed | Haskell removed | CodeQL Removed | Cached Docker Images Removed | GB freed | GB free | Elapsed Time (seconds) |' > "${REPORT_DIR}/${REPORT_FILE}"
echo '---|:--------------------:|:-----------------:|:---------------:|:--------------:|:----------------------------:|:--------:|:-------:|:----------------------:|' >> "${REPORT_DIR}/${REPORT_FILE}"
cat ${REPORT_DIR}/*.txt >> "${REPORT_DIR}/${REPORT_FILE}"
- name: Upload collected report
uses: actions/upload-artifact@v3
with:
name: disk-space-report-markdown
path: ${{ env.REPORT_DIR }}/${{ env.REPORT_FILE }}
- name: Checkout report branch
uses: actions/checkout@v4
with:
ref: test-report
- name: Overwrite old report
run: |
cp README.md.template README.md
cat ${{ env.REPORT_DIR }}/${{ env.REPORT_FILE }} >> README.md
cat "${REPORT_DIR}/${REPORT_FILE}"
git config user.name github-actions
git config user.email github-actions@github.com
git add README.md
git commit -m "Generated new report" && git push || echo "Report unchanged, not updating."