Skip to content

Commit

Permalink
NEW Create action
Browse files Browse the repository at this point in the history
  • Loading branch information
emteknetnz committed Jun 8, 2022
1 parent 9271e6b commit 48c07d6
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 2 deletions.
12 changes: 12 additions & 0 deletions .github/workflows/auto-tag.yml
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__response.json
24 changes: 22 additions & 2 deletions README.md
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
```
54 changes: 54 additions & 0 deletions action.yml
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

0 comments on commit 48c07d6

Please sign in to comment.