Skip to content

Commit 8805d1a

Browse files
author
Sean
committed
update docker images to use SDK instead of powershell (no longer supported).
1 parent e3353de commit 8805d1a

File tree

6 files changed

+212
-79
lines changed

6 files changed

+212
-79
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
2+
name: Build and Publish Docker Images
3+
4+
on:
5+
workflow_dispatch:
6+
schedule:
7+
- cron: '0 0 15 * *'
8+
workflow_run:
9+
workflows: ["Package and Upload Release Asset"]
10+
types:
11+
- completed
12+
13+
jobs:
14+
15+
getReleaseVersion:
16+
name: Get Latest Release Version
17+
runs-on: windows-2022
18+
outputs:
19+
release_version: ${{ steps.latestVersion.outputs.release }}
20+
steps:
21+
- name: Get latest version
22+
id: latestVersion
23+
uses: pozetroninc/github-action-get-latest-release@master
24+
with:
25+
owner: seabopo
26+
repo: psPodTester
27+
excludes: prerelease, draft
28+
29+
win2022:
30+
name: Build Windows 2022 Image
31+
runs-on: windows-2022
32+
needs: getReleaseVersion
33+
steps:
34+
- name: Checkout
35+
uses: actions/checkout@v4
36+
- name: Build and Push Docker Image
37+
uses: mr-smithers-excellent/docker-build-push@v6
38+
with:
39+
image: seabopo/pspodtester
40+
tags: ${{ github.run_id }}-${{ github.run_number }}-nanoserver-ltsc2022-${{ env.RELEASE }},nanoserver-ltsc2022-${{ env.RELEASE }}, nanoserver-ltsc2022
41+
registry: docker.io
42+
dockerfile: ./docker/dockerfile
43+
buildArgs: BASE_IMAGE=mcr.microsoft.com/powershell:lts-nanoserver-ltsc2022, APP_VERSION=${{ env.RELEASE }}
44+
username: ${{ secrets.DOCKERHUB_USERNAME }}
45+
password: ${{ secrets.DOCKERHUB_TOKEN }}
46+
env:
47+
RELEASE: ${{ needs.getReleaseVersion.outputs.release_version }}
48+
49+
win1809:
50+
name: Build Windows 2019 Image
51+
runs-on: windows-2019
52+
needs: getReleaseVersion
53+
steps:
54+
- name: Checkout
55+
uses: actions/checkout@v4
56+
- name: Build and Push Docker Image
57+
uses: mr-smithers-excellent/docker-build-push@v6
58+
with:
59+
image: seabopo/pspodtester
60+
tags: ${{ github.run_id }}-${{ github.run_number }}-nanoserver-1809-${{ env.RELEASE }}, nanoserver-1809-${{ env.RELEASE }}, nanoserver-1809
61+
registry: docker.io
62+
dockerfile: ./docker/dockerfile
63+
buildArgs: BASE_IMAGE=mcr.microsoft.com/powershell:lts-nanoserver-1809, APP_VERSION=${{ env.RELEASE }}
64+
username: ${{ secrets.DOCKERHUB_USERNAME }}
65+
password: ${{ secrets.DOCKERHUB_TOKEN }}
66+
env:
67+
RELEASE: ${{ needs.getReleaseVersion.outputs.release_version }}
68+
69+
multiarch:
70+
name: Build Windows Multi-Arch Image
71+
needs: [getReleaseVersion, win2022, win1809]
72+
runs-on: windows-2022
73+
steps:
74+
- uses: docker/login-action@v3
75+
with:
76+
username: ${{ secrets.DOCKERHUB_USERNAME }}
77+
password: ${{ secrets.DOCKERHUB_TOKEN }}
78+
- name: BUILD latest
79+
run: docker manifest create seabopo/pspodtester:latest --amend seabopo/pspodtester:nanoserver-1809-${{ env.RELEASE }} --amend seabopo/pspodtester:nanoserver-ltsc2022-${{ env.RELEASE }}
80+
env:
81+
RELEASE: ${{ needs.getReleaseVersion.outputs.release_version }}
82+
- name: PUSH latest
83+
run: docker manifest push --purge seabopo/pspodtester:latest
84+
env:
85+
RELEASE: ${{ needs.getReleaseVersion.outputs.release_version }}
86+
- name: BUILD nanoserver
87+
run: docker manifest create seabopo/pspodtester:nanoserver --amend seabopo/pspodtester:nanoserver-1809-${{ env.RELEASE }} --amend seabopo/pspodtester:nanoserver-ltsc2022-${{ env.RELEASE }}
88+
env:
89+
RELEASE: ${{ needs.getReleaseVersion.outputs.release_version }}
90+
- name: PUSH nanoserver
91+
run: docker manifest push --purge seabopo/pspodtester:nanoserver
92+
env:
93+
RELEASE: ${{ needs.getReleaseVersion.outputs.release_version }}
94+
- name: BUILD nanoserver-version
95+
run: docker manifest create seabopo/pspodtester:nanoserver-${{ env.RELEASE }} --amend seabopo/pspodtester:nanoserver-1809-${{ env.RELEASE }} --amend seabopo/pspodtester:nanoserver-ltsc2022-${{ env.RELEASE }}
96+
env:
97+
RELEASE: ${{ needs.getReleaseVersion.outputs.release_version }}
98+
- name: PUSH nanoserver-version
99+
run: docker manifest push --purge seabopo/pspodtester:nanoserver-${{ env.RELEASE }}
100+
env:
101+
RELEASE: ${{ needs.getReleaseVersion.outputs.release_version }}
102+

