-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
9271e6b
commit 48c07d6
Showing
4 changed files
with
89 additions
and
2 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
name: Auto-tag | ||
on: | ||
push: | ||
tags: | ||
- '*.*.*' | ||
jobs: | ||
auto-tag: | ||
name: Auto-tag | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Auto-tag | ||
uses: silverstripe/gha-auto-tag@main |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
__response.json |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,22 @@ | ||
# gha-keepalive | ||
GitHub Action - Periodically re-enable repository cron workflows | ||
# GitHub Actions - Keepalive | ||
|
||
GitHub Action - Periodically re-enable all repository cron workflows that would otherwise auto-disable after 60 days of no repository activity - see [GitHub docs](https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration#disabling-and-enabling-workflows). | ||
|
||
## Usage | ||
|
||
**.github/workflows/keepalive.yml** | ||
```yml | ||
name: Keepalive | ||
on: | ||
# Run on a schedule of once per month | ||
schedule: | ||
- cron: '0 0 1 * *' | ||
workflow_dispatch: | ||
jobs: | ||
keepalive: | ||
name: Keepalive | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Keepalive | ||
uses: silverstripe/gha-keepalive@main | ||
``` |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
name: Keepalive repository cron workflows | ||
description: GitHub Action to re-enable repository cron workflows to prevent them from stopping after 60 days | ||
|
||
runs: | ||
using: composite | ||
steps: | ||
|
||
- name: Keepalive | ||
shell: bash | ||
env: | ||
GITHUB_REPOSITORY: ${{ github.repository }} | ||
run: | | ||
RESP_CODE=$(curl -w %{http_code} -s -o __response.json \ | ||
-X GET https://api.github.com/repos/$GITHUB_REPOSITORY/actions/workflows \ | ||
-H "Accept: application/vnd.github.v3+json") | ||
if [[ $RESP_CODE != "200" ]]; then | ||
echo "Unable to read repository workflows" | ||
exit 1 | ||
fi | ||
IDS=$(jq -r .workflows[].id __response.json) | ||
if [[ $IDS == "" ]]; then | ||
echo "This repository has no workflows" | ||
exit 0 | ||
fi | ||
for ID in $IDS; do | ||
PTH=$(jq -r ".workflows[] | select(.id==$ID) | .path" __response.json) | ||
URL=$(jq -r ".workflows[] | select(.id==$ID) | .html_url" __response.json) | ||
URL=${URL//github\.com/raw.githubusercontent.com} | ||
URL=${URL//$GITHUB_REPOSITORY\/blob/$GITHUB_REPOSITORY} | ||
RESP_CODE=$(curl -w %{http_code} -s -o __response.yml \ | ||
-X GET $URL \ | ||
-H "Accept: application/vnd.github.v3+json") | ||
if [[ $RESP_CODE != "200" ]]; then | ||
echo "Unable to fetch raw content for workflow $PTH with ID $ID from $URL" | ||
echo "Workflow is probably not on default branch" | ||
echo "If this workflow runs on a cron, it will not keepalive" | ||
else | ||
YML=$(cat __response.yml) | ||
RX="schedule:\s+- cron:" | ||
if ! [[ $YML =~ $RX ]]; then | ||
echo "Workflow $PTH with ID $ID does not run on a cron, no need to re-enable" | ||
else | ||
RESP_CODE=$(curl -w %{http_code} -s -o /dev/null \ | ||
-X PUT https://api.github.com/repos/$GITHUB_REPOSITORY/actions/workflows/$ID/enable \ | ||
-H "Accept: application/vnd.github.v3+json" \ | ||
-H "Authorization: token ${{ github.token }}") | ||
if [[ $RESP_CODE != "204" ]]; then | ||
echo "Unable to enable workflow $PTH with ID $ID" | ||
exit 1 | ||
fi | ||
echo "Re-enabled workflow $PTH with ID $ID" | ||
fi | ||
fi | ||
done |