Skip to content

Refactor publish-krewplugin.yaml to update Invoke-KubeTidy function a… #17

Refactor publish-krewplugin.yaml to update Invoke-KubeTidy function a…

Refactor publish-krewplugin.yaml to update Invoke-KubeTidy function a… #17

name: Publish Plugin to Krew
on:
push:
branches:
- main
- kubectl-plugin
release:
types:
- published
workflow_dispatch:
jobs:
publish:
runs-on: windows-latest
steps:
# Checkout the repository
- name: Checkout code
uses: actions/checkout@v3
# Get the version from KubeTidy.psd1
- name: Get Version from Manifest
id: get_version
run: |
# Get the version from the module manifest
$manifest = Get-Content ./KubeTidy.psd1 -Raw | Out-String | Invoke-Expression
$version = $manifest.ModuleVersion
Write-Host "Version: $version"
echo "::set-output name=version::$version" # Set the version as an output variable
# Update the KubeTidy.psm1 file for Krew Plugin
- name: Update KubeTidy.psm1 for Krew Plugin
run: |
# Create a copy of KubeTidy.psm1 directly in the root
$sourceFile = "KubeTidy.psm1"
$destinationFile = "kubectl-KubeTidy"
Copy-Item -Path $sourceFile -Destination $destinationFile -Force
# Prepare the param block to be inserted
$paramBlock = @"
param (
[string]`$KubeConfigPath,
[array]`$ExclusionList,
[switch]`$Force,
[switch]`$ListClusters,
[array]`$MergeConfigs,
[string]`$DestinationConfig,
[switch]`$DryRun,
[Alias("h")] [switch]`$Help
)
"@
# Read content and update it
$content = Get-Content $destinationFile -Raw
# Split the content into lines
$lines = $content -split "`n"
# Initialize newLines to build the updated content
$newLines = @()
# Loop through the lines and modify as needed
foreach ($line in $lines) {
# Replace the marker for the new param block with the actual param block
if ($line -match '# MARKER: NEW PARAM BLOCK') {
$newLines += $paramBlock -split "`n"
continue
}
# Comment out or remove the existing param block
if ($line -match 'param\s*\(' -and $insideParamBlock) {
$newLines += "# $line" # Comment out the line
continue
}
# Add the line to newLines if it is not part of the removed param block
$newLines += $line
# Check for the start of the existing param block to set the flag
if ($line -match 'param\s*\(') {
$insideParamBlock = $true
}
# Check for the end of the existing param block
if ($line -match '\)') {
$insideParamBlock = $false
}
}
# Add the function call marker without the comment
$newLines += "`n# MARKER: FUNCTION CALL"
# Write the updated content back to the file
Set-Content -Path $destinationFile -Value $newLines -Force
# # Update kubectl-KubeTidy.yaml with the new version
# - name: Update Krew Manifest with Version
# run: |
# # Load the YAML content
# $yamlFilePath = "kubectl-KubeTidy.yaml"
# $yamlContent = Get-Content -Path $yamlFilePath -Raw
# # Update the version in the YAML
# $updatedYamlContent = $yamlContent -replace 'version: v\d+\.\d+\.\d+', "version: ${{ steps.get_version.outputs.version }}"
# # Write the updated YAML content back to the file
# Set-Content -Path $yamlFilePath -Value $updatedYamlContent
# Create tar.gz files for Linux and Darwin
- name: Create Tar Files
run: |
# Get the version from the previous step
$version = "${{ steps.get_version.outputs.version }}"
# Create output directory for the tar files
$outputDir = "krewplugin"
New-Item -ItemType Directory -Path $outputDir -Force
# Create platform-specific directories
$linuxDir = "$outputDir/linux"
$darwinDir = "$outputDir/darwin"
New-Item -ItemType Directory -Path $linuxDir -Force
New-Item -ItemType Directory -Path $darwinDir -Force
# Move the updated script to the appropriate platform directories
Copy-Item -Path "kubectl-KubeTidy" -Destination "$linuxDir/kubectl-KubeTidy"
Copy-Item -Path "kubectl-KubeTidy" -Destination "$darwinDir/kubectl-KubeTidy"
# Copy the Private folder into each platform directory
Copy-Item -Path "Private" -Destination "$linuxDir/Private" -Recurse -Force
Copy-Item -Path "Private" -Destination "$darwinDir/Private" -Recurse -Force
# Create tar.gz files for Linux and Darwin using the tar command
tar -czf "$outputDir/kubectl-KubeTidy-linux-amd64-$version.tar.gz" -C "$linuxDir" .
tar -czf "$outputDir/kubectl-KubeTidy-darwin-amd64-$version.tar.gz" -C "$darwinDir" .
# Create a GitHub release and upload the tar.gz files
- name: Create GitHub Release
id: create_release
uses: actions/create-release@v1
with:
tag_name: v${{ steps.get_version.outputs.version }} # Use the version from the output
release_name: kubectl-KubeTidy Release ${{ steps.get_version.outputs.version }}
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Upload the Linux tar.gz Release Asset
- name: Upload Linux Release Asset
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ github.workspace }}/krewplugin/kubectl-KubeTidy-linux-amd64-${{ steps.get_version.outputs.version }}.tar.gz
asset_name: kubectl-KubeTidy-linux-amd64-${{ steps.get_version.outputs.version }}.tar.gz
asset_content_type: application/gzip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Upload the Darwin tar.gz Release Asset
- name: Upload Darwin Release Asset
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ github.workspace }}/krewplugin/kubectl-KubeTidy-darwin-amd64-${{ steps.get_version.outputs.version }}.tar.gz
asset_name: kubectl-KubeTidy-darwin-amd64-${{ steps.get_version.outputs.version }}.tar.gz
asset_content_type: application/gzip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}