Test #182
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
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." |