.github/workflows/build-and-publish-docker-images.yml

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,35 +40,15 @@ jobs:
4040
tags: ${{ github.run_id }}-${{ github.run_number }}-nanoserver-ltsc2022-${{ env.RELEASE }},nanoserver-ltsc2022-${{ env.RELEASE }}, nanoserver-ltsc2022
4141
registry: docker.io
4242
dockerfile: ./docker/dockerfile
43-
buildArgs: BASE_IMAGE=mcr.microsoft.com/powershell:lts-nanoserver-ltsc2022, APP_VERSION=${{ env.RELEASE }}
44-
username: ${{ secrets.DOCKERHUB_USERNAME }}
45-
password: ${{ secrets.DOCKERHUB_TOKEN }}
46-
env:
47-
RELEASE: ${{ needs.getReleaseVersion.outputs.release_version }}
48-
49-
win1809:
50-
name: Build Windows 2019 Image
51-
runs-on: windows-2019
52-
needs: getReleaseVersion
53-
steps:
54-
- name: Checkout
55-
uses: actions/checkout@v4
56-
- name: Build and Push Docker Image
57-
uses: mr-smithers-excellent/docker-build-push@v6
58-
with:
59-
image: seabopo/pspodtester
60-
tags: ${{ github.run_id }}-${{ github.run_number }}-nanoserver-1809-${{ env.RELEASE }}, nanoserver-1809-${{ env.RELEASE }}, nanoserver-1809
61-
registry: docker.io
62-
dockerfile: ./docker/dockerfile
63-
buildArgs: BASE_IMAGE=mcr.microsoft.com/powershell:lts-nanoserver-1809, APP_VERSION=${{ env.RELEASE }}
43+
buildArgs: BASE_IMAGE=mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-ltsc2022, APP_VERSION=${{ env.RELEASE }}
6444
username: ${{ secrets.DOCKERHUB_USERNAME }}
6545
password: ${{ secrets.DOCKERHUB_TOKEN }}
6646
env:
6747
RELEASE: ${{ needs.getReleaseVersion.outputs.release_version }}
6848

6949
multiarch:
7050
name: Build Windows Multi-Arch Image
71-
needs: [getReleaseVersion, win2022, win1809]
51+
needs: [getReleaseVersion, win2022]
7252
runs-on: windows-2022
7353
steps:
7454
- uses: docker/login-action@v3

docker/dockerfile

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11

