Skip to content

Update publish-krewplugin.yaml to insert new param block and remove e… #12

Update publish-krewplugin.yaml to insert new param block and remove e…

Update publish-krewplugin.yaml to insert new param block and remove e… #12

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"
# Find the shebang line and insert the new param block
$shebangLineIndex = $lines.IndexOf('#!/usr/bin/env pwsh')
if ($shebangLineIndex -ne -1) {
# Create a new array of lines with the new param block added
$newLines = @()
$newLines += $lines[0..$shebangLineIndex] # Add lines up to shebang
$newLines += $paramBlock -split "`n" # Add new param block
$newLines += $lines[$shebangLineIndex + 1..$lines.Length] # Add remaining lines
# Now remove the existing param block from the Invoke-KubeTidy function
$invokeFunctionIndex = $newLines.IndexOf('function Invoke-KubeTidy {')
if ($invokeFunctionIndex -ne -1) {
# Loop through lines to find and comment out/remove existing param block
for ($i = $invokeFunctionIndex + 1; $i -lt $newLines.Length; $i++) {
if ($newLines[$i] -match 'param\s*\(') {
# Comment out the existing param block
while ($newLines[$i] -ne '}') {
$newLines[$i] = "# $($newLines[$i])"
$i++
}
break
}
}
}
# Ensure the last lines are correct
$newLines += "`n# Call the function, passing parameters manually for cross-platform compatibility"
$newLines += "`nInvoke-KubeTidy \$PSBoundParameters"
# 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 }}