Skip to content

Build and Release Specialized Packages #97

Build and Release Specialized Packages

Build and Release Specialized Packages #97

name: Build and Release Specialized Packages
on:
workflow_dispatch:
release:
types: [published]
schedule:
- cron: '0 0 * * *' # Runs daily at midnight UTC
permissions:
contents: write
jobs:
cleanup-old-releases:
runs-on: ubuntu-22.04
steps:
- name: Checkout Repository
uses: actions/checkout@v3
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 for Git Operations
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh auth setup-git
- name: Delete Older Releases for Managed Tags
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -e
echo "Fetching managed release tags from the matrix..."
MANAGED_TAGS=("SysAdminToolSet" "ITSM-Templates-WKS" "ITSM-Templates-SVR" "GPOs-Templates" "READMEs-Files-Package")
for tag in "${MANAGED_TAGS[@]}"; do
echo "Processing tag: $tag"
releases=$(gh release list --tag "$tag" --limit 100 --json name,tagName,createdAt | jq -r --arg tag "$tag" '.[] | select(.tagName == $tag) | "\(.createdAt) \(.tagName)"')
if [ -z "$releases" ]; then
echo "No releases found for tag '$tag'. Skipping cleanup."
continue
fi
sorted_releases=$(echo "$releases" | sort)
releases_to_delete=$(echo "$sorted_releases" | head -n -1 | awk '{print $2}')
if [ -z "$releases_to_delete" ]; then
echo "Only one release exists for tag '$tag'. No older releases to delete."
continue
fi
for old_tag in $releases_to_delete; do
echo "Deleting old release and tag: $old_tag"
gh release delete "$old_tag" -y || { echo "Failed to delete release: $old_tag"; exit 1; }
git push --delete origin "$old_tag" || { echo "Failed to delete tag: $old_tag"; exit 1; }
done
done
build-and-release:
needs: cleanup-old-releases
runs-on: ubuntu-22.04
strategy:
matrix:
release_name: ["SysAdminToolSet", "ITSM-Templates-WKS", "ITSM-Templates-SVR", "GPOs-Templates", "READMEs-Files-Package"]
steps:
- name: Checkout Repository
uses: actions/checkout@v3
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 for Git Operations
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh auth setup-git
- name: Handle Existing Release and Tag
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -e
TAG_NAME="${{ matrix.release_name }}"
if gh release view "${TAG_NAME}" > /dev/null 2>&1; then
gh release delete "${TAG_NAME}" -y
git push --delete origin "${TAG_NAME}"
fi
- name: Build and Package ${{ matrix.release_name }}
env:
RELEASE_NAME: ${{ matrix.release_name }}
run: |
case "${RELEASE_NAME}" in
SysAdminToolSet)
mkdir -p SysAdminToolSet
# Copy the SysAdmin-Tools folder (excluding GroupPolicyObjects-Templates)
rsync -av --exclude='GroupPolicyObjects-Templates' SysAdmin-Tools/ SysAdminToolSet/SysAdmin-Tools/
rsync -av BlueTeam-Tools/ SysAdminToolSet/BlueTeam-Tools/
cp Core-ScriptLibrary/Launch-Script-AutomaticMenu.ps1 SysAdminToolSet/
# Copy the main README and LICENSE from the repo root
cp README.md SysAdminToolSet/
cp LICENSE SysAdminToolSet/
# Additionally, copy the README from the new ActiveDirectory-SSO-Integrations folder
cp SysAdmin-Tools/ActiveDirectory-SSO-Integrations/README.md SysAdminToolSet/ActiveDirectory-SSO-Integrations-README.md
mkdir -p artifacts
zip -r artifacts/SysAdminToolSet.zip SysAdminToolSet
;;
ITSM-Templates-WKS)
mkdir -p artifacts
zip -r artifacts/ITSM-Templates-WKS.zip ITSM-Templates-WKS
;;
ITSM-Templates-SVR)
mkdir -p artifacts
zip -r artifacts/ITSM-Templates-SVR.zip ITSM-Templates-SVR
;;
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/
mkdir -p artifacts
zip -r artifacts/GPOs-Templates.zip GPOs-Templates
;;
READMEs-Files-Package)
mkdir -p READMEs-Files-Package
cp README.md READMEs-Files-Package/main-README.md
find . -type f -iname "README.md" ! -path "./README.md" | while read -r file; do
repo_dir=$(dirname "$file")
repo_name=$(basename "$repo_dir")
new_filename="${repo_name}-README.md"
cp "$file" "READMEs-Files-Package/$new_filename"
done
mkdir -p artifacts
zip -r artifacts/READMEs-Files-Package.zip READMEs-Files-Package
;;
esac
- name: Create New Release
id: create_release
uses: actions/[email protected]
with:
tag_name: ${{ matrix.release_name }}
release_name: ${{ matrix.release_name }}
body: "Latest automated specialized release for ${{ matrix.release_name }}."
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Release Asset
uses: actions/upload-release-asset@v1 # Correct version
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 }}