22
#
33
# NOTES:
4-
# Base Image: https://hub.docker.com/_/microsoft-powershell
5-
# Application: https://github.com/seabopo/psStress
6-
# Module Source: https://github.com/seabopo/psPodTester/releases/download/v1.0.0/psPodTester_v1.0.0.zip
7-
#
8-
# Use the PowerShell version of NanoServer to make installation easier/dynamic.
4+
# Base Image: mcr.microsoft.com/powershell:lts-nanoserver-ltsc2022
5+
# mcr.microsoft.com/powershell:lts-nanoserver-1809
6+
# mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-ltsc2022
7+
# mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809
8+
# Application: https://github.com/seabopo/psPodTester
9+
# Module Source: https://github.com/seabopo/psPodTester/releases/download/v1.1.2/psPodTester_v1.1.2.zip
910
# Put the app in a subdirectory to avoid security errors during installation.
1011
#
11-
# Variables are fed from the BuildTasks section of the ado-pipeline.yml file.
12-
#
1312

1413
ARG BASE_IMAGE
1514

1615
FROM ${BASE_IMAGE}
1716

18-
ARG APP_VERSION=v1.0.0
17+
ARG APP_VERSION=v1.2.0
1918

2019
SHELL ["pwsh", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
2120

docker/local1809/dockerfile

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
2+
#
3+
# NOTES:
4+
# Base Image: mcr.microsoft.com/powershell:lts-nanoserver-ltsc2022
5+
# mcr.microsoft.com/powershell:lts-nanoserver-1809
6+
# mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-ltsc2022
7+
# mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809
8+
# Application: https://github.com/seabopo/psPodTester
9+
# Module Source: https://github.com/seabopo/psPodTester/releases/download/v1.1.2/psPodTester_v1.1.2.zip
10+
# Put the app in a subdirectory to avoid security errors during installation.
11+
#
12+
# docker build -t "seabopo/pspodtester:nanoserver-1809-v1.2.0" -t "seabopo/pspodtester:nanoserver-1809" .
13+
#
14+
15+
ARG BASE_IMAGE=mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809
16+
17+
FROM ${BASE_IMAGE}
18+
19+
ARG APP_VERSION=v1.2.0
20+
21+
SHELL ["pwsh", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
22+
23+
RUN Write-Host "Application Version: $($env:APP_VERSION)"; \
24+
Write-Host "URI: https://github.com/seabopo/psPodTester/releases/download/$($env:APP_VERSION)/psPodTester_$($env:APP_VERSION).zip"; \
25+
New-Item \
26+
-ItemType directory \
27+
-Path "/psPodTester"; \
28+
Invoke-WebRequest \
29+
-Uri "https://github.com/seabopo/psPodTester/releases/download/$($env:APP_VERSION)/psPodTester_$($env:APP_VERSION).zip" \
30+
-OutFile "/psPodTester/psPodTester.zip"; \
31+
Expand-Archive \
32+
-Path "/psPodTester/psPodTester.zip" \
33+
-DestinationPath "/" \
34+
-Force; \
35+
Remove-Item \
36+
-Path "/psPodTester/psPodTester.zip" \
37+
-Force;
38+
39+
USER ContainerAdministrator
40+
41+
ENTRYPOINT ["pwsh.exe"]
42+
43+
CMD [ "-File", "C:/psPodTester/docker.ps1" ]
44+
45+
LABEL org.opencontainers.image.title="psPodTester" \
46+
org.opencontainers.image.description="A PowerShell module to test Windows container deployments." \
47+
org.opencontainers.image.documentation="https://github.com/seabopo/psPodTester" \
48+
org.opencontainers.image.base.name="${BASE_IMAGE}" \
49+
org.opencontainers.image.version="${APP_VERSION}" \
50+
org.opencontainers.image.url="https://hub.docker.com/r/seabopo/pspodtester" \
51+
org.opencontainers.image.vendor="seabopo" \
52+
org.opencontainers.image.authors="seabopo @ GitHub"

psPodTester/public/Start-WebServer.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ function Start-WebServer
124124
}
125125
) -join "`r`n" )
126126
$showheaders = $true
127-
"break"
127+
break
128128
}
129129
"GET /userlog" { $contentPath = $WS_USR_LOG_PATH; break }
130130
"GET /applog" { $contentPath = $WS_APP_LOG_PATH; break }

