Skip to content

Fix broken GHA build #710

Fix broken GHA build

Fix broken GHA build #710

Workflow file for this run

name: Full Build
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
env:
# Expected filename: https://zlib.net/zlib-${{env.ZLIB_VERSION}}.tar.gz
#ZLIB: https://zlib.net/
ZLIB: https://ftp.zx.net.nz/pub/dev/lib/zlib/
# As of 2023-01-21 downloads from zlib.net are coming back corrupted for an unknown reason.
# So we're now fetching zlib from ftp.zx.net.nz instead.
ZLIB_VERSION: 1.2.13
# Expected filename: https://www.openssl.org/source/openssl-${{env.OPENSSL_VERSION}}.tar.gz
OPENSSL_VERSION: 3.0.14
# Exoected filename: ${{env.LIBSSH_SOURCE}}libssh-${{env.LIBSSH_VERSION}}.tar.xz
LIBSSH_SOURCE: https://www.libssh.org/files/0.10/
LIBSSH_VERSION: 0.10.6
# OpenZinc is available from http://openzinc.com/Downloads/OZ1.zip
# But we don't want to waste the resources of the generous OpenZinc developer,
# so we grab it from a mirror
OPENZINC: https://ftp.zx.net.nz/pub/dev/openzinc/oz1/OZ1.zip
# For building k95crypt.dll - expected to be a .tar.gz file
LIBDES: https://www.mirrorservice.org/sites/ftp.wiretapped.net/pub/security/cryptography/libraries/libdes/libdes.tar.gz
# Kerberos for Windows - current release for modern builds
KFW_x86: https://web.mit.edu/kerberos/dist/kfw/4.1/kfw-4.1-i386.msi
KFW_x86_64: https://web.mit.edu/kerberos/dist/kfw/4.1/kfw-4.1-amd64.msi
# These are the binaries we expect to be generated by any standard build of CKW
# This includes the core applications plus the telnet crypto and XYZ-MODEM DLLs.
# ctl3dins.exe is not currently included but perhaps should be.
STANDARD_BUILD_OUTPUTS: k95.exe iksd.exe iksdsvc.exe k95d.exe rlogin.exe telnet.exe textps.exe k95g.exe k95crypt.dll p95.dll
# And these are what we currently expect from standard builds for OS/2
OS2_BUILD_OUTPUTS: k2.exe k2clip.exe k2dc.exe rlogin.exe telnet.exe telnetpm.exe textps.exe
# Use JOM instead of nmake for parallel builds
JOM: https://download.qt.io/official_releases/jom/jom.zip
# Make tool for openssl builds. Jom works fine with OpenSSL 1.1.1 but is broken with 3.0.10.
# If jom works ideally we use that as it results in shorter build times.
OPENSSL_MAKE: nmake
# Any extra build flags for OpenSSL. -FS is required if using Jom.
# and -D"_WIN32_WINNT=0x502" is required for targeting Windows XP
OPENSSL_EXTRA_BUILD_FLAGS: -D"_WIN32_WINNT=0x502" -FS
# Where to get the latest official C-Kermit for UNIX/Linux/MacOS X from
# along with its version. The version is only used as a cache key to ensure
# we're not hammering the kermit website or fetching code thats newer than
# what CKW is currently based on.
C_KERMIT_VERSION: 10.0prebeta11
#C_KERMIT_CODE: https://www.kermitproject.org/ftp/kermit/test/tar/x.tar.gz
C_KERMIT_CODE: https://kermitproject.org/ftp/kermit/pretest/x.tar.gz
jobs:
Get-CACerts-Bundle:
runs-on: windows-latest
steps:
- name: Fetch CA Certs bundle
run: |
wget https://curl.se/ca/cacert.pem -outfile ca_certs.pem
wget https://www.mozilla.org/media/MPL/2.0/index.815ca599c9df.txt -outfile ca_certs.license
$readme = @"
ca_certs.pem was exported from the Mozilla CA Certificate Store and is licensed
under the MPL version 2.0.
For more information and updates, see: https://curl.se/docs/caextract.html
"@
New-Item ca_certs.readme
Set-Content ca_certs.readme $readme
dir
shell: powershell
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: ca_certs
path: |
*.pem
*.readme
*.license
retention-days: 1
Prepare-Docs:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: HTMLise Markdown Docs
run: |
pip3 install markdown
(
echo ^<html^>
echo ^<head^>^<title^>C-Kermit for Windows SSH Readme^</title^>^</head^>
echo ^<body^>
) > ssh-readme.html
(
echo ^<html^>
echo ^<head^>^<title^>C-Kermit for Windows Change-Log^</title^>^</head^>
echo ^<body^>
) > change-log.html
python -m markdown -x markdown.extensions.fenced_code ${{ github.workspace }}\doc\ssh-readme.md >> ssh-readme.html
python -m markdown -x markdown.extensions.fenced_code ${{ github.workspace }}\doc\changes.md >> change-log.html
(
echo ^</body^>
echo ^</html^>
) >> change-log.html
(
echo ^</body^>
echo ^</html^>
) >> ssh-readme.html
shell: cmd
working-directory: ${{ github.workspace }}
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: markdown-docs
path: |
change-log.html
ssh-readme.html
retention-days: 1
Build-Wart:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Enable Developer Command Prompt
# You may pin to the exact commit or the version.
# uses: ilammy/msvc-dev-cmd@d8610e2b41c6d0f0c3b4c46dad8df0fd826c68e1
uses: ilammy/msvc-dev-cmd@v1.12.0
with:
arch: x86
- name: Build ckwart
run: |
call ..\..\setenv.bat
nmake /nologo /e /f ckoker.mak ckwart.exe
if not exist ckwart.exe exit /b 1
move ckwart.exe ..\..\ckwart.exe
shell: cmd
working-directory: ${{ github.workspace }}\kermit\k95\
env:
ROOT: ${{ github.workspace }}
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
with:
name: wart-x86
path: ${{ github.workspace }}\ckwart.exe
if-no-files-found: error
retention-days: 1
##############################################################################
# Build with Visual C++ 14.x (2015/2017/2019/2022) #
##############################################################################
# This includes the latest compilers available (2022), plus the most recent
# capable of still targeting Windows XP (2017). All support x86, x86-64, ARM32
# and ARM64.
Build-VisualCxx:
runs-on: windows-latest
needs: [Get-CACerts-Bundle, Prepare-Docs, Build-Wart]
strategy:
matrix:
arch:
- x86
- x64
- x64_arm
- x64_arm64
toolset:
- 14.0
- 14.2
- 14.4
exclude:
# No point building ARM or ARM64 targets with anything less than the latest as the latest
# still supports the first ARM Windows.
- arch: x64_arm
toolset: 14.0
- arch: x64_arm
toolset: 14.1
- arch: x64_arm
toolset: 14.2
- arch: x64_arm64
toolset: 14.0
- arch: x64_arm64
toolset: 14.1
- arch: x64_arm64
toolset: 14.2
steps:
- uses: actions/checkout@v3
- name: Enable Developer Command Prompt
# You may pin to the exact commit or the version.
# uses: ilammy/msvc-dev-cmd@d8610e2b41c6d0f0c3b4c46dad8df0fd826c68e1
uses: ilammy/msvc-dev-cmd@v1.12.0
with:
arch: ${{ matrix.arch }}
toolset: ${{ matrix.toolset }}
#sdk: # use the latest
#spectre: # set true to use VC libraries with sepctre mitigations
##########################################################################
# Build optional dependencies (zlib, openssl, libssh) #
##########################################################################
- name: Cache Optional Dependencies
uses: actions/cache@v3.0.11
id: cache-optional-dependencies
with:
path: |
${{github.workspace}}\zlib
${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}}
${{github.workspace}}\libssh\${{env.LIBSSH_VERSION}}
${{github.workspace}}\libssh\${{env.LIBSSH_VERSION}}-gssapi
${{github.workspace}}\libdes\des
${{github.workspace}}\libdes\Release
${{github.workspace}}\libdes\Debug
${{github.workspace}}\tools
${{github.workspace}}\kerberos\kfw
key: msvc-${{ matrix.toolset }}-${{ matrix.arch }}+zlib-${{env.ZLIB_VERSION}}+openssl-${{env.OPENSSL_VERSION}}+${{env.OPENSSL_MAKE}}+libssh-${{env.LIBSSH_VERSION}}+rel+nasm+xp+dsa+libdes+kfw+ver3
- name: Get dependencies
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true'
run: |
# Get and unpack zlib
mkdir zlib
cd zlib
echo "Fetching ${{env.ZLIB}}/zlib-${{env.ZLIB_VERSION}}.tar.gz to file zlib-${{env.ZLIB_VERSION}}.tar.gz..."
wget ${{env.ZLIB}}/zlib-${{env.ZLIB_VERSION}}.tar.gz -outfile zlib-${{env.ZLIB_VERSION}}.tar.gz
echo "Cmd is: 7z x zlib-${{env.ZLIB_VERSION}}.tar.gz"
7z x zlib-${{env.ZLIB_VERSION}}.tar.gz
echo "Cmd is: 7z x zlib-${{env.ZLIB_VERSION}}.tar"
7z x zlib-${{env.ZLIB_VERSION}}.tar
ren zlib-${{env.ZLIB_VERSION}} ${{env.ZLIB_VERSION}}
del *.tar
del *.gz
cd ..
# Get and unpack openssl
cd openssl
wget https://www.openssl.org/source/openssl-${{env.OPENSSL_VERSION}}.tar.gz -outfile openssl-${{env.OPENSSL_VERSION}}.tar.gz
7z x openssl-${{env.OPENSSL_VERSION}}.tar.gz
7z x openssl-${{env.OPENSSL_VERSION}}.tar
ren openssl-${{env.OPENSSL_VERSION}} ${{env.OPENSSL_VERSION}}
del *.tar
del *.gz
cd ..
# Get and unpack libssh
cd libssh
wget ${{env.LIBSSH_SOURCE}}libssh-${{env.LIBSSH_VERSION}}.tar.xz -outfile libssh-${{env.LIBSSH_VERSION}}.tar.xz
7z x libssh-${{env.LIBSSH_VERSION}}.tar.xz
7z x libssh-${{env.LIBSSH_VERSION}}.tar
ren libssh-${{env.LIBSSH_VERSION}} ${{env.LIBSSH_VERSION}}
# And a second copy for the GSSAPI-enabled build (x86 and x86-64 only
# at this time)
if (("${{matrix.arch}}" -eq "x86") -or ("${{matrix.arch}}" -eq "x64")) {
7z x libssh-${{env.LIBSSH_VERSION}}.tar
ren libssh-${{env.LIBSSH_VERSION}} ${{env.LIBSSH_VERSION}}-gssapi
cd ${{env.LIBSSH_VERSION}}-gssapi
mkdir build
cd ..
}
del *.tar
del *.xz
cd ${{env.LIBSSH_VERSION}}
mkdir build
cd ..
cd ..
# Get and unpack libdes
cd libdes
wget ${{env.LIBDES}} -outfile libdes.tar.gz
7z x libdes.tar.gz
7z x libdes.tar
del *.tar
del *.gz
cd ..
# Get and unpack nasm
mkdir tools
cd tools
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win32/nasm-2.15.05-win32.zip -outfile nasm-2.15.05-win32.zip
7z x nasm-2.15.05-win32.zip
ren nasm-2.15.05 nasm
del *.zip
dir
cd nasm
dir
cd ..
# Get and unpack JOM
mkdir jom
cd jom
wget ${{env.JOM}} -outfile jom.zip
7z x jom.zip
del *.zip
cd ..
# Get KFW
echo Get KFW...
mkdir kerberos
cd kerberos
if ("${{matrix.arch}}" -eq "x86") {
echo x86 platform: ${{env.KFW_x86}}
wget ${{env.KFW_x86}} -outfile kfw.msi
} else {
echo x86-64 platform: ${{env.KFW_x86}}
wget ${{env.KFW_x86_64}} -outfile kfw.msi
}
start-process msiexec -argumentlist "/a kfw.msi /qn TARGETDIR=${{github.workspace}}\kerberos\kfw" -wait
dir ${{github.workspace}}\kerberos\kfw
cd ..
cd ..
# Install perl modules required by OpenSSL build
cpan -i Text::Template
shell: powershell
# No zlib for ARM - it fails at the link step:
# link -nologo -debug -incremental:no -opt:ref -def:./win32/zlib.def -dll -implib:zdll.lib -out:zlib1.dll -base:0x5A4C0000 adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj zlib1.res
# Creating library zdll.lib and object zdll.exp
# LINK : fatal error LNK1355: invalid base address 0x5A4C0000; ARM64 image cannot have base address below 4GB
# See bug: https://github.com/madler/zlib/issues/325
- name: Build zlib
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && (matrix.arch == 'x86' || matrix.arch == 'x64')
shell: cmd
run: |
cd zlib\${{env.ZLIB_VERSION}}
cmake .
nmake -f win32\Makefile.msc
- name: Build openssl (x86)
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x86'
shell: cmd
run: |
set PATH=%PATH%;${{github.workspace}}\tools\jom;${{github.workspace}}\tools\nasm
echo %PATH%
cd openssl\${{env.OPENSSL_VERSION}}
perl Configure VC-WIN32 zlib-dynamic --with-zlib-include=${{github.workspace}}\zlib\${{env.ZLIB_VERSION}} ${{env.OPENSSL_EXTRA_BUILD_FLAGS}}
${{env.OPENSSL_MAKE}}
- name: Build openssl (x86-64)
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x64'
shell: cmd
run: |
set PATH=%PATH%;${{github.workspace}}\tools\jom;${{github.workspace}}\tools\nasm
echo %PATH%
cd openssl\${{env.OPENSSL_VERSION}}
perl Configure VC-WIN64A zlib-dynamic --with-zlib-include=${{github.workspace}}\zlib\${{env.ZLIB_VERSION}} ${{env.OPENSSL_EXTRA_BUILD_FLAGS}}
${{env.OPENSSL_MAKE}}
- name: Build openssl (ARM)
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x64_arm'
shell: cmd
run: |
set PATH=%PATH%;${{github.workspace}}\tools\jom;${{github.workspace}}\tools\nasm
echo %PATH%
cd openssl\${{env.OPENSSL_VERSION}}
perl Configure VC-WIN32-ARM ${{env.OPENSSL_EXTRA_BUILD_FLAGS}}
${{env.OPENSSL_MAKE}}
- name: Build openssl (ARM-64)
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x64_arm64'
shell: cmd
run: |
set PATH=%PATH%;${{github.workspace}}\tools\jom;${{github.workspace}}\tools\nasm
echo %PATH%
cd openssl\${{env.OPENSSL_VERSION}}
perl Configure VC-WIN64-ARM ${{env.OPENSSL_EXTRA_BUILD_FLAGS}}
${{env.OPENSSL_MAKE}}
- name: Build libssh (x86/x86-64)
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && (matrix.arch == 'x86' || matrix.arch == 'x64')
shell: powershell
run: |
cd libssh\${{env.LIBSSH_VERSION}}\build
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}}\ -DZLIB_ROOT:PATH=${{github.workspace}}\zlib\${{env.ZLIB_VERSION}}\ -DWITH_DSA=ON
nmake
- name: Build GSSAPI-enabled libssh (x86/x86-64)
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && (matrix.arch == 'x86' || matrix.arch == 'x64')
shell: cmd
run: |
cd libssh\${{env.LIBSSH_VERSION}}-gssapi
patch -p1 < ..\win32-gssapi.patch
cd build
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}}\ -DZLIB_ROOT:PATH=${{github.workspace}}\zlib\${{env.ZLIB_VERSION}}\ -DWITH_DSA=ON -DGSSAPI_ROOT_DIR="${{github.workspace}}\kerberos\kfw\Kerberos"
nmake
# 32bit ARM doesn't get libssh as version 0.10.3 gets link errors there:
# misc.c.obj : error LNK2019: unresolved external symbol __imp_GetUserNameA referenced in function ssh_get_local_username
# misc.c.obj : error LNK2019: unresolved external symbol __imp_SHGetSpecialFolderPathA referenced in function ssh_get_user_home_dir
# zlib is also disabled as it doesn't currently build for ARM
- name: Build libssh (arm64)
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x64_arm64'
shell: powershell
run: |
cd libssh\${{env.LIBSSH_VERSION}}\build
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}}\ -DWITH_DSA=ON -DWITH_ZLIB=OFF
nmake
- name: Build libdes
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true'
shell: cmd
run: |
set PATH=%PATH%;${{github.workspace}}\tools\jom
set MAKE=jom
cd libdes\
call mknt.bat
- name: Fetch x86 wart
uses: actions/download-artifact@v3
if: matrix.arch != 'x86' && matrix.arch != 'x64'
with:
name: wart-x86
path: ${{ github.workspace }}
##########################################################################
# Build K95, K95G and other bits for redistribution #
##########################################################################
- name: Full Build
run: |
set k4w_root_override=${{github.workspace}}\kerberos\kfw\Kerberos
set openssl_root_override=${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}}
set zlib_root_override=${{github.workspace}}\zlib\${{env.ZLIB_VERSION}}
set libssh_root_override=${{github.workspace}}\libssh\${{env.LIBSSH_VERSION}}
set libssh_build_override=%libssh_root_override%\build
call ..\setenv.bat
set PATH=%PATH%;${{github.workspace}}\tools\jom
set MAKE=jom
REM If the target arch is incompatible with the host arch, use
REM the x86 version of ckwart.exe which should have been placed
REM in the workplace previously, rather than trying to use a
REM version of wart built for the target architecture.
if "%CKB_CROSS_COMPATIBLE%" == "no" set CKB_USE_WART=yes
if "%CKB_CROSS_COMPATIBLE%" == "no" set WART=${{github.workspace}}\ckwart.exe
cd p95
call mknt.bat
cd ..\k95
call mk.bat
call mkdist.bat
REM Check outputs
set MISSING_BUILD_RESULTS=
for %%y in (${{env.STANDARD_BUILD_OUTPUTS}}) do (
if not exist dist\%%y echo Build result not found: %%y
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y
if not exist dist\%%y set FAILED=yes
)
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS%
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1
shell: cmd
working-directory: ${{ github.workspace }}\kermit\
env:
ROOT: ${{ github.workspace }}
- name: Dist GSSAPI-enabled libssh (x86/x86-64)
if: matrix.arch == 'x86' || matrix.arch == 'x64'
shell: cmd
working-directory: ${{ github.workspace }}\kermit\k95\dist
run: |
copy ${{ github.workspace }}\libssh\${{env.LIBSSH_VERSION}}-gssapi\build\src\ssh.dll ssh-gssapi.dll
- name: Fetch CA Certs bundle
uses: actions/download-artifact@v3
with:
name: ca_certs
path: ${{ github.workspace }}\kermit\k95\dist
- name: Fetch Docs
uses: actions/download-artifact@v3
with:
name: markdown-docs
path: ${{ github.workspace }}\kermit\k95\dist
# ARM builds don't currently include SSH so don't need the SSH Readme
- name: Remove SSH Readme
if: matrix.arch == 'x64_arm'
run: del ${{ github.workspace }}\kermit\k95\dist\ssh-readme.html
shell: cmd
- name: Prepare Artifact
shell: cmd
working-directory: ${{ github.workspace }}\kermit\k95
run: |
move dist ${{ github.workspace }}\ckwin
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
with:
name: ckwin-vc${{ matrix.toolset }}-${{ matrix.arch }}
path: ${{ github.workspace }}\ckwin
if-no-files-found: error
retention-days: 7
##############################################################################
# Build with Windows 7 Platform SDK version 7.1 (Visual C++ 2010) #
##############################################################################
# This is the last compiler that can target Itanium. Due to its lack of C99
# support, builds with Visual C++ 2010 and older don't include SSH support.
# OpenSSL 1.1.1t is supported however.
Build-PSDK71:
runs-on: windows-latest
needs: [Get-CACerts-Bundle, Prepare-Docs, Build-Wart]
strategy:
matrix:
arch:
- ia64
#- x86
#- x64
steps:
- uses: actions/checkout@v3
##########################################################################
# Fetch the compiler #
##########################################################################
- name: Cache Compiler
uses: actions/cache@v3.0.11
id: cache-compiler
with:
path: |
${{github.workspace}}\Microsoft SDKs
${{github.workspace}}\Microsoft Visual Studio 10.0
${{github.workspace}}\vc10.cmd
${{github.workspace}}\vcredist_x86.exe
key: platform-sdk-71-compiler+sdk+redist
- name: Get Windows 7 Platform SDK v7.1
if: steps.cache-compiler.outputs.cache-hit != 'true'
run: |
wget https://ftp.zx.net.nz/pub/dev/WinSDK/win7-7.1-dn4/win7-7.1-sdk-vc.7z -outfile win7-7.1-sdk-vc.7z
7z x win7-7.1-sdk-vc.7z
wget https://ftp.zx.net.nz/pub/dev/WinSDK/win7-7.1-dn4/win7-7.1-sdk-psdk.7z -outfile win7-7.1-sdk-psdk.7z
7z x win7-7.1-sdk-psdk.7z
del *.7z
wget http://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe -outfile vcredist_x86.exe
shell: powershell
- name: Install the Visual C++ 2010 Runtime
run: vcredist_x86.exe /q /norestart
shell: cmd
working-directory: ${{ github.workspace }}
##########################################################################
# Build optional dependencies (openssl, libdes) #
##########################################################################
- name: Cache Optional Dependencies
uses: actions/cache@v3.0.11
id: cache-optional-dependencies
with:
path: |
${{github.workspace}}\zlib
${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}}
${{github.workspace}}\libssh
${{github.workspace}}\libdes\des
${{github.workspace}}\libdes\Release
${{github.workspace}}\libdes\Debug
${{github.workspace}}\tools
key: platform-sdk-71-optdepts-${{ matrix.arch }}+nasm+openssl-${{env.OPENSSL_VERSION}}+libdes+v3
- name: Get dependencies
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true'
run: |
# Get and unpack openssl
cd openssl
wget https://www.openssl.org/source/openssl-${{env.OPENSSL_VERSION}}.tar.gz -outfile openssl-${{env.OPENSSL_VERSION}}.tar.gz
7z x openssl-${{env.OPENSSL_VERSION}}.tar.gz
7z x openssl-${{env.OPENSSL_VERSION}}.tar
ren openssl-${{env.OPENSSL_VERSION}} ${{env.OPENSSL_VERSION}}
del *.tar
del *.gz
cd ..
# Get and unpack libdes
cd libdes
wget ${{env.LIBDES}} -outfile libdes.tar.gz
7z x libdes.tar.gz
7z x libdes.tar
del *.tar
del *.gz
cd ..
# Get and unpack nasm
mkdir tools
cd tools
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win32/nasm-2.15.05-win32.zip -outfile nasm-2.15.05-win32.zip
7z x nasm-2.15.05-win32.zip
ren nasm-2.15.05 nasm
del *.zip
dir
cd nasm
dir
cd ..
cd ..
# Get and unpack JOM
cd ${{github.workspace}}\tools
mkdir jom
cd jom
wget ${{env.JOM}} -outfile jom.zip
7z x jom.zip
del *.zip
cd ..
cd ..
# Install perl modules required by OpenSSL build
cpan -i Text::Template
shell: powershell
- name: Build openssl (ia64)
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'ia64'
shell: cmd
run: |
SET PlatformToolset=100
set PATH=%PATH%;${{github.workspace}}\tools\jom
call vc10.cmd /release /xp /${{matrix.arch}}
cd openssl\${{env.OPENSSL_VERSION}}
perl Configure VC-WIN64I -D"_WIN32_WINNT=0x502"
REM The perl configure script doesn't work quite right for cross-compiling to IA64
REM it leaves the /machine flag off the link flags, so we'll just add it on ourselves.
sed -i "s/^LDFLAGS=\/nologo.*/& \/machine:ia64/g" makefile
nmake
- name: Build openssl (x86-64)
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x64'
shell: cmd
run: |
SET PlatformToolset=100
call vc10.cmd /release /xp /${{matrix.arch}}
cd openssl\${{env.OPENSSL_VERSION}}
set PATH=%PATH%;${{github.workspace}}\tools\nasm;${{github.workspace}}\tools\jom
perl Configure VC-WIN64A -D"_WIN32_WINNT=0x502"
REM The perl configure script doesn't work quite right for cross-compiling to x64
REM it leaves the /machine flag off the link flags, so we'll just add it on ourselves.
sed -i "s/^LDFLAGS=\/nologo.*/& \/machine:x64/g" makefile
nmake
- name: Build openssl (x86)
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x86'
shell: cmd
run: |
SET PlatformToolset=100
call vc10.cmd /release /xp /${{matrix.arch}}
cd openssl\${{env.OPENSSL_VERSION}}
set PATH=%PATH%;${{github.workspace}}\tools\nasm;${{github.workspace}}\tools\jom
perl Configure VC-WIN32 -D"_WIN32_WINNT=0x502"
nmake
- name: Build libdes
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true'
shell: cmd
run: |
SET PlatformToolset=100
call vc10.cmd /release /xp /${{matrix.arch}}
set PATH=%PATH%;${{github.workspace}}\tools\jom
set MAKE=jom
cd libdes
call mknt.bat
- name: Fetch x86 wart
uses: actions/download-artifact@v3
if: matrix.arch == 'ia64'
with:
name: wart-x86
path: ${{ github.workspace }}
##########################################################################
# Build K95, K95G and other bits for redistribution #
##########################################################################
- name: Full Build
run: |
echo Configure Platform SDK Build Environment...
SET PlatformToolset=100
call vc10.cmd /release /xp /${{matrix.arch}}
echo Configure build environment...
set openssl_root_override=${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}}
call setenv.bat
set PATH=%PATH%;${{github.workspace}}\tools\jom
set MAKE=jom
if "%CKB_CROSS_COMPATIBLE%" == "no" set CKB_USE_WART=yes
if "%CKB_CROSS_COMPATIBLE%" == "no" set WART=${{github.workspace}}\ckwart.exe
echo Run Build...
cd kermit\p95
call mknt.bat
cd ..\k95
call mk.bat
call mkdist.bat
echo Check outputs...
set MISSING_BUILD_RESULTS=
for %%y in (${{env.STANDARD_BUILD_OUTPUTS}}) do (
if not exist dist\%%y echo Build result not found: %%y
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y
if not exist dist\%%y set FAILED=yes
)
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS%
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1
shell: cmd
working-directory: ${{ github.workspace }}
env:
ROOT: ${{ github.workspace }}
- name: Fetch CA Certs bundle
uses: actions/download-artifact@v3
with:
name: ca_certs
path: ${{ github.workspace }}\kermit\k95\dist
- name: Fetch Docs
uses: actions/download-artifact@v3
with:
name: markdown-docs
path: ${{ github.workspace }}\kermit\k95\dist
# Builds with Visual C++ 2010 don't support SSH so don't need the SSH Readme
- name: Remove SSH Readme
run: del ${{ github.workspace }}\kermit\k95\dist\ssh-readme.html
shell: cmd
- name: Prepare Artifact
shell: cmd
working-directory: ${{ github.workspace }}\kermit\k95
run: |
move dist ${{ github.workspace }}\ckwin
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
with:
name: ckwin-vc10-${{ matrix.arch }}
path: ${{ github.workspace }}\ckwin
if-no-files-found: error
retention-days: 7
##############################################################################
# Build with OpenWatcom 1.9 which allows targeting older versions of Windows #
##############################################################################
# It is also likely to be upset by the same sorts of things as Visual C++ 6
# which reduces the likelihood of accidentally breaking that compiler.
Build-OpenWatcom19-Win32:
runs-on: windows-latest
needs: Prepare-Docs
steps:
- uses: actions/checkout@v3
# Cache OpenWatcom because it takes quite a while to download and
# decompress.
- name: Cache OpenWatcom and Dependencies
uses: actions/cache@v3.0.11
id: cache-watcom-zinc
with:
path: |
${{github.workspace}}\watcom
key: w32-watcom-1.9+openzinc1
- name: Get OpenWatcom 1.9 and Dependencies
if: steps.cache-watcom-zinc.outputs.cache-hit != 'true'
run: |
if (Test-Path watcom) {
Remove-Item watcom -Force
}
mkdir watcom
cd watcom
wget https://github.com/open-watcom/open-watcom-1.9/releases/download/ow1.9/open-watcom-c-win32-1.9.exe -outfile open-watcom-c-win32-1.9.exe
7z x open-watcom-c-win32-1.9.exe
cd ..
mkdir zinc
cd zinc
wget ${{ env.OPENZINC }} -outfile OZ1.zip
7z x OZ1.zip
cd ..
shell: powershell
- name: Full Build
run: |
SET PATH=%WATCOM%\BINW;%PATH%
SET PATH=%WATCOM%\BINNT;%PATH%
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE%
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE%
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DIRECTX
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DDK
SET INCLUDE=%WATCOM%\H;%INCLUDE%
SET EDPATH=%WATCOM%\EDDAT
SET WHTMLHELP=%WATCOM%\BINNT\HELP
SET WIPFC=%WATCOM%\WIPFC
call setenv.bat
cd kermit\p95
call mknt.bat
cd ..\k95
call mk.bat
call mkdist.bat
REM Check outputs
REM ctl3d.exe
set MISSING_BUILD_RESULTS=
REM Can't use STANDARD_BUILD_OUTPUTS as we're not building k95crypt.dll
REM here for some reason.
for %%y in (k95.exe iksd.exe iksdsvc.exe k95d.exe rlogin.exe telnet.exe textps.exe k95g.exe p95.dll) do (
if not exist dist\%%y echo Build result not found: %%y
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y
if not exist dist\%%y set FAILED=yes
)
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS%
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1
shell: cmd
working-directory: ${{ github.workspace }}
env:
ROOT: ${{ github.workspace }}
WATCOM: ${{ github.workspace }}\watcom
- name: Dialer Build
run: |
SET PATH=%WATCOM%\BINW;%PATH%
SET PATH=%WATCOM%\BINNT;%PATH%
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE%
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE%
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DIRECTX
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DDK
SET INCLUDE=%WATCOM%\H;%INCLUDE%
SET EDPATH=%WATCOM%\EDDAT
SET WHTMLHELP=%WATCOM%\BINNT\HELP
SET WIPFC=%WATCOM%\WIPFC
call setenv.bat
cd kermit\dialer
call mk.bat
call mkdist.bat
shell: cmd
working-directory: ${{ github.workspace }}
env:
ROOT: ${{ github.workspace }}
WATCOM: ${{ github.workspace }}\watcom
- name: Prepare Artifacts
shell: cmd
working-directory: ${{ github.workspace }}\kermit\k95
run: |
move dist ${{ github.workspace }}\ckwin
move ..\dialer\dist ${{ github.workspace }}\dialer
- name: Fetch Docs
uses: actions/download-artifact@v3
with:
name: markdown-docs
path: ${{ github.workspace }}\ckwin
# OpenWatcom builds don't include SSH so don't need the SSH Readme
- name: Remove SSH Readme
run: del ${{ github.workspace }}\ckwin\ssh-readme.html
shell: cmd
- name: Upload CKW Artifact
uses: actions/upload-artifact@v3.1.1
with:
name: ckwin-ow1.9-x86
path: ${{ github.workspace }}\ckwin
if-no-files-found: error
retention-days: 7
- name: Upload Dialer Artifact
uses: actions/upload-artifact@v3.1.1
with:
name: dialer-ow1.9-x86
path: ${{ github.workspace }}\dialer
if-no-files-found: error
retention-days: 7
Build-OpenWatcom19-Win32-NT-legacy:
runs-on: windows-latest
needs: Prepare-Docs
steps:
- uses: actions/checkout@v3
# Cache OpenWatcom because it takes quite a while to download and
# decompress.
- name: Cache OpenWatcom
uses: actions/cache@v3.0.11
id: cache-watcom
with:
path: |
${{github.workspace}}\watcom
key: nt-watcom-1.9
- name: Get OpenWatcom 1.9
if: steps.cache-watcom.outputs.cache-hit != 'true'
run: |
if (Test-Path watcom) {
Remove-Item watcom -Force
}
mkdir watcom
cd watcom
wget https://github.com/open-watcom/open-watcom-1.9/releases/download/ow1.9/open-watcom-c-win32-1.9.exe -outfile open-watcom-c-win32-1.9.exe
7z x open-watcom-c-win32-1.9.exe
shell: powershell
- name: Full Build
run: |
SET PATH=%WATCOM%\BINW;%PATH%
SET PATH=%WATCOM%\BINNT;%PATH%
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE%
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE%
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DIRECTX
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DDK
SET INCLUDE=%WATCOM%\H;%INCLUDE%
SET EDPATH=%WATCOM%\EDDAT
SET WHTMLHELP=%WATCOM%\BINNT\HELP
SET WIPFC=%WATCOM%\WIPFC
REM Build for Windows NT 3.50 (and, someday, NT 3.1)
set CKT_NT31=yes
call ..\setenv.bat
cd p95
call mknt.bat
cd ..\k95
call mk.bat
call mkdist.bat
REM Check outputs
REM ctl3d.exe
set MISSING_BUILD_RESULTS=
REM Can't use STANDARD_BUILD_OUTPUTS as we're not building k95crypt.dll
REM here for some reason.
for %%y in (k95.exe iksd.exe iksdsvc.exe k95d.exe rlogin.exe telnet.exe textps.exe k95g.exe p95.dll) do (
if not exist dist\%%y echo Build result not found: %%y
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y
if not exist dist\%%y set FAILED=yes
)
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS%
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1
shell: cmd
working-directory: ${{ github.workspace }}\kermit
env:
ROOT: ${{ github.workspace }}
WATCOM: ${{ github.workspace }}\watcom
- name: Fetch Docs
uses: actions/download-artifact@v3
with:
name: markdown-docs
path: ${{ github.workspace }}\ckwin
# OpenWatcom builds don't include SSH so don't need the SSH Readme
- name: Remove SSH Readme
run: del ${{ github.workspace }}\ckwin\ssh-readme.html
shell: cmd
- name: Prepare Artifact
shell: cmd
working-directory: ${{ github.workspace }}\kermit\k95
run: |
move dist ${{ github.workspace }}\ckwin
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
with:
name: ckwin-ow1.9-x86-nt350
path: ${{ github.workspace }}\ckwin
if-no-files-found: error
retention-days: 7
##############################################################################
# Build C-Kermit for OS/2 with OpenWatcom 1.9 which can cross-compile #
##############################################################################
Build-OpenWatcom19-OS2:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
# Cache OpenWatcom because it takes quite a while to download and
# decompress.
- name: Cache OpenWatcom
uses: actions/cache@v3.0.11
id: cache-watcom-zinc
with:
path: |
${{github.workspace}}\watcom
${{github.workspace}}\zinc
key: os2-watcom-1.9+openzinc1+v2
- name: Get OpenWatcom 1.9
if: steps.cache-watcom-zinc.outputs.cache-hit != 'true'
run: |
if (Test-Path watcom) {
Remove-Item watcom -Force
}
mkdir watcom
cd watcom
wget https://github.com/open-watcom/open-watcom-1.9/releases/download/ow1.9/open-watcom-c-win32-1.9.exe -outfile open-watcom-c-win32-1.9.exe
7z x open-watcom-c-win32-1.9.exe
cd ..
mkdir zinc
cd zinc
wget ${{ env.OPENZINC }} -outfile OZ1.zip
7z x OZ1.zip
cd ..
dir
shell: powershell
- name: Kermit/2 Build
run: |
SET PATH=%WATCOM%\BINW;%PATH%
SET PATH=%WATCOM%\BINNT;%PATH%
SET INCLUDE=%WATCOM%\H;%INCLUDE%
SET EDPATH=%WATCOM%\EDDAT
SET WHTMLHELP=%WATCOM%\BINNT\HELP
SET WIPFC=%WATCOM%\WIPFC
call setenv.bat
cd kermit\k95
call mkos2.bat
call mkdist-os2.bat
REM Check outputs
set MISSING_BUILD_RESULTS=
for %%y in (${{env.OS2_BUILD_OUTPUTS}}) do (
if not exist dist-os2\%%y echo Build result not found: %%y
if not exist dist-os2\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y
if not exist dist-os2\%%y set FAILED=yes
)
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS%
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1
shell: cmd
working-directory: ${{ github.workspace }}
env:
ROOT: ${{ github.workspace }}
WATCOM: ${{ github.workspace }}\watcom
- name: Dialer Build
run: |
SET PATH=%WATCOM%\BINW;%PATH%
SET PATH=%WATCOM%\BINNT;%PATH%
SET INCLUDE=%WATCOM%\H;%INCLUDE%
SET EDPATH=%WATCOM%\EDDAT
SET WHTMLHELP=%WATCOM%\BINNT\HELP
SET WIPFC=%WATCOM%\WIPFC
call setenv.bat
cd kermit\dialer
call mkos2.bat
shell: cmd
working-directory: ${{ github.workspace }}
env:
ROOT: ${{ github.workspace }}
WATCOM: ${{ github.workspace }}\watcom
- name: Make Dialer Distribution
run: mkdist-os2.bat
shell: cmd
working-directory: ${{ github.workspace }}\kermit\dialer
env:
ROOT: ${{ github.workspace }}
WATCOM: ${{ github.workspace }}\watcom
- name: Prepare Artifact
shell: cmd
working-directory: ${{ github.workspace }}\kermit\k95
run: |
move ..\dialer\dist-os2\* dist-os2\
move dist-os2 ${{ github.workspace }}\ckos2
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
with:
name: ckos2-ow1.9-x86
path: ${{ github.workspace }}\ckos2
if-no-files-found: error
retention-days: 7
##############################################################################
# Build with Visual C++ 2003 Toolkit + Windows Server 2003 SP1 Platform SDK #
##############################################################################
# This is the oldest freely available compiler from Microsoft. The bits come
# from the Visual C++ 2003 Toolkit, the Windows Server 2003 SP1 Platform SDK
# as described here:
# https://epics.anl.gov/base/msvctk.php
Build-VCT2003-PSDK2003:
runs-on: windows-latest
needs: [Get-CACerts-Bundle, Prepare-Docs]
strategy:
matrix:
# Do a build using ancient and insecure libraries like libsrp, k4w
# and SuperLAT? This is *purely* for checking support with these
# otherwise rarely tested build options doesn't get accidentlaly
# broken.
legacy_dependencies:
- yes
- no
steps:
- uses: actions/checkout@v3
# We need this only to get cvtres.exe which didn't come with either the
# Visual C++ 2003 Toolkit or the Windows Server 2003 SP1 Platform SDK.
- name: Enable Developer Command Prompt
# You may pin to the exact commit or the version.
# uses: ilammy/msvc-dev-cmd@d8610e2b41c6d0f0c3b4c46dad8df0fd826c68e1
uses: ilammy/msvc-dev-cmd@v1.12.0
with:
arch: x86
toolset: 14.0
# Cache the Visual C++ 2003 Toolkit & Platform SDK because it takes
# quite a while to download and decompress and I don't want my FTP
# server being hit constantly to download this whenever a build runs.
- name: Cache VCT2003
uses: actions/cache@v3.0.11
id: cache-vct2003
with:
path: |
${{github.workspace}}\vct2003
${{github.workspace}}\jom
key: vct2003+psdk2003sp1+jom
- name: Get Visual C++ 2003 Toolkit + Platform SDK 2003
if: steps.cache-vct2003.outputs.cache-hit != 'true'
run: |
wget https://ftp.zx.net.nz/pub/dev/VC2003Toolkit/VCT2003+PSDK2003+cvtres.7z -outfile VCT2003+PSDK2003+cvtres.7z
7z x VCT2003+PSDK2003+cvtres.7z
Rename-Item -Path "Microsoft Platform SDK 2003SP1" -NewName "VCT2003"
Remove-Item VCT2003+PSDK2003+cvtres.7z
Remove-Item VCT2003\Bin\Cvtres.exe
# Get and unpack JOM
mkdir jom
cd jom
wget ${{env.JOM}} -outfile jom.zip
7z x jom.zip
del *.zip
cd ..
shell: powershell
- name: Cache legacy dependencies
uses: actions/cache@v3.0.11
id: cache-legacy-deps
if: matrix.legacy_dependencies == 'yes'
with:
path: |
${{github.workspace}}\srp-2.1.2
${{github.workspace}}\openssl-1.0.1u
${{github.workspace}}\kerberos\kfw-2.6-final
${{github.workspace}}\libdes\des
${{github.workspace}}\libdes\Release
${{github.workspace}}\libdes\Debug
${{github.workspace}}\superlat
${{github.workspace}}\tools
key: libdes+libsrp+openssl-1.0.1u+superlat+kfw-2.6.0-ver2
- name: Get Legacy Dependencies
if: steps.cache-legacy-deps.outputs.cache-hit != 'true' && matrix.legacy_dependencies == 'yes'
run: |
# Make sure everything is clean
#Remove-Item -Recurse -Force libdes\des
#Remove-Item -Recurse -Force libdes\Release
#Remove-Item -Recurse -Force libdes\Debug
#Remove-Item -Recurse -Force kerberos
#Remove-Item -Recurse -Force openssl-1.0.1u
#Remove-Item -Recurse -Force srp-2.1.2
#Remove-Item -Recurse -Force tools
# Get and unpack nasm
mkdir tools
cd tools
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win32/nasm-2.15.05-win32.zip -outfile nasm-2.15.05-win32.zip
7z x nasm-2.15.05-win32.zip
ren nasm-2.15.05 nasm
del *.zip
dir
cd nasm
dir
cd ..
cd ..
# Get and unpack libdes
cd libdes
wget ${{env.LIBDES}} -outfile libdes.tar.gz
7z x libdes.tar.gz
7z x libdes.tar
del *.tar
del *.gz
cd ..
# and libsrp
wget http://srp.stanford.edu/source/srp-2.1.2.tar.gz -outfile srp-2.1.2.tar.gz
7z x srp-2.1.2.tar.gz
7z x srp-2.1.2.tar
cd srp-2.1.2
copy ..\srp\*
cd ..
# and openssl
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz -outfile openssl.tar.gz
7z x openssl.tar.gz
7z x openssl.tar
del *.tar
del *.gz
# and kerberos for windows 2.6.0 (pre-built with Visual C++ 2003 Professional)
cd kerberos
wget https://ftp.zx.net.nz/pub/dev/lib/kfw/kfw-2.6-final-vc2003.zip -outfile kfw-2.6-final-vc2003.zip
7z x *.zip
del *.zip
cd ..
# SuperLAT Headers
mkdir superlat
cd superlat
wget https://web.archive.org/web/20000929005919if_/http://www.meridian.com:80/slatfio.zip -outfile slatfio.zip
7z x slatfio.zip
mkdir include
cd include
copy ..\TESTSVC\LATIOC.H
copy ..\TESTSVC\NETTYPES.H
copy ..\TESTSVC\NTDDTDI.H
copy ..\TESTSVC\PACKOFF.H
copy ..\TESTSVC\PACKON.H
copy ..\TESTSVC\TDI.H
copy ..\TESTSVC\TIHDR.H
cd ..
Remove-Item -Recurse -Force TESTSVC
Remove-Item -Recurse -Force CONN
del README.1ST
del slatfio.zip
cd ..
# Install perl modules required by OpenSSL build
cpan -i Text::Template
shell: powershell
- name: Build libdes
if: steps.cache-legacy-deps.outputs.cache-hit != 'true' && matrix.legacy_dependencies == 'yes'
shell: cmd
run: |
Set PATH=%VCT2003%\bin;%PATH%
REM Don't want to pick up headers or libraries from Visual C++ 14.0
REM which is also on here - we only want it for cvtres.exe.
Set INCLUDE=%VCT2003%\include
Set LIB=%VCT2003%\lib
set CKB_STATIC_CRT=yes
set PATH=%PATH%;${{github.workspace}}\jom
set MAKE=jom
cd libdes
call mknt.bat
env:
VCT2003: ${{ github.workspace }}\VCT2003
- name: Build openssl
if: steps.cache-legacy-deps.outputs.cache-hit != 'true' && matrix.legacy_dependencies == 'yes'
shell: cmd
run: |
Set PATH=%VCT2003%\bin;%PATH%
REM Don't want to pick up headers or libraries from Visual C++ 14.0
REM which is also on here - we only want it for cvtres.exe.
Set INCLUDE=%VCT2003%\include
Set LIB=%VCT2003%\lib;%LIB%
cd openssl-1.0.1u
set PATH=%PATH%;${{github.workspace}}\tools\nasm
perl Configure VC-WIN32 enable-static-engine
call ms\do_ms.bat
REM adjust the makefile to statically link
sed -i "s/\/MD /\/MT /g" ms\ntdll.mak
nmake -f ms\ntdll.mak
env:
VCT2003: ${{ github.workspace }}\VCT2003
- name: Build libsrp
if: steps.cache-legacy-deps.outputs.cache-hit != 'true' && matrix.legacy_dependencies == 'yes'
shell: cmd
run: |
Set PATH=%VCT2003%\bin;%PATH%
REM Don't want to pick up headers or libraries from Visual C++ 14.0
REM which is also on here - we only want it for cvtres.exe.
Set INCLUDE=%VCT2003%\include
Set LIB=%VCT2003%\lib
set CKB_STATIC_CRT=yes
set openssl_root_override=${{ github.workspace }}\openssl-1.0.1u
set srp_root_override=${{ github.workspace }}\srp-2.1.2
call setenv.bat
cd %srp_root_override%
call mknt.bat
env:
ROOT: ${{ github.workspace }}
VCT2003: ${{ github.workspace }}\VCT2003
- name: Full Build
run: |
Set PATH=%VCT2003%\bin;%PATH%
REM Don't want to pick up headers or libraries from Visual C++ 14.0
REM which is also on here - we only want it for cvtres.exe.
Set INCLUDE=%VCT2003%\include
Set LIB=%VCT2003%\lib
set openssl_root_override=${{ github.workspace }}\openssl-1.0.1u
set srp_root_override=${{ github.workspace }}\srp-2.1.2
set k4w_root_override=${{ github.workspace }}\kerberos\kfw-2.6-final\src
call setenv.bat
set PATH=%PATH%;${{github.workspace}}\jom
set MAKE=jom
REM The Visual C++ 2003 Toolkit can only statically link the C Runtime
REM (though apparently you can get the required import library for
REM dynamic linking from the .NET SDK 1.1)
set CKB_STATIC_CRT=yes
cd kermit
echo Building p95...
cd p95
call mknt.bat
echo Building CKW...
cd ..\k95
call mk.bat
call mkdist.bat
REM Check outputs
set MISSING_BUILD_RESULTS=
REM ctl3dins.exe
for %%y in (k95.exe iksd.exe iksdsvc.exe k95d.exe rlogin.exe telnet.exe textps.exe k95g.exe p95.dll) do (
if not exist dist\%%y echo Build result not found: %%y
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y
if not exist dist\%%y set FAILED=yes
)
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS%
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1
shell: cmd
working-directory: ${{ github.workspace }}
env:
ROOT: ${{ github.workspace }}
VCT2003: ${{ github.workspace }}\VCT2003
- name: Full Build Non-standard configs
run: |
Set PATH=%VCT2003%\bin;%PATH%
REM Don't want to pick up headers or libraries from Visual C++ 14.0
REM which is also on here - we only want it for cvtres.exe.
Set INCLUDE=%VCT2003%\include
Set LIB=%VCT2003%\lib
set openssl_root_override=${{ github.workspace }}\openssl-1.0.1u
set srp_root_override=${{ github.workspace }}\srp-2.1.2
set k4w_root_override=${{ github.workspace }}\kerberos\kfw-2.6-final\src
call setenv.bat
set PATH=%PATH%;${{github.workspace}}\jom
set MAKE=jom
REM The Visual C++ 2003 Toolkit can only statically link the C Runtime
REM (though apparently you can get the required import library for
REM dynamic linking from the .NET SDK 1.1)
set CKB_STATIC_CRT=yes
cd kermit\k95
echo Cleaning...
call clean.bat
echo Building iksdnt...
call mkiksd.bat
echo Building kui...
call mkkui.bat
mkdir dist-misc
move *.exe dist-misc
REM Check outputs
set MISSING_BUILD_RESULTS=
for %%y in (cknkui.exe iksdnt.exe) do (
if not exist dist-misc\%%y echo Build result not found: %%y
if not exist dist-misc\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y
if not exist dist-misc\%%y set FAILED=yes
)
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS%
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1
shell: cmd
working-directory: ${{ github.workspace }}
env:
ROOT: ${{ github.workspace }}
VCT2003: ${{ github.workspace }}\VCT2003
- name: Check additional legacy outputs
if: matrix.legacy_dependencies == 'yes'
shell: cmd
working-directory: ${{ github.workspace }}\kermit\k95
run: |
REM Check outputs
set MISSING_BUILD_RESULTS=
REM TODO: srp-tconf.exe srp-passwd.exe
REM TODO: Kerberos bits
for %%y in (k95crypt.dll) do (
if not exist dist\%%y echo Build result not found: %%y
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y
if not exist dist\%%y set FAILED=yes
)
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing legacy build outputs: %MISSING_BUILD_RESULTS%
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1
- name: Fetch CA Certs bundle
if: matrix.legacy_dependencies == 'yes'
uses: actions/download-artifact@v3
with:
name: ca_certs
path: ${{ github.workspace }}\kermit\k95\dist
- name: Fetch Docs
uses: actions/download-artifact@v3
with:
name: markdown-docs
path: ${{ github.workspace }}\kermit\k95\dist
# Builds with Visual C++ 2003 include SSH so don't need the SSH Readme
- name: Remove SSH Readme
run: del ${{ github.workspace }}\kermit\k95\dist\ssh-readme.html
shell: cmd
- name: Prepare Artifact
shell: cmd
working-directory: ${{ github.workspace }}\kermit\k95
run: |
move dist ${{ github.workspace }}\ckwin
move dist-misc ${{ github.workspace }}\ckwin-extra
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
if: matrix.legacy_dependencies == 'no'
with:
name: ckwin-vc7.1-x86
path: ${{ github.workspace }}\ckwin
if-no-files-found: error
retention-days: 7
- name: Upload Artifact (extra)
uses: actions/upload-artifact@v3.1.1
if: matrix.legacy_dependencies == 'no'
with:
name: ckwin-vc7.1-x86-extra
path: ${{ github.workspace }}\ckwin-extra
if-no-files-found: error
retention-days: 7
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
if: matrix.legacy_dependencies == 'yes'
with:
name: ckwin-vc7.1-x86-insecure
path: ${{ github.workspace }}\ckwin
if-no-files-found: error
retention-days: 7
- name: Upload Artifact (extra)
uses: actions/upload-artifact@v3.1.1
if: matrix.legacy_dependencies == 'yes'
with:
name: ckwin-vc7.1-x86-insecure-extra
path: ${{ github.workspace }}\ckwin-extra
if-no-files-found: error
retention-days: 7
##############################################################################
# Build for Itanium with the Windows Server 2003 SP1 Platform SDK #
##############################################################################
# This uses Visual C++ 2005
#
Build-PSDK2003SP1-IA64:
runs-on: windows-latest
needs: [Prepare-Docs, Build-Wart]
steps:
- uses: actions/checkout@v3
# We need this only to get cvtres.exe which didn't come with either the
# Visual C++ 2003 Toolkit or the Windows Server 2003 SP1 Platform SDK.
- name: Enable Developer Command Prompt
# You may pin to the exact commit or the version.
# uses: ilammy/msvc-dev-cmd@d8610e2b41c6d0f0c3b4c46dad8df0fd826c68e1
uses: ilammy/msvc-dev-cmd@v1.12.0
with:
arch: x86
toolset: 14.0
# Cache the Visual C++ 2003 Toolkit & Platform SDK because it takes
# quite a while to download and decompress and I don't want my FTP
# server being hit constantly to download this whenever a build runs.
- name: Cache VCT2003+libdes
uses: actions/cache@v3.0.11
id: cache-vct2003
with:
path: |
${{github.workspace}}\vct2003
${{github.workspace}}\libdes\des
${{github.workspace}}\libdes\Release
${{github.workspace}}\libdes\Debug
${{github.workspace}}\tools
key: vct2003+psdk2003sp1+libdes+v2+jom1
- name: Get Visual C++ 2003 Toolkit + Platform SDK 2003 + libdes
if: steps.cache-vct2003.outputs.cache-hit != 'true'
run: |
wget https://ftp.zx.net.nz/pub/dev/VC2003Toolkit/VCT2003+PSDK2003+cvtres.7z -outfile VCT2003+PSDK2003+cvtres.7z
7z x VCT2003+PSDK2003+cvtres.7z
Rename-Item -Path "Microsoft Platform SDK 2003SP1" -NewName "VCT2003"
Remove-Item VCT2003+PSDK2003+cvtres.7z
Remove-Item VCT2003\Bin\Cvtres.exe
mkdir tools
# Get and unpack JOM
cd tools
mkdir jom
cd jom
wget ${{env.JOM}} -outfile jom.zip
7z x jom.zip
del *.zip
cd ..
cd ..
# Get and unpack libdes
cd libdes
wget ${{env.LIBDES}} -outfile libdes.tar.gz
7z x libdes.tar.gz
7z x libdes.tar
del *.tar
del *.gz
cd ..
shell: powershell
- name: Fetch x86 wart
uses: actions/download-artifact@v3
with:
name: wart-x86
path: ${{ github.workspace }}
- name: Full Build
run: |
Set PATH=%VCT2003%\bin\win64;%VCT2003%\bin;%PATH%
REM Don't want to pick up headers or libraries from Visual C++ 14.0
REM which is also on here - we only want it for cvtres.exe.
Set INCLUDE=%VCT2003%\include
Set LIB=%VCT2003%\lib\ia64
call setenv.bat
REM Use the supplied x86 build of wart rather than building it for
REM itanium then fail to run it on the not-itanium build host
set CKB_USE_WART=yes
set WART=${{github.workspace}}\ckwart.exe
set PATH=%PATH%;${{github.workspace}}\tools\jom
set MAKE=jom
cd libdes
call mknt.bat
cd ..
cd kermit\p95
call mknt.bat
cd ..\k95
call mk.bat
call mkdist.bat
REM Check outputs
set MISSING_BUILD_RESULTS=
for %%y in (${{env.STANDARD_BUILD_OUTPUTS}}) do (
if not exist dist\%%y echo Build result not found: %%y
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y
if not exist dist\%%y set FAILED=yes
)
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS%
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1
shell: cmd
working-directory: ${{ github.workspace }}
env:
ROOT: ${{ github.workspace }}
VCT2003: ${{ github.workspace }}\VCT2003
- name: Fetch Docs
uses: actions/download-artifact@v3
with:
name: markdown-docs
path: ${{ github.workspace }}\kermit\k95\dist
# Builds with Visual C++ 2005 don't include SSH so don't need the SSH Readme
- name: Remove SSH Readme
if: matrix.arch == 'x64_arm'
run: del ${{ github.workspace }}\kermit\k95\dist\ssh-readme.html
shell: cmd
- name: Prepare Artifact
shell: cmd
working-directory: ${{ github.workspace }}\kermit\k95
run: |
move dist ${{ github.workspace }}\ckwin
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
with:
name: ckwin-vc8-ia64
path: ${{ github.workspace }}\ckwin
if-no-files-found: error
retention-days: 7
##############################################################################
# Cross-compile for 64bit Windows from Linux with MinGW64 #
##############################################################################
# Not for release builds. Just to ensure GCC/MinGW compatibility doesn't get
# broken accidentally.
#
Build-MinGW64-Linux:
runs-on: ubuntu-latest
needs: [Get-CACerts-Bundle, Prepare-Docs]
steps:
- uses: actions/checkout@v3
- name: Install MinGW-w64
run: sudo apt install -y g++-mingw-w64-x86-64-posix gcc-mingw-w64-x86-64-posix binutils-mingw-w64-x86-64
- name: Cache Dependencies
uses: actions/cache@v3.0.11
id: cache-dependencies
with:
path: |
${{github.workspace}}/openssl
${{github.workspace}}/libssh
${{github.workspace}}/zlib
key: deps-openssl-${{env.OPENSSL_VERSION}}-parallel
- name: Build OpenSSL
if: steps.cache-dependencies.outputs.cache-hit != 'true'
shell: bash
env:
CXX: /usr/bin/x86_64-w64-mingw32-c++
CC: /usr/bin/x86_64-w64-mingw32-gcc
RC: /usr/bin/x86_64-w64-mingw32-windres
run: |
mkdir -p openssl
cd openssl
wget https://www.openssl.org/source/openssl-${{env.OPENSSL_VERSION}}.tar.gz
tar zxf openssl-${{env.OPENSSL_VERSION}}.tar.gz
rm openssl-${{env.OPENSSL_VERSION}}.tar.gz
cd openssl-${{env.OPENSSL_VERSION}}
perl Configure mingw64
make depend
make -j 2
- name: Build
shell: bash
env:
CXX: /usr/bin/x86_64-w64-mingw32-c++
CC: /usr/bin/x86_64-w64-mingw32-gcc
run: |
cd kermit/k95
make -j 2 RC=/usr/bin/x86_64-w64-mingw32-windres OPENSSL=../../openssl/openssl-${{env.OPENSSL_VERSION}}/
- name: Make Distribution
shell: bash
run: |
pushd kermit/k95
bash ./mkdist.sh
popd
mv kermit/k95/ckwin ./
- name: Fetch CA Certs bundle
uses: actions/download-artifact@v3
with:
name: ca_certs
path: ${{ github.workspace }}/ckwin
- name: Fetch Docs
uses: actions/download-artifact@v3
with:
name: markdown-docs
path: ${{ github.workspace }}/ckwin
# We're not currently building libssh on linux so remove the ssh readme
- name: Remove SSH Readme
run: rm ${{ github.workspace }}/ckwin/ssh-readme.html
shell: bash
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
with:
name: ckwin-mingw64-cross
path: ${{ github.workspace }}/ckwin
if-no-files-found: error
##############################################################################
# Build C-Kermit for Linux with the ckwin version of the shared modules #
##############################################################################
# To ensure any local changes to ckc* and cku* modules haven't accidentally
# broken C-Kermit on Linux, grab the latest linux code and substitute in
# our version of these files to check it all still builds.
#
# Note that if we get out-of-sync with C-Kermit for UNIX changes this may
# run into build errors.
#
# This also isn't anywhere near a perfect test. Just because this builds
# doesn't mean we haven't broken something on OpenVMS or Solaris or AIX
# or Digital UNIX or BSD or MacOS X or any number of other platforms.
C-Kermit-Linux-Build-Test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install libpam-dev openssl libssl-dev
# Cache the C-Kermit code so that we're not hitting the C-Kermit website
# for every build.
- name: Cache code
uses: actions/cache@v3.0.11
id: cache-code
with:
path: |
${{github.workspace}}/ckermit
${{github.workspace}}/openssl
key: ${{ runner.os }}-ckermit${{ env.C_KERMIT_VERSION }}-r1
- name: Get C-Kermit ${{env.C_KERMIT_VERSION}}
if: steps.cache-code.outputs.cache-hit != 'true'
run: |
wget ${{ env.C_KERMIT_CODE }} -O ckermit.tar.gz
mkdir -p ckermit
pushd ckermit
tar -zxvf ../ckermit.tar.gz
popd
rm ckermit.tar.gz
shell: bash
- name: Copy C-Kermit for Unix files
run: |
pushd ckermit
cp -n ../kermit/k95/cku* ./
cp -n ../kermit/k95/ckc* ./
popd
shell: bash
- name: Build C-Kermit
run: |
pushd ckermit
chmod +x ckubuildlog
make clean
make linux+ssl | tee log
./ckubuildlog
cat linux+ssl.txt
popd
shell: bash