Windows MSYS1 Workflow #292
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Windows MSYS1 Workflow | |
on: | |
workflow_dispatch: | |
inputs: | |
run_id: | |
description: 'The run ID of the workflow providing the CI tarball' | |
required: true | |
defaults: | |
run: | |
shell: cmd | |
jobs: | |
msys_build_test_createdist: | |
runs-on: windows-latest | |
timeout-minutes: 30 | |
env: | |
MSYS_ROOT: C:\MinGW | |
MSYS_BIN: C:\MinGW\msys\1.0\bin | |
#BISON_PKGDATADIR: C:\MinGW\share\bison | |
M4: m4 | |
MSYSTEM: MINGW32 | |
MSYSPKGS: msys-m4 msys-flex msys-coreutils msys-help2man msys-bison msys-patch | |
# GC4+: | |
#MSYSPKGS: msys-m4 msys-flex msys-coreutils msys-help2man | |
#MINGW_BISON_VERS: bison-3.6 # minimal for GC 4.x+ | |
MINGW_GMP_VERS: gmp-6.3.0 # always update for performance reasons | |
MINGW_BDB_VERS: db-6.0.19.NC | |
MINGW_PDCM_VERS: 4.4.0 | |
MINGW_CJSON_VERS: 1.7.18 | |
MINGW_XML2_VERS: 2.8.0 | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- debug | |
- release | |
steps: | |
#- name: Set git user | |
# run: | | |
# git config --global user.name github-actions | |
# git config --global user.email [email protected] | |
#- name: Checkout code | |
# uses: actions/checkout@v4 | |
- name: Get CI dist tarball | |
uses: actions/download-artifact@v4 | |
with: | |
name: gnucobol-ci source distribution | |
run-id: ${{ github.event.inputs.run_id }} | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
#- name: Display structure of downloaded files | |
# run: ls -R | |
- name: Build environment setup | |
run: | | |
bash -lc "tar -xvf gnucobol*.tar.* --strip-components=1" | |
mkdir _build | |
- name: Setup environment | |
shell: pwsh | |
run: | | |
echo GITHUB_WORKSPACE=$env:GITHUB_WORKSPACE >> $env:GITHUB_ENV | |
echo HOME=$env:GITHUB_WORKSPACE >> $env:GITHUB_ENV | |
echo PATH="$env:MSYS_BIN;$env:PATH" >> $env:GITHUB_ENV | |
If ("${{ matrix.target }}" -eq "release") { | |
echo DISTDIR=GnuCOBOL_mingw >> $env:GITHUB_ENV | |
echo CFGOPT= >> $env:GITHUB_ENV | |
} Else { | |
echo DISTDIR=GnuCOBOL_mingw_dbg >> $env:GITHUB_ENV | |
echo CFGOPT="--enable-debug --enable-cobc-internal-checks --enable-hardening" >> $env:GITHUB_ENV | |
} | |
- name: Restore MSYS1 cache | |
id: restore-msys | |
uses: actions/cache/restore@v4 | |
with: | |
key: cache-msys | |
path: ${{ env.MSYS_ROOT }} | |
- name: Install MSYS1 | |
if: steps.restore-msys.outputs.cache-hit != 'true' | |
run: | | |
curl -O https://www.arnoldtrembley.com/MinGW-bkup02.7z | |
7z x -y MinGW-bkup02.7z -o%MSYS_ROOT%\ | |
- name: Install MSYS1 packages | |
if: steps.restore-msys.outputs.cache-hit != 'true' | |
run: | | |
bash -lc "mingw-get install %MSYSPKGS%" | |
- name: Cleanup MSYS1 env | |
if: steps.restore-msys.outputs.cache-hit != 'true' | |
run: | | |
rmdir /Q /S %MSYS_ROOT%\docs | |
rmdir /Q /S %MSYS_ROOT%\var | |
del /Q %MSYS_ROOT%\bin\gdb.exe | |
- name: Save MSYS1 cache | |
if: steps.restore-msys.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
key: cache-msys | |
path: ${{ env.MSYS_ROOT }} | |
# - name: Restore Bison cache | |
# id: restore-bison | |
# uses: actions/cache/restore@v4 | |
# with: | |
# key: cache-msys-bison | |
# path: ${{ env.MINGW_BISON_VERS }} | |
# - name: Install Bison | |
# if: steps.restore-bison.outputs.cache-hit != 'true' | |
# run: | | |
# curl -L https://ftp.gnu.org/gnu/bison/%MINGW_BISON_VERS%.tar.gz -o %MINGW_BISON_VERS%.tar.gz | |
# tar -xvf %MINGW_BISON_VERS%.tar.gz | |
# bash -lc "cd %MINGW_BISON_VERS% && ./configure --prefix=/mingw && make" | |
# - name: Install Bison | |
# run: | | |
# bash -lc "make -C %MINGW_BISON_VERS% install" | |
# - name: Save Bison cache | |
# if: steps.restore-bison.outputs.cache-hit != 'true' | |
# uses: actions/cache/save@v4 | |
# with: | |
# key: cache-msys-bison | |
# path: ${{ env.MINGW_BISON_VERS }} | |
- name: Restore GMP cache | |
id: restore-gmp | |
uses: actions/cache/restore@v4 | |
with: | |
key: cache-msys-gmp | |
path: ${{ env.MINGW_GMP_VERS }} | |
- name: Build GMP | |
if: steps.restore-gmp.outputs.cache-hit != 'true' | |
run: | | |
rem note: MSYS1 cannot connect to https://gmplib.org, so using GNU mirror side instead | |
curl -L https://ftp.gnu.org/gnu/gmp/%MINGW_GMP_VERS%.tar.xz -o %MINGW_GMP_VERS%.tar.xz | |
tar -xvf %MINGW_GMP_VERS%.tar.xz | |
bash -lc "cd %MINGW_GMP_VERS% && ./configure --prefix=/mingw --enable-fat --enable-shared --disable-static CFLAGS=\"-Wno-attributes -Wno-ignored-attributes\" ABI=32 && make --jobs=$(($(nproc)+1))" | |
- name: Install GMP | |
run: | | |
bash -lc "make -C %MINGW_GMP_VERS% install" | |
- name: Save GMP cache | |
if: steps.restore-gmp.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
key: cache-msys-gmp | |
path: ${{ env.MINGW_GMP_VERS }} | |
- name: Restore BDB cache | |
id: restore-bdb | |
uses: actions/cache/restore@v4 | |
with: | |
key: cache-msys-bdb | |
path: ${{ env.MINGW_BDB_VERS }} | |
- name: Build BDB | |
if: steps.restore-bdb.outputs.cache-hit != 'true' | |
run: | | |
curl -L https://download.oracle.com/berkeley-db/%MINGW_BDB_VERS%.tar.gz -o %MINGW_BDB_VERS%.tar.gz | |
curl -L https://raw.githubusercontent.com/msys2/MINGW-packages/refs/heads/master/mingw-w64-db/0001-db-tls-m4-fix-pthread.patch -o db-tls-m4-fix-pthread.patch | |
curl -L https://raw.githubusercontent.com/msys2/MINGW-packages/refs/heads/master/mingw-w64-db/mingw.patch -o mingw.patch | |
curl -L https://raw.githubusercontent.com/msys2/MINGW-packages/refs/heads/master/mingw-w64-db/cclang_cxx_11.patch -o cx11.patch | |
tar -xvf %MINGW_BDB_VERS%.tar.gz | |
sed -i 's/_tcsclen/_mbslen/' %MINGW_BDB_VERS%\src\os_windows\os_stat.c | |
bash -lc "cd %MINGW_BDB_VERS% && patch -p1 -i ../db-tls-m4-fix-pthread.patch" | |
bash -lc "cd %MINGW_BDB_VERS% && patch -p1 -i ../mingw.patch" | |
bash -lc "cd %MINGW_BDB_VERS% && patch -p1 -i ../cx11.patch" | |
bash -lc "cd %MINGW_BDB_VERS%/build_unix && ../dist/configure --prefix=/mingw --enable-mingw --enable-debug --disable-static --disable-replication --disable-tcl --without-cryptography LIBCSO_LIBS=-lwsock32 && make --jobs=$(($(nproc)+1))" | |
- name: Install BDB | |
run: | | |
bash -lc "make -C %MINGW_BDB_VERS%/build_unix install" | |
- name: Save BDB cache | |
if: steps.restore-bdb.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
key: cache-msys-bdb | |
path: ${{ env.MINGW_BDB_VERS }} | |
- name: Restore PDCursesMod cache | |
id: restore-pdcm | |
uses: actions/cache/restore@v4 | |
with: | |
key: cache-msys-pdcm | |
path: PDCursesMod-${{ env.MINGW_PDCM_VERS }} | |
- name: Build PDCursesMod | |
if: steps.restore-pdcm.outputs.cache-hit != 'true' | |
run: | | |
curl -L https://github.com/Bill-Gray/PDCursesMod/archive/refs/tags/v%MINGW_PDCM_VERS%.tar.gz -o "PDCursesMod-%MINGW_PDCM_VERS%.tar.xz" | |
tar -xvf PDCursesMod-%MINGW_PDCM_VERS%.tar.xz | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && make -C wincon --jobs=$(($(nproc)+1)) INFOEX=N CHTYPE_64=Y DEBUG=Y DLL=Y DLLNAME=libpdcurses LIBNAME=libpdcurses.dll" | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && make -C wingui --jobs=$(($(nproc)+1)) CHTYPE_64=Y DEBUG=Y DLL=Y DLLNAME=libpdcurses LIBNAME=libpdcurses.dll" | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && make -C vt --jobs=$(($(nproc)+1)) CHTYPE_64=Y DEBUG=Y DLL=Y DLLNAME=libpdcurses LIBNAME=libpdcurses.dll CFLAGS=\"-Wall -Wextra -pedantic -g -DPDCDEBUG -fPIC -DPDC_DLLbuild\"" | |
echo #define CHTYPE_64 > PDCursesMod-%MINGW_PDCM_VERS%\pdcurses.h | |
echo #define PDC_DLLbuild >> PDCursesMod-%MINGW_PDCM_VERS%\pdcurses.h | |
echo #include "pdcurses/curses.h" >> PDCursesMod-%MINGW_PDCM_VERS%\pdcurses.h | |
- name: Install PDCursesMod | |
run: | | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install wincon/libpdcurses.dll.a /mingw/lib/" | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install wincon/libpdcurses.dll /mingw/bin/" | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install wincon/libpdcurses.dll /mingw/bin/libpdcurses-wincon.dll" | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install wingui/libpdcurses.dll /mingw/bin/libpdcurses-wingui.dll" | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install vt/libpdcurses.dll /mingw/bin/libpdcurses-vt.dll" | |
bash -lc "install -d /mingw/include/pdcurses" | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install -m 0644 curses.h panel.h term.h /mingw/include/pdcurses/" | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install -m 0644 pdcurses.h /mingw/include/" | |
- name: Save PDCursesMod cache | |
if: steps.restore-pdcm.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
key: cache-msys-pdcm | |
path: PDCursesMod-${{ env.MINGW_PDCM_VERS }} | |
- name: Restore LibXML2 cache | |
id: restore-xml2 | |
uses: actions/cache/restore@v4 | |
with: | |
key: cache-msys-xml2 | |
path: libxml2-${{ env.MINGW_XML2_VERS }} | |
- name: Build LibXML2 | |
if: steps.restore-xml2.outputs.cache-hit != 'true' | |
run: | | |
curl -L https://github.com/GNOME/libxml2/archive/refs/tags/v%MINGW_XML2_VERS%.tar.gz -o libxml2-%MINGW_XML2_VERS%.tar.xz | |
tar -xvf libxml2-%MINGW_XML2_VERS%.tar.xz | |
bash -lc "cd libxml2-%MINGW_XML2_VERS% && ./autogen.sh" | |
bash -lc "cd libxml2-%MINGW_XML2_VERS% && ./configure --prefix=/mingw --enable-debug && make --jobs=$(($(nproc)+1))" | |
- name: Install LibXML2 | |
run: | | |
bash -lc "make -C libxml2-%MINGW_XML2_VERS% install" | |
- name: Save LibXML2 cache | |
if: steps.restore-xml2.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
key: cache-msys-xml2 | |
path: libxml2-${{ env.MINGW_XML2_VERS }} | |
- name: get cJSON | |
run: | | |
curl -L https://raw.githubusercontent.com/DaveGamble/cJSON/v%MINGW_CJSON_VERS%/cJSON.c -o .\libcob\cJSON.c | |
curl -L https://raw.githubusercontent.com/DaveGamble/cJSON/v%MINGW_CJSON_VERS%/cJSON.h -o .\libcob\cJSON.h | |
# - name: Bootstrap GnuCOBOL | |
# run: | | |
# sed -i 's/AM_PROG_AR/m4_ifdef\(\[AM_PROG_AR\], \[AM_PROG_AR\]\)/g' .\configure.ac | |
# sed -i 's/po extras doc tests/po extras tests/g' .\Makefile.am | |
# bash -lc "./autogen.sh" | |
- name: Configure GnuCOBOL | |
run: | | |
bash -lc "cd _build && ../configure %CFGOPT% --with-db --with-xml2 --with-json=local --with-curses=pdcurses --prefix=/mingw" | |
rem Note: GC4 may need CPPFLAGS="-I../libcob" for local cJSON | |
- name: Build GnuCOBOL | |
run: | | |
bash -lc "CPATH=$(pwd) make -C _build --jobs=$(($(nproc)+1))" | |
rem Note: the extra CPATH above is only required in debug builds (otherwise gcc invoked from cobc does not find libcob.h [pre-inst-env]), for some reason... | |
- name: Upload config-${{ matrix.target }}.log | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: config-${{ matrix.target }}.log | |
path: _build/config.log | |
- name: Run testsuite | |
run: | | |
rem skip test as it sometimes works and sometimes not... | |
rem instead of | |
rem sed -i '/AT_SETUP(\[temporary path invalid\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/used_binaries.at | |
rem use | |
sed -i '/used_binaries/{N;/temporary path invalid/{N;N;N;N;s/traceon/traceon; at_fn_check_skip 77 workflow:1/;}}' tests/testsuite | |
rem change to expected fail if there's an error specific to the CI that we don't want to change | |
rem in the testsuite for expected result (should normally only be a temporary thing) | |
rem instead of | |
rem sed -i '/AT_SETUP(\[Compare FLOAT-LONG with floating-point literal\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_fundamental.at | |
rem use | |
rem sed -i '/run_fundamental/{N;/Compare FLOAT-LONG with floating-point literal/{N;s/at_xfail=no/at_xfail=yes/;}}' tests/testsuite | |
bash -lc "CPATH=$(pwd) make -C _build/tests check TESTSUITEFLAGS=\"--jobs=$(($(nproc)+1))\"" | |
rem Note: the extra CPATH above is only required in debug builds (otherwise gcc invoked from cobc does not find libcob.h [atlocal]), for some reason... | |
- name: Upload testsuite-${{ matrix.target }}.log | |
if: ${{ ! cancelled() }} #-> always upload as build result documentation | |
uses: actions/upload-artifact@v4 | |
with: | |
name: testsuite-${{ matrix.target }}.log | |
path: _build/tests/testsuite.log | |
- name: Cache newcob.val | |
uses: actions/cache@v4 | |
with: | |
path: _build/tests/cobol85/newcob.val | |
key: newcob-val | |
save-always: true | |
enableCrossOsArchive: true | |
- name: Run NIST85 testsuite | |
# if we ever need to disable something in the tests: skip like here IF106A | |
# and later expect a failure | |
# perl -pi -e 's/^# OBNC1M/\$skip{IF106A} = 1; # OBNC1M/' tests/cobol85/report.pl | |
# bash -lc "CPATH=$(pwd) make -C _build/tests test --jobs=$(($(nproc)+1)) || echo \"WARNING: NIST85 did not pass!\"" | |
run: | | |
bash -lc "CPATH=$(pwd) make -C _build/tests test --jobs=$(($(nproc)+1))" | |
rem Note: the extra CPATH above is only required in debug builds (otherwise gcc invoked from cobc does not find libcob.h [atlocal]), for some reason... | |
- name: Upload NIST85 Test Suite results | |
if: ${{ ! cancelled() }} #-> always upload as build result documentation | |
uses: actions/upload-artifact@v4 | |
with: | |
name: NIST85 results on ${{ matrix.target }} | |
path: | | |
_build/tests/cobol85/summary.* | |
_build/tests/cobol85/**/*.log | |
_build/tests/cobol85/**/*.out | |
_build/tests/cobol85/**/duration.txt | |
- name: Package GnuCOBOL | |
run: | | |
bash -lc "make -C _build distmingw" | |
- name: Upload GnuCOBOL_mingw-${{ matrix.target }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: GnuCOBOL_mingw-${{ matrix.target }} | |
path: _build/${{ env.DISTDIR }} |