tests/psPodTester-tests.ps1

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,17 @@ $null | Out-File $( '{0}/http/msg.log' -f $modulePath )
2424

2525
$Test = @{
2626

27-
# WebServerPreset = $true
28-
# WebServer = $true
29-
# WebServerDirect = $true
27+
DockerContainer = $true
3028

31-
# DefaultStress = $true
29+
# DockerContainerMount = $true
30+
31+
# WebServerPreset = $true
3232

3333
# DockerCodeWSprofile = $true
3434
# DockerCodeCustom = $true
35-
36-
DockerContainer = $true
37-
35+
# WebServer = $true
36+
# WebServerDirect = $true
37+
# DefaultStress = $true
3838
# DumpDebugData = $true
3939
# AutomaticThreads = $true
4040
# ManualThreads = $true
@@ -49,59 +49,54 @@ $Test = @{
4949
# get-job | stop-job
5050
# get-job | Remove-Job
5151

52-
# Requies this this session to be running as admin ...
52+
# Requires this this session to be running as admin ...
5353
if ( $Test.WebServerDirect ) { $env:PSPOD_APP_NAME = 'psPodTester'; Start-Webserver -c }
5454

5555
if ( $Test.WebServerPreset ) {
56+
Remove-Item -Path Env:\PSPOD_TEST_*
5657
$env:PSPOD_PRESET_Webserver = 1
5758
Start-psPodTesterServices
5859
}
5960

6061
if ( $Test.WebServer ) {
61-
$env:PSPOD_TEST_EnableWebServer = 1
62-
$env:PSPOD_TEST_WebServerPort = 8080
63-
$env:PSPOD_TEST_EnableConsoleLogs = 1
64-
$env:PSPOD_TEST_ShowDebugData = 1
65-
$env:PSPOD_TEST_ShowPodInfo = 1
66-
$env:PSPOD_TEST_SendMessages = 1
67-
$env:PSPOD_TEST_MessagePrefix = 'UniqueMessagePrefix'
68-
$env:PSPOD_TEST_NoStress = 1
69-
$env:PSPOD_TEST_NoExit = 1
70-
$env:PSPOD_INFO_PodName = 'Podname'
71-
$env:PSPOD_INFO_ServerName = 'ServerName'
72-
Start-psPodTesterServices
62+
Remove-Item -Path Env:\PSPOD_TEST_*
63+
$env:PSPOD_TEST_EnableWebServer = 1
64+
$env:PSPOD_TEST_WebServerPort = 8080
65+
$env:PSPOD_TEST_EnableConsoleLogs = 1
66+
$env:PSPOD_TEST_ShowDebugData = 1
67+
$env:PSPOD_TEST_ShowPodInfo = 1
68+
$env:PSPOD_TEST_SendMessages = 1
69+
$env:PSPOD_TEST_MessagePrefix = 'UniqueMessagePrefix'
70+
$env:PSPOD_TEST_NoStress = 1
71+
$env:PSPOD_TEST_NoExit = 1
72+
$env:PSPOD_INFO_PodName = 'Podname'
73+
$env:PSPOD_INFO_ServerName = 'ServerName'
74+
Start-psPodTesterServices
7375
}
7476

75-
7677
if ( $Test.DefaultStress ) {
77-
$env:PSPOD_TEST_EnableWebServer = 1
78-
$env:PSPOD_TEST_WebServerPort = 8080
79-
$env:PSPOD_TEST_EnableConsoleLogs = 1
80-
$env:PSPOD_TEST_ShowDebugData = 1
81-
$env:PSPOD_TEST_ShowPodInfo = 1
82-
$env:PSPOD_TEST_SendMessages = 1
83-
$env:PSPOD_TEST_MessagePrefix = 'UniqueMessagePrefix'
84-
$env:PSPOD_INFO_PodName = 'Podname'
85-
$env:PSPOD_INFO_ServerName = 'ServerName'
86-
Start-psPodTesterServices
78+
Remove-Item -Path Env:\PSPOD_TEST_*
79+
$env:PSPOD_TEST_EnableWebServer = 1
80+
$env:PSPOD_TEST_WebServerPort = 8080
81+
$env:PSPOD_TEST_EnableConsoleLogs = 1
82+
$env:PSPOD_TEST_ShowDebugData = 1
83+
$env:PSPOD_TEST_ShowPodInfo = 1
84+
$env:PSPOD_TEST_SendMessages = 1
85+
$env:PSPOD_TEST_MessagePrefix = 'UniqueMessagePrefix'
86+
$env:PSPOD_INFO_PodName = 'Podname'
87+
$env:PSPOD_INFO_ServerName = 'ServerName'
88+
Start-psPodTesterServices
8789
}
8890

89-
90-
if ( $Test.DockerCodeWSprofile )
91-
{
91+
if ( $Test.DockerCodeWSprofile ) {
9292
Remove-Item -Path Env:\PSPOD_TEST_*
93-
9493
$env:PSPOD_PRESET_Webserver = 1
9594
$env:PSPOD_TEST_CpuThreads = 3
96-
9795
..\pspodtester\docker.ps1
98-
9996
}
10097

101-
if ( $Test.DockerCodeCustom )
102-
{
98+
if ( $Test.DockerCodeCustom ) {
10399
Remove-Item -Path Env:\PSPOD_TEST_*
104-
105100
$env:PSPOD_TEST_StressDuration = 33
106101
$env:PSPOD_TEST_WarmUpInterval = 3
107102
$env:PSPOD_TEST_CoolDownInterval = 3
@@ -124,12 +119,9 @@ if ( $Test.DockerCodeCustom )
124119
$env:PSPOD_INFO_ServerName = 'ServerName'
125120
$env:PSPOD_TEST_SendMessages = 1
126121
$env:PSPOD_TEST_MessagePrefix = 'UniqueMessagePrefix'
127-
128122
.\pspodtester\docker.ps1
129-
130123
}
131124

132-
133125
if ( $Test.DumpDebugData ) { Start-Testing -ns -dd -pi }
134126

135127
if ( $Test.AutomaticThreads ) { Start-Testing -sd 3 -wi 1 -ci 0 -si 1 -ri 1 -ws }
@@ -144,8 +136,6 @@ if ( $Test.Memory ) { Start-Testing -sd 2 -wi 0 -ci 0 -si 1 -ri 1 -NoC
144136

145137
if ( $Test.None ) { Start-Testing -sd 5 -wi 0 -ci 0 -si 2 -ri 2 -NoCPU -NoMemory }
146138

147-
148-
149139
# NOTES:
150140
# - Windows Versions:
151141
# - The Windows 10 and Windows Server 2019 OS require the 'lts-nanoserver-1809' image.
@@ -166,10 +156,20 @@ if ( $Test.None ) { Start-Testing -sd 5 -wi 0 -ci 0 -si 2 -ri 2 -NoC
166156
#
167157
# UPDATE "SOURCE=C:\Repos\Github\psPodTester\psPodTester" to your own repo path for testing.
168158
#
169-
if ( $Test.DockerContainer )
170-
{
171159

172-
# Test Webserver Preset.
160+
if ( $Test.DockerContainer ) {
161+
# Test Webserver Preset using the latest build.
162+
docker run -e "PSPOD_PRESET_Webserver=1" `
163+
-e "PSPOD_NOADMIN=1" `
164+
-p 80:80 `
165+
seabopo/pspodtester:nanoserver-1809-v1.2.0
166+
exit
167+
}
168+
169+
170+
if ( $Test.DockerContainerMount ) {
171+
172+
# Test Webserver Preset.
173173
docker run --mount type=bind,source=C:\Repos\Github\psPodTester\psPodTester,target=C:\psPodTester `
174174
-e "PSPOD_PRESET_Webserver=1" `
175175
-e "PSPOD_NOADMIN=1" `

0 commit comments

Comments
 (0)