Skip to content

Update Package Managers #28

Update Package Managers

Update Package Managers #28

Workflow file for this run

name: Update Package Managers
on:
release:
types: [published]
workflow_dispatch:
inputs:
version:
description: 'Version to update packages for (e.g., 2.4.0)'
required: true
type: string
env:
GO_VERSION: '1.21'
jobs:
check-network-mapper-release:
name: Check if Release is for Network Mapper
runs-on: ubuntu-latest
outputs:
is_network_mapper: ${{ steps.check.outputs.is_network_mapper }}
steps:
- name: Check for network-mapper release
id: check
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ github.event.inputs.version }}"
TAG_NAME="v${VERSION}"
else
TAG_NAME=${GITHUB_REF#refs/tags/}
if [[ $TAG_NAME == network-mapper-v* ]]; then
VERSION=${TAG_NAME#network-mapper-}
elif [[ $TAG_NAME == v* ]]; then
VERSION=${TAG_NAME}
else
echo "Tag '$TAG_NAME' does not match network-mapper format - skipping package updates"
echo "is_network_mapper=false" >> $GITHUB_OUTPUT
exit 0
fi
fi
echo "Checking for network-mapper release with tag: $TAG_NAME"
# Check if network-mapper binary assets exist in the release
RELEASE_INFO=$(gh api repos/${{ github.repository }}/releases/tags/${TAG_NAME} 2>/dev/null || echo "")
if [ -z "$RELEASE_INFO" ]; then
echo "Release ${TAG_NAME} not found"
echo "is_network_mapper=false" >> $GITHUB_OUTPUT
exit 0
fi
# Check if the release has network-mapper assets
ASSET_COUNT=$(echo "$RELEASE_INFO" | jq -r '[.assets[] | select(.name | contains("network-mapper"))] | length')
if [ "$ASSET_COUNT" -gt 0 ]; then
echo "Found $ASSET_COUNT network-mapper assets in release ${TAG_NAME}"
echo "is_network_mapper=true" >> $GITHUB_OUTPUT
else
echo "No network-mapper assets found in release ${TAG_NAME} - skipping package updates"
echo "is_network_mapper=false" >> $GITHUB_OUTPUT
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
update-homebrew:
name: Update and Publish Homebrew Formula
runs-on: ubuntu-latest
needs: check-network-mapper-release
if: needs.check-network-mapper-release.outputs.is_network_mapper == 'true'
permissions:
contents: write
steps:
- name: Checkout main repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set version
id: version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ github.event.inputs.version }}"
else
TAG_NAME=${GITHUB_REF#refs/tags/}
if [[ $TAG_NAME == network-mapper-v* ]]; then
VERSION=${TAG_NAME#network-mapper-v}
elif [[ $TAG_NAME == v* ]]; then
VERSION=${TAG_NAME#v}
fi
fi
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Download and extract checksums
run: |
TAG_NAME=${GITHUB_REF#refs/tags/}
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
TAG_NAME="v${{ github.event.inputs.version }}"
fi
mkdir -p /tmp/checksums
gh release download ${TAG_NAME} --pattern "*.tar.gz.sha256" --dir /tmp/checksums
# Extract checksums
DARWIN_ARM64_SHA=$(cat /tmp/checksums/network-mapper-darwin-arm64.tar.gz.sha256 | cut -d' ' -f1)
DARWIN_AMD64_SHA=$(cat /tmp/checksums/network-mapper-darwin-amd64.tar.gz.sha256 | cut -d' ' -f1)
LINUX_ARM64_SHA=$(cat /tmp/checksums/network-mapper-linux-arm64.tar.gz.sha256 | cut -d' ' -f1)
LINUX_AMD64_SHA=$(cat /tmp/checksums/network-mapper-linux-amd64.tar.gz.sha256 | cut -d' ' -f1)
echo "DARWIN_ARM64_SHA=$DARWIN_ARM64_SHA" >> $GITHUB_ENV
echo "DARWIN_AMD64_SHA=$DARWIN_AMD64_SHA" >> $GITHUB_ENV
echo "LINUX_ARM64_SHA=$LINUX_ARM64_SHA" >> $GITHUB_ENV
echo "LINUX_AMD64_SHA=$LINUX_AMD64_SHA" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout Homebrew tap
uses: actions/checkout@v4
with:
repository: NickBorgers/homebrew-tap
path: homebrew-tap
token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
- name: Update Homebrew formula
run: |
cd homebrew-tap
# Update the formula file
cat > Formula/network-mapper.rb << EOF
class NetworkMapper < Formula
desc "Cross-platform network discovery and visualization tool"
homepage "https://github.com/NickBorgers/util"
version "${{ env.VERSION }}"
license "MIT"
on_macos do
if Hardware::CPU.arm?
url "https://github.com/NickBorgers/util/releases/download/v#{version}/network-mapper-darwin-arm64.tar.gz"
sha256 "${{ env.DARWIN_ARM64_SHA }}"
else
url "https://github.com/NickBorgers/util/releases/download/v#{version}/network-mapper-darwin-amd64.tar.gz"
sha256 "${{ env.DARWIN_AMD64_SHA }}"
end
end
on_linux do
if Hardware::CPU.arm?
url "https://github.com/NickBorgers/util/releases/download/v#{version}/network-mapper-linux-arm64.tar.gz"
sha256 "${{ env.LINUX_ARM64_SHA }}"
else
url "https://github.com/NickBorgers/util/releases/download/v#{version}/network-mapper-linux-amd64.tar.gz"
sha256 "${{ env.LINUX_AMD64_SHA }}"
end
end
def install
bin.install "network-mapper-#{OS.kernel_name.downcase}-#{Hardware::CPU.arch}"
mv bin/"network-mapper-#{OS.kernel_name.downcase}-#{Hardware::CPU.arch}", bin/"network-mapper"
end
def caveats
<<~EOS
Network Mapper may require elevated privileges for some operations:
- On macOS/Linux: Run with 'sudo' if needed for network interface access
- Some features like ARP scanning require root access
To start with intelligent discovery (default, recommended):
network-mapper
To adjust thoroughness for intelligent discovery:
network-mapper --thoroughness 1 # Minimal, faster
network-mapper --thoroughness 5 # Exhaustive, thorough
To run a quick brute-force scan (interface subnets only):
network-mapper --scan-mode quick
For help:
network-mapper --help
EOS
end
test do
assert_match "Network Mapper", shell_output("#{bin}/network-mapper --version")
end
end
EOF
- name: Commit and push Homebrew formula
run: |
cd homebrew-tap
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add Formula/network-mapper.rb
git commit -m "Update network-mapper to ${{ env.VERSION }}
- Updated formula for network-mapper v${{ env.VERSION }}
- Updated checksums for all platforms
- Automated update from release workflow
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>"
git push
update-chocolatey:
name: Update and Publish Chocolatey Package
runs-on: windows-latest
needs: check-network-mapper-release
if: needs.check-network-mapper-release.outputs.is_network_mapper == 'true'
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set version
id: version
shell: pwsh
run: |
if ("${{ github.event_name }}" -eq "workflow_dispatch") {
$Version = "${{ github.event.inputs.version }}"
} else {
$TagName = "${{ github.ref }}" -replace "refs/tags/", ""
if ($TagName -match "^network-mapper-v(.+)$") {
$Version = $Matches[1]
} elseif ($TagName -match "^v(.+)$") {
$Version = $Matches[1]
}
}
echo "VERSION=$Version" >> $env:GITHUB_ENV
echo "version=$Version" >> $env:GITHUB_OUTPUT
- name: Download Windows checksum
shell: pwsh
run: |
$TagName = "${{ github.ref }}" -replace "refs/tags/", ""
if ("${{ github.event_name }}" -eq "workflow_dispatch") {
$TagName = "v${{ github.event.inputs.version }}"
}
gh release download $TagName --pattern "*windows-amd64.exe.zip.sha256" --dir "C:\temp\checksums"
$WindowsSha = (Get-Content "C:\temp\checksums\*windows-amd64.exe.zip.sha256").Split(' ')[0]
echo "WINDOWS_SHA=$WindowsSha" >> $env:GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Chocolatey
shell: pwsh
run: |
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
- name: Prepare Chocolatey package
shell: pwsh
run: |
# Create package directory
$PackageDir = "C:\temp\chocolatey-package"
New-Item -ItemType Directory -Path $PackageDir -Force
New-Item -ItemType Directory -Path "$PackageDir\tools" -Force
# Copy and update nuspec file
$NuspecContent = Get-Content "network-mapper\chocolatey\network-mapper.nuspec" -Raw
$NuspecContent = $NuspecContent -replace '\$version\$', "${{ env.VERSION }}"
$NuspecContent = $NuspecContent -replace '\$releasenotes\$', "Network Mapper ${{ env.VERSION }} - See GitHub releases for full changelog"
Set-Content -Path "$PackageDir\network-mapper.nuspec" -Value $NuspecContent
# Copy and update install script
$InstallScript = Get-Content "network-mapper\chocolatey\tools\chocolateyInstall.ps1" -Raw
$InstallScript = $InstallScript -replace '\$version\$', "${{ env.VERSION }}"
$InstallScript = $InstallScript -replace '\$checksum\$', "${{ env.WINDOWS_SHA }}"
Set-Content -Path "$PackageDir\tools\chocolateyInstall.ps1" -Value $InstallScript
# Copy uninstall script
Copy-Item "network-mapper\chocolatey\tools\chocolateyUninstall.ps1" "$PackageDir\tools\"
- name: Build and publish Chocolatey package
shell: pwsh
run: |
cd "C:\temp\chocolatey-package"
# Pack the package
choco pack network-mapper.nuspec
# Push to Chocolatey community repository
$NupkgFile = Get-ChildItem "*.nupkg" | Select-Object -First 1
choco push $NupkgFile.Name --source https://push.chocolatey.org/ --api-key ${{ secrets.CHOCOLATEY_API_KEY }}
update-local-files:
name: Update Local Package Files
runs-on: ubuntu-latest
needs: [check-network-mapper-release, update-homebrew, update-chocolatey]
if: needs.check-network-mapper-release.outputs.is_network_mapper == 'true'
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set version and tag
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ github.event.inputs.version }}"
TAG_NAME="v${VERSION}"
else
TAG_NAME=${GITHUB_REF#refs/tags/}
if [[ $TAG_NAME == network-mapper-v* ]]; then
VERSION=${TAG_NAME#network-mapper-v}
elif [[ $TAG_NAME == v* ]]; then
VERSION=${TAG_NAME#v}
fi
fi
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV
- name: Download and extract all checksums
run: |
mkdir -p /tmp/checksums
gh release download ${{ env.TAG_NAME }} --pattern "*.sha256" --dir /tmp/checksums
# Extract all checksums
DARWIN_ARM64_SHA=$(cat /tmp/checksums/network-mapper-darwin-arm64.tar.gz.sha256 | cut -d' ' -f1)
DARWIN_AMD64_SHA=$(cat /tmp/checksums/network-mapper-darwin-amd64.tar.gz.sha256 | cut -d' ' -f1)
LINUX_ARM64_SHA=$(cat /tmp/checksums/network-mapper-linux-arm64.tar.gz.sha256 | cut -d' ' -f1)
LINUX_AMD64_SHA=$(cat /tmp/checksums/network-mapper-linux-amd64.tar.gz.sha256 | cut -d' ' -f1)
WINDOWS_SHA=$(cat /tmp/checksums/*windows-amd64.exe.zip.sha256 | cut -d' ' -f1)
echo "DARWIN_ARM64_SHA=$DARWIN_ARM64_SHA" >> $GITHUB_ENV
echo "DARWIN_AMD64_SHA=$DARWIN_AMD64_SHA" >> $GITHUB_ENV
echo "LINUX_ARM64_SHA=$LINUX_ARM64_SHA" >> $GITHUB_ENV
echo "LINUX_AMD64_SHA=$LINUX_AMD64_SHA" >> $GITHUB_ENV
echo "WINDOWS_SHA=$WINDOWS_SHA" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Update local package files
run: |
# Update Homebrew formula (for reference/backup)
sed -i "s/version \".*\"/version \"${{ env.VERSION }}\"/" network-mapper/homebrew/network-mapper.rb
sed -i "/on_macos/,/on_linux/ {/Hardware::CPU.arm?/,/else/ s/sha256 \"[^\"]*\"/sha256 \"${{ env.DARWIN_ARM64_SHA }}\"/}" network-mapper/homebrew/network-mapper.rb
sed -i "/on_macos/,/on_linux/ {/else/,/end/ s/sha256 \"[^\"]*\"/sha256 \"${{ env.DARWIN_AMD64_SHA }}\"/}" network-mapper/homebrew/network-mapper.rb
sed -i "/on_linux/,$ {/Hardware::CPU.arm?/,/else/ s/sha256 \"[^\"]*\"/sha256 \"${{ env.LINUX_ARM64_SHA }}\"/}" network-mapper/homebrew/network-mapper.rb
sed -i "/on_linux/,$ {/else/,/end/ s/sha256 \"[^\"]*\"/sha256 \"${{ env.LINUX_AMD64_SHA }}\"/}" network-mapper/homebrew/network-mapper.rb
# Update Chocolatey package files (for reference/backup)
sed -i "s|\\\$version\\\$|${{ env.VERSION }}|g" network-mapper/chocolatey/tools/chocolateyInstall.ps1
sed -i "s|\\\$checksum\\\$|${{ env.WINDOWS_SHA }}|g" network-mapper/chocolatey/tools/chocolateyInstall.ps1
sed -i "s|\\\$version\\\$|${{ env.VERSION }}|g" network-mapper/chocolatey/network-mapper.nuspec
sed -i "s|\\\$releasenotes\\\$|Network Mapper ${{ env.VERSION }} - See GitHub releases for full changelog|g" network-mapper/chocolatey/network-mapper.nuspec
- name: Commit local package file updates
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add network-mapper/homebrew/network-mapper.rb network-mapper/chocolatey/
if ! git diff --staged --quiet; then
git commit -m "Update local package files for v${{ env.VERSION }}
- Updated Homebrew formula to v${{ env.VERSION }} with new checksums
- Updated Chocolatey package files to v${{ env.VERSION }} with new checksum
- Automated update via package manager workflow
- Note: Live packages are published to their respective repositories
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>"
git push
else
echo "No changes to commit"
fi