1
+ name : Publish PowerShell Module
2
+
3
+ on :
4
+ push :
5
+ branches :
6
+ - master
7
+ tags-ignore :
8
+ - ' v*'
9
+
10
+ permissions :
11
+ contents : write
12
+
13
+ jobs :
14
+ validate-and-publish :
15
+ runs-on : ubuntu-latest
16
+
17
+ steps :
18
+ - name : Checkout repository
19
+ uses : actions/checkout@v4
20
+ with :
21
+ fetch-depth : 0
22
+
23
+ - name : Install PowerShell
24
+ run : |
25
+ sudo apt update
26
+ sudo apt install -y powershell
27
+
28
+ - name : Extract Module Version from Manifest
29
+ id : get_version
30
+ shell : pwsh
31
+ run : |
32
+ # Load the manifest
33
+ $ManifestPath = "PSMultipartFormData/PSMultipartFormData.psd1"
34
+ $ModuleData = Import-PowerShellDataFile -Path $ManifestPath
35
+ $CurrentVersion = $ModuleData.ModuleVersion
36
+
37
+ # Fetch the latest tag (assuming tags follow the versioning scheme)
38
+ git fetch --tags
39
+ $LatestTag = (git tag --sort=-v:refname | Select-Object -First 1) -replace "^v", ""
40
+
41
+ # Compare versions
42
+ Write-Host "Current Module Version: $CurrentVersion"
43
+ Write-Host "Latest Git Tag: $LatestTag"
44
+
45
+ if (-not $LatestTag -or [version]$CurrentVersion -gt [version]$LatestTag) {
46
+ Write-Host "✅ Version has been incremented, proceeding with publish..."
47
+ echo "SHOULD_PUBLISH=true" >> $env:GITHUB_ENV
48
+ echo "version=$CurrentVersion" >> $env:GITHUB_ENV
49
+ } else {
50
+ Write-Host "⚠️ Module version has not been incremented! Skipping publish..."
51
+ echo "SHOULD_PUBLISH=false" >> $env:GITHUB_ENV
52
+ }
53
+
54
+ - name : Publish Module to PSGallery
55
+ if : env.SHOULD_PUBLISH == 'true'
56
+ shell : pwsh
57
+ env :
58
+ PS_GALLERY_KEY : ${{ secrets.PS_GALLERY_KEY }}
59
+ run : |
60
+ if ($env:ACT -eq 'true') {
61
+ Write-Host "✅ Would have published module to PSGallery."
62
+ } else {
63
+ Write-Host "⚙️ Publishing module to PSGallery..."
64
+ $NuGetApiKey = "$($env:PS_GALLERY_KEY)"
65
+ Publish-Module -Path PSMultipartFormData -NuGetApiKey $NuGetApiKey -Repository PSGallery
66
+ Write-Host "✅ Module published to PSGallery."
67
+ }
68
+
69
+ - name : Create Git Tag
70
+ if : env.SHOULD_PUBLISH == 'true'
71
+ env :
72
+ DEPLOY_KEY : ${{ secrets.DEPLOY_KEY }}
73
+ run : |
74
+ if [ "$ACT" = "true" ]; then
75
+ echo "✅ Would have created Git tag."
76
+ else
77
+ echo "🏷️ Creating Git tag..."
78
+ DeployKey="$DEPLOY_KEY"
79
+
80
+ # Configure SSH for GitHub
81
+ mkdir -p ~/.ssh
82
+ echo "$DeployKey" > ~/.ssh/id_rsa
83
+ chmod 600 ~/.ssh/id_rsa
84
+
85
+ # Disable host key checking
86
+ echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config
87
+
88
+ # Setup Git User Config
89
+ git config --global user.name "GitHub Actions"
90
+ git config --global user.email "actions@github.com"
91
+
92
+ git remote set-url origin git@github.com:t3hn3rd/PSMultipartFormData.git
93
+
94
+ git tag "v$version"
95
+ git push origin "v$version"
96
+ echo "✅ Git tag created."
97
+ fi
98
+
99
+ - name : Create GitHub Release
100
+ if : env.SHOULD_PUBLISH == 'true'
101
+ env :
102
+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
103
+ run : |
104
+ if [ "$ACT" = "true" ]; then
105
+ echo "✅ Would have created GitHub release."
106
+ else
107
+ echo "📦 Creating GitHub release for v$version..."
108
+ gh release create "v$version" \
109
+ --repo "$GITHUB_REPOSITORY" \
110
+ --title "PSMultipartFormData v$version" \
111
+ --notes "🚀 Released PSMultipartFormData v$version" \
112
+ --generate-notes
113
+ echo "✅ GitHub release created."
114
+ fi
115
+
116
+ - name : Skip Message (if not publishing)
117
+ if : env.SHOULD_PUBLISH == 'false'
118
+ run : echo "✅ No version change detected, skipping publish."
119
+
120
+ - name : Camo Purge
121
+ uses : kevincobain2000/action-camo-purge@v1
0 commit comments