198 lines
6.9 KiB
YAML
198 lines
6.9 KiB
YAML
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 [email protected]
|
|
git add README.md
|
|
git commit -m "Generated new report" && git push || echo "Report unchanged, not updating."
|