Skip to content

Make and Update GitHub Releases #7

Make and Update GitHub Releases

Make and Update GitHub Releases #7

name: Make and Update GitHub Releases
on:
workflow_dispatch: {}
release:
types: [published]
schedule:
- cron: '0 0 * * *' # every day at midnight UTC
permissions:
contents: write
jobs:
cleanup-github-releases:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4.2.2
with:
submodules: true
fetch-depth: 0
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y jq gh
- name: Configure GitHub CLI
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh auth setup-git
- name: Delete All Releases and Tags
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -e
MANAGED_TAGS=("AD-SSO-APIs-Integration" "All-Repository-Files" "BlueTeam-Tools" "Core-ScriptLibrary" "GPOs-Templates" "ITSM-Templates-SVR" "ITSM-Templates-WKS" "READMEs-Files-Package" "SysAdmin-Tools")
for tag_prefix in "${MANAGED_TAGS[@]}"; do
gh release list --limit 100 --json tagName | jq -r '.[].tagName' | grep "^$tag_prefix" | while read -r tag; do
echo "Deleting release and tag: $tag"
gh release delete "$tag" -y || true
git push origin ":refs/tags/$tag" || true
done
done
update-github-releases:
needs: cleanup-github-releases
runs-on: ubuntu-latest
strategy:
matrix:
release_name: [
"AD-SSO-APIs-Integration",
"All-Repository-Files",
"BlueTeam-Tools",
"Core-ScriptLibrary",
"GPOs-Templates",
"ITSM-Templates-SVR",
"ITSM-Templates-WKS",
"READMEs-Files-Package",
"SysAdmin-Tools"
]
steps:
- name: Checkout Repository
uses: actions/checkout@v4.2.2
with:
submodules: true
fetch-depth: 0
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y zip jq gh
- name: Configure GitHub CLI
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh auth setup-git
- name: Set Version Tag
id: version_tag
run: echo "VERSION_TAG=${{ matrix.release_name }}-$(date +%Y%m%d)-${GITHUB_SHA::7}" >> $GITHUB_ENV
- name: Build and Package ${{ matrix.release_name }}
env:
RELEASE_NAME: ${{ matrix.release_name }}
run: |
set -e
mkdir -p artifacts
case "$RELEASE_NAME" in
BlueTeam-Tools | Core-ScriptLibrary | ITSM-Templates-SVR | ITSM-Templates-WKS | SysAdmin-Tools)
cp -r "$RELEASE_NAME" "./temp-$RELEASE_NAME"
cp README.md "./temp-$RELEASE_NAME/" || true
cp LICENSE.txt "./temp-$RELEASE_NAME/" || true
zip -r "artifacts/$RELEASE_NAME.zip" "temp-$RELEASE_NAME"
rm -rf "temp-$RELEASE_NAME"
;;
GPOs-Templates)
mkdir -p GPOs-Templates
cp -r SysAdmin-Tools/GroupPolicyObjects-Templates/* GPOs-Templates/
cp SysAdmin-Tools/ActiveDirectory-Management/Export-n-Import-GPOsTool.ps1 GPOs-Templates/
cp README.md LICENSE.txt GPOs-Templates/ || true
zip -r artifacts/GPOs-Templates.zip GPOs-Templates
rm -rf GPOs-Templates
;;
READMEs-Files-Package)
mkdir -p READMEs-Files-Package
cp README.md READMEs-Files-Package/main-README.md || true
find . -type f -iname "README.md" ! -path "./README.md" | while read -r file; do
repo_dir=$(dirname "$file")
repo_name=$(basename "$repo_dir")
cp "$file" "READMEs-Files-Package/${repo_name}-README.md"
done
zip -r artifacts/READMEs-Files-Package.zip READMEs-Files-Package
rm -rf READMEs-Files-Package
;;
All-Repository-Files)
mkdir -p All-Repository-Files
for dir in BlueTeam-Tools Core-ScriptLibrary ITSM-Templates-SVR ITSM-Templates-WKS SysAdmin-Tools; do
cp -r "$dir" All-Repository-Files/
done
cp README.md All-Repository-Files/ || true
cp LICENSE.txt All-Repository-Files/ || true
zip -r artifacts/All-Repository-Files.zip All-Repository-Files
rm -rf All-Repository-Files
;;
AD-SSO-APIs-Integration)
mkdir -p AD-SSO-APIs-Integration
cp -r SysAdmin-Tools/ActiveDirectory-SSO-Integrations/* AD-SSO-APIs-Integration/
zip -r artifacts/AD-SSO-APIs-Integration.zip AD-SSO-APIs-Integration
rm -rf AD-SSO-APIs-Integration
;;
esac
- name: Generate SHA256 Signature
run: sha256sum "artifacts/${{ matrix.release_name }}.zip" > "artifacts/${{ matrix.release_name }}.sha256.txt"
- name: Extract Release Notes from CHANGELOG.md
id: extract_notes
run: |
tag="## ${{ matrix.release_name }}"
body=$(awk -v tag="$tag" '
$0 == tag {found=1; next}
/^## / && found {exit}
found {print}
' CHANGELOG.md)
echo "RELEASE_BODY<<EOF" >> $GITHUB_ENV
echo "${body:-No changelog available.}" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Create GitHub Release
id: create_release
uses: actions/create-release@v1.1.0
with:
tag_name: ${{ env.VERSION_TAG }}
release_name: ${{ env.VERSION_TAG }}
body: ${{ env.RELEASE_BODY }}
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Release Zip
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: artifacts/${{ matrix.release_name }}.zip
asset_name: ${{ matrix.release_name }}.zip
asset_content_type: application/zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload SHA256 Checksum
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: artifacts/${{ matrix.release_name }}.sha256.txt
asset_name: ${{ matrix.release_name }}.sha256.txt
asset_content_type: text/plain
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Artifact Archive (for GitHub Actions Record)
uses: actions/upload-artifact@v4
with:
name: artifacts-${{ matrix.release_name }}
path: artifacts/${{ matrix.release_name }}.zip