summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x.github/configs65
-rwxr-xr-x.github/configure.sh6
-rwxr-xr-x.github/run_test.sh23
-rwxr-xr-x.github/setup_ci.sh2
-rw-r--r--.github/workflows/c-cpp.yml4
-rw-r--r--.github/workflows/selfhosted.yml67
6 files changed, 153 insertions, 14 deletions
diff --git a/.github/configs b/.github/configs
new file mode 100755
index 00000000..1cf80027
--- /dev/null
+++ b/.github/configs
@@ -0,0 +1,65 @@
+#!/bin/sh
+#
+# usage: configs vmname test_config (or '' for default)
+#
+# Sets the following variables:
+# CONFIGFLAGS options to ./configure
+# SSHD_CONFOPTS sshd_config options
+# TEST_TARGET make target used when testing. defaults to "tests".
+# LTESTS
+
+config=$1
+
+TEST_TARGET="tests"
+LTESTS=""
+SUDO=sudo # run with sudo by default
+TEST_SSH_UNSAFE_PERMISSIONS=1
+
+CONFIGFLAGS=""
+LIBCRYPTOFLAGS=""
+
+case "$config" in
+ default|sol64)
+ ;;
+ *pam)
+ CONFIGFLAGS="--with-pam"
+ SSHD_CONFOPTS="UsePam yes"
+ ;;
+ without-openssl)
+ LIBCRYPTOFLAGS="--without-openssl"
+ TEST_TARGET=t-exec
+ ;;
+ *)
+ echo "Unknown configuration $config"
+ exit 1
+ ;;
+esac
+
+# The Solaris 64bit targets are special since they need a non-flag arg.
+case "$config" in
+ sol64*)
+ CONFIGFLAGS="x86_64 --with-cflags=-m64 --with-ldflags=-m64 ${CONFIGFLAGS}"
+ LIBCRYPTOFLAGS="--with-ssl-dir=/usr/local/ssl64"
+ ;;
+esac
+
+case "${TARGET_HOST}" in
+ sol10)
+ # This VM is 32bit and the unit tests are slow.
+ TEST_TARGET="tests SKIP_UNIT=1"
+ ;;
+esac
+
+# If we have a local openssl/libressl, use that.
+if [ -z "${LIBCRYPTOFLAGS}" ]; then
+ # last-match
+ for i in /usr/local /usr/local/ssl; do
+ if [ -x ${i}/bin/openssl ]; then
+ LIBCRYPTOFLAGS="--with-ssl-dir=${i}"
+ fi
+ done
+fi
+
+CONFIGFLAGS="${CONFIGFLAGS} ${LIBCRYPTOFLAGS}"
+
+export LTESTS SUDO TEST_TARGET TEST_SSH_UNSAFE_PERMISSIONS
diff --git a/.github/configure.sh b/.github/configure.sh
new file mode 100755
index 00000000..869dc824
--- /dev/null
+++ b/.github/configure.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+. .github/configs $1 $2
+
+set -x
+./configure ${CONFIGFLAGS}
diff --git a/.github/run_test.sh b/.github/run_test.sh
index 5a0e6538..c2173020 100755
--- a/.github/run_test.sh
+++ b/.github/run_test.sh
@@ -1,23 +1,11 @@
#!/usr/bin/env bash
-TARGETS=$@
-
-TEST_TARGET="tests"
-LTESTS="" # all tests by default
+. .github/configs $1 $2
[ -z "${SUDO}" ] || ${SUDO} mkdir -p /var/empty
set -ex
-for TARGET in $TARGETS; do
- case $TARGET in
- --without-openssl)
- # When built without OpenSSL we can't do the file-based RSA key tests.
- TEST_TARGET=t-exec
- ;;
- esac
-done
-
if [ -z "$LTESTS" ]; then
make $TEST_TARGET
result=$?
@@ -26,6 +14,15 @@ else
result=$?
fi
+if [ ! -z ${SSHD_CONFOPTS} ]; then
+ echo "rerunning tests with TEST_SSH_SSHD_CONFOPTS='${SSHD_CONFOPTS}'"
+ make t-exec TEST_SSH_SSHD_CONFOPTS="${SSHD_CONFOPTS}"
+ result2=$?
+ if [ "${result2}" -ne 0 ]; then
+ result="${result2}"
+ fi
+fi
+
if [ "$result" -ne "0" ]; then
for i in regress/failed*; do
echo -------------------------------------------------------------------------
diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh
index 67a76a5d..187a4fad 100755
--- a/.github/setup_ci.sh
+++ b/.github/setup_ci.sh
@@ -20,7 +20,7 @@ lsb_release -a
for TARGET in $TARGETS; do
case $TARGET in
- ""|--without-openssl|--without-zlib|--with-Werror|--with-rpath*)
+ ""|--without-openssl|--without-zlib|--with-Werror|--with-rpath*|--with-ssl-dir=*|--with-zlib=*)
# nothing to do
;;
"--with-kerberos5")
diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml
index e546a9c5..7d02bc31 100644
--- a/.github/workflows/c-cpp.yml
+++ b/.github/workflows/c-cpp.yml
@@ -8,6 +8,7 @@ on:
jobs:
ubuntu-20_04:
+ if: github.repository != 'openssh/openssh-portable-selfhosted'
runs-on: ubuntu-20.04
strategy:
matrix:
@@ -37,6 +38,7 @@ jobs:
ubuntu-18_04:
+ if: github.repository != 'openssh/openssh-portable-selfhosted'
runs-on: ubuntu-18.04
strategy:
matrix:
@@ -69,6 +71,7 @@ jobs:
ubuntu-16_04:
+ if: github.repository != 'openssh/openssh-portable-selfhosted'
runs-on: ubuntu-16.04
strategy:
matrix:
@@ -95,6 +98,7 @@ jobs:
macos:
+ if: github.repository != 'openssh/openssh-portable-selfhosted'
strategy:
matrix:
os: [ macos-10.15, macos-11.0 ]
diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml
new file mode 100644
index 00000000..835bfb32
--- /dev/null
+++ b/.github/workflows/selfhosted.yml
@@ -0,0 +1,67 @@
+name: C/C++ CI self-hosted
+
+on:
+ push:
+ branches: [ master, ci ]
+
+jobs:
+ selfhosted:
+ runs-on: ${{ matrix.vm }}
+ env:
+ TARGET_HOST: ${{ matrix.vm }}
+ SUDO: sudo
+ strategy:
+ fail-fast: false
+ # We use a matrix in two parts: firstly all of the VMs are tested with the
+ # default config. "vm" corresponds to a label associated with the worker.
+ matrix:
+ vm: [dfly30, dfly48, dfly58, sol10, sol11]
+ configs:
+ - default
+ # Then we include any extra configs we want to test for specific VMs.
+ include:
+ - vm: dfly30
+ configs: without-openssl
+ - vm: dfly48
+ configs: pam
+ - vm: dfly58
+ configs: pam
+ - vm: sol10
+ configs: pam
+ - vm: sol11
+ configs: pam
+ - vm: sol11
+ configs: sol64
+ - vm: sol11
+ configs: sol64-pam
+ steps:
+ - uses: actions/checkout@v2
+ - name: autoreconf
+ run: autoreconf
+ - name: shutdown VM if running
+ run: vmshutdown
+ - name: startup VM
+ run: vmstartup
+ - name: configure
+ run: vmrun ./.github/configure.sh ${{ matrix.configs }}
+ - name: save config files
+ if: always()
+ uses: actions/upload-artifact@v2
+ with:
+ name: ${{ matrix.vm }}-${{ matrix.configs }}-config-files
+ path: |
+ config.h
+ config.log
+ - name: make
+ run: vmrun make
+ - name: make tests
+ run: vmrun ./.github/run_test.sh ${{ matrix.configs }}
+ - name: save regress logs
+ if: failure()
+ uses: actions/upload-artifact@v2
+ with:
+ name: ${{ matrix.vm }}-${{ matrix.configs }}-regress-logs
+ path: regress/*.log
+ - name: shutdown VM
+ if: always()
+ run: vmshutdown