Skip to content

Refactor publish-krewplugin.yaml to update file paths and remove para… #29

Refactor publish-krewplugin.yaml to update file paths and remove para…

Refactor publish-krewplugin.yaml to update file paths and remove para… #29

name: Publish Plugin to Krew
on:
push:
tags:
- 'v*.*.*'
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
# Read the content of the destination file
$content = Get-Content $destinationFile -Raw
# Create a regex pattern to capture the entire parameter block
$pattern = '# START PARAM BLOCK[\s\S]*?# END PARAM BLOCK' # Capture the entire block, including newlines
# Check if the parameter block exists
if ($content -match $pattern) {
# Capture the parameter block for verification
$paramBlock = $matches[0]
# Display the captured block (optional for debugging)
Write-Host "Captured Block:`n$paramBlock`n"
# Remove the captured parameter block from the original content
$content = $content -replace $pattern, '' # Remove the entire block
# Replace the MARKER: NEW PARAM BLOCK line with the new parameter block
$content = $content -replace '# MARKER: NEW PARAM BLOCK', $paramBlock
# Prepare the new function call to be inserted
$functionCall = @"
# Call the function, passing parameters manually for cross-platform compatibility
Invoke-KubeTidy \$PSBoundParameters
"@
# Replace the MARKER: FUNCTION CALL line with the new function call
$content = $content -replace '# MARKER: FUNCTION CALL', $functionCall
# Save the modified content back to the original script file
Set-Content -Path $destinationFile -Value $content
Write-Host "$destinationFile has been modified successfully."
} else {
Write-Host "No parameter block found to remove."
}
# Convert line endings from Windows (CRLF) to Unix (LF)
- name: Convert Line Endings
run: |
(Get-Content "kubectl-KubeTidy" -Raw) -replace "`r`n", "`n" | Set-Content "kubectl-KubeTidy"
# 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/KubeTidy-linux-amd64-$version.tar.gz" -C "$linuxDir" .
tar -czf "$outputDir/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: 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/KubeTidy-linux-amd64-${{ steps.get_version.outputs.version }}.tar.gz
asset_name: 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/KubeTidy-darwin-amd64-${{ steps.get_version.outputs.version }}.tar.gz
asset_name: KubeTidy-darwin-amd64-${{ steps.get_version.outputs.version }}.tar.gz
asset_content_type: application/gzip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Publish the plugin to Krew
- name: Update new version in krew-index
uses: rajatjindal/krew-release-bot@v0.0.46