- job: name: tcwg-cleanup-stale-workspaces project-type: matrix defaults: global properties: - authorization: anonymous: - job-read - job-extended-read linaro: - job-build - job-cancel - build-discarder: days-to-keep: 30 num-to-keep: 30 - throttle: max-per-node: 1 option: project parameters: - string: name: days default: '3' description: 'Delete workspace more then days old. To effectively disable time check use 0.' - bool: name: dry_run default: 'false' description: 'Whether to do a dry-run' - string: name: workspace_top default: '/home/tcwg-buildslave/workspace' description: 'Top-level workspace directory. Can be used to delete workspaces for specific jobs. Do not override unless you understand what you are doing.' - string: name: maxdepth default: '1' description: 'Depth of search for outdated directories. Do not override unless you understand what you are doing.' disabled: false node: tcwg-x86_64-cam concurrent: false display-name: 'TCWG CCC Cleanup stale workspaces' triggers: - timed: '@daily' axes: - axis: type: slave name: label values: - tcwg-aarch64-07 - tcwg-aarch64-build-01 - tcwg-aarch64-build-02 - tcwg-aarch64-test-01 - tcwg-aarch64-test-02 - tcwg-x86_64-build-01 - tcwg-x86_64-build-02 - tcwg-x86_64-build-03 - tcwg-x86_64-build-04 - tcwg-x86_64-build-05 - tcwg-x86_64-build-06 - tcwg-x86_64-dev-01 - tcwg-x86_64-dev-02 - tcwg-x86_64-ex40build-01 execution-strategy: sequential: false wrappers: - timeout: timeout: 600 - timestamps - ssh-agent-credentials: # tcwg-buildslave user id users: - 'e0958a95-204f-4c14-a66c-5e2be6c5d50a' - build-name: name: '#${BUILD_NUMBER}' builders: - shell: | #!/bin/bash set -e set -x if [ "$days" -lt "0" ]; then echo "ERROR: Refusing to delete workspaces that are $days days old" exit 1 fi echo "Date / size report before (`date`):" ls -ld $workspace_top/* || true df -h $workspace_top || true du -hsc $workspace_top/* || true # Semantics of find's mtime "+N" stands for N+1 days old or older. days_1=$(($days-1)) # Handle dirs with whitespaces by setting $IFS to newline. SAVEIFS=$IFS IFS=$'\n' dirs=($(find $workspace_top/ -maxdepth $maxdepth -type d -mtime +$days_1)) IFS=$SAVEIFS rm_dirs=() for dir in "${dirs[@]}"; do if [ x"$(find "$dir" -mtime -$days | wc -l)" = x"0" ]; then rm_dirs=("${rm_dirs[@]}" "$dir") fi done if [ ${#rm_dirs[@]} != 0 ]; then echo "Removing directories:" ls -ld "${rm_dirs[@]}" du -hs "${rm_dirs[@]}" if ! $dry_run; then rm -rf "${rm_dirs[@]}" else echo "DRY_RUN: NOT REMOVING DIRECTORIES" fi echo "Date / size report after (`date`):" ls -ld $workspace_top/* || true df -h $workspace_top || true du -hsc $workspace_top/* || true fi publishers: - email: recipients: 'maxim.kuvyrkov@linaro.org christophe.lyon@linaro.org'