summaryrefslogtreecommitdiffstats
path: root/.github/workflows
diff options
context:
space:
mode:
authorAustin S. Hemmelgarn <austin@netdata.cloud>2023-02-24 10:00:36 -0500
committerGitHub <noreply@github.com>2023-02-24 17:00:36 +0200
commita20b8c4ab47c84f8e9f1473e78472ff4bedd57f1 (patch)
tree4c3b33abeda5ffcc8d3091470d3873d6936411a9 /.github/workflows
parent13b34502c10d62c2210c1f624b37c96d3278b8a9 (diff)
Add a scheduled CI job to flag supported platforms going EOL upstream. (#14581)
* Add a scheduled CI job to flag supported platforms going EOL upstream. By default, it runs at 03:00 UTC every Monday and checks the upstream EOL date for each platform we support that needs such checking. If the platform will be EOL upstream within the next 30 days, an issue is opened flagging the platform for removal from CI and our support document and auto-assigned to the agent SRE team members. The workflow can also be manually triggered (mostly intended for testing). Data about upstream EOL dates is retrieved from https://endoflife.date via their new public API. Happily, our own definition of what constitutes EOL for our purposes matches up 1:1 with how they categorize platforms as EOL. * Fix logic issue in issue creation. * Explicitly enable error handling for issue checks.
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/platform-eol-check.yml109
1 files changed, 109 insertions, 0 deletions
diff --git a/.github/workflows/platform-eol-check.yml b/.github/workflows/platform-eol-check.yml
new file mode 100644
index 0000000000..94fe485044
--- /dev/null
+++ b/.github/workflows/platform-eol-check.yml
@@ -0,0 +1,109 @@
+---
+# Auto-generate issues for EOL of platforms that are approaching their EOL date.
+# Uses https://endoflife.date and their new API to check for EOL dates.
+#
+# Issues are created when the EOL date is within the next 30 days.
+name: Check Platform EOL
+on: # Run weekly and whenever manually triggered
+ schedule:
+ - cron: '0 3 * * 1'
+ workflow_dispatch: null
+concurrency: # Simple single-instance concurrency.
+ group: eol-check-${{ github.repository }}
+ cancel-in-progress: true
+jobs:
+ # Prepare the build matrix.
+ # This uses output from .github/scripts/gen-matrix-eol-check.py
+ matrix:
+ name: Prepare Build Matrix
+ runs-on: ubuntu-latest
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v3
+ - name: Prepare tools
+ id: prepare
+ run: |
+ sudo apt-get update && sudo apt-get install -y python3-ruamel.yaml
+ - name: Read build matrix
+ id: set-matrix
+ run: |
+ matrix="$(.github/scripts/gen-matrix-eol-check.py)"
+ echo "Generated matrix: ${matrix}"
+ echo "matrix=${matrix}" >> "${GITHUB_OUTPUT}"
+
+ eol-check:
+ name: EOL Check
+ runs-on: ubuntu-latest
+ needs:
+ - matrix
+ strategy:
+ matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}
+ fail-fast: false # We want to check everything, so don’t bail on the first failure.
+ max-parallel: 2 # Cap of two jobs at a time to limit impact on other CI.
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v3
+ # Actually check the EOL date for the platform.
+ - name: Check EOL Date
+ id: check
+ run: |
+ d="$(.github/scripts/platform-impending-eol.py ${{ matrix.distro }} ${{ matrix.release }})"
+ case $? in
+ 0) echo "pending=false" >> "${GITHUB_OUTPUT}" ;;
+ 2)
+ echo "pending=true" >> "${GITHUB_OUTPUT}"
+ echo "date=${d}" >> "${GITHUB_OUTPUT}"
+ ;;
+ *)
+ echo "::error::Failed to check EOL date for ${{ matrix.distro }} ${{ matrix.release }}"
+ exit 1
+ ;;
+ esac
+ # Figure out the issue title.
+ # This is it’s own step so we only have to set it in one place.
+ - name: Determine Issue Title
+ id: title
+ if: steps.check.outputs.pending == 'true'
+ run: |
+ echo "title=[Platform EOL]: ${{ matrix.full_name }} will be EOL soon." >> "${GITHUB_OUTPUT}"
+ # Check if there is an existing issue in the repo for the platform EOL.
+ # The actual command line to make the check is unfortunately complicated because
+ # GitHub think that it’s sensible to exit with a status of 0 if there no results
+ # for a search.
+ - name: Check for Existing Issue
+ id: existing
+ if: steps.check.outputs.pending == 'true'
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ set -e
+ count=$(gh issue list -R netdata/netdata -s all -S '${{ steps.title.outputs.title }} in:title' --json 'id' -q '. | length')
+ if [ "${count}" -ge 1 ]; then
+ echo 'exists=true' >> "${GITHUB_OUTPUT}"
+ else
+ echo 'exists=false' >> "${GITHUB_OUTPUT}"
+ fi
+ # If the platform is near EOL and there is no existing issue, create one.
+ - name: Create EOL Issue
+ id: create-issue
+ if: steps.check.outputs.pending == 'true' && steps.existing.outputs.exists == 'false'
+ uses: imjohnbo/issue-bot@v3
+ with:
+ assignees: Ferroin, tkatsoulas
+ labels: area/packaging, needs triage
+ title: ${{ steps.title.outputs.title }}
+ body: |
+ Based on information from https://endoflife.date/${{ matrix.distro }},
+ upstream support for ${{ matrix.full_name }} will be ending
+ on ${{ steps.check.outputs.date }}. A PR should be created
+ to remove this platform from our platform support document,
+ CI, and packaging code.
+
+ - [ ]: Remove platform from `packaging/PLATFORM_SUPPORT.md`
+ - [ ]: Remove platform from `.github/data/distros.yml`
+ - [ ]: Remove platform package builder from helper-images repo (if applicable).
+ - [ ]: Verify any other platform support code that needs to be cleaned up.