Build and Release Specialized Packages #80
This file contains hidden or 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
| 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 }} |