name: wolfSSH SCP Test on: push: branches: [ '*' ] pull_request: branches: [ '*' ] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: create_matrix: runs-on: ubuntu-latest outputs: versions: ${{ steps.json.outputs.versions }} steps: - name: Create wolfSSL version matrix id: json run: | current=`curl -s https://api.github.com/repos/wolfssl/wolfssl/releases | grep tag_name | cut -d : -f 2,3 | tr -d \" | tr -d , | tr -d ' ' | head -1` last=`curl -s https://api.github.com/repos/wolfssl/wolfssl/releases | grep tag_name | cut -d : -f 2,3 | tr -d \" | tr -d , | tr -d ' ' | head -2 | tail -1` VERSIONS=$(echo "[ \"master\", \"$current\", \"$last\" ]") echo "wolfSSL versions found: $VERSIONS" echo "versions=$VERSIONS" >> $GITHUB_OUTPUT build_wolfssl: needs: create_matrix strategy: fail-fast: false matrix: os: [ ubuntu-latest ] wolfssl: ${{ fromJson(needs.create_matrix.outputs['versions']) }} name: Build wolfssl runs-on: ${{ matrix.os }} timeout-minutes: 4 steps: - name: Checking cache for wolfssl uses: actions/cache@v4 id: cache-wolfssl with: path: build-dir/ key: wolfssh-sshd-wolfssl-${{ matrix.wolfssl }}-${{ matrix.os }} lookup-only: true - name: Checkout, build, and install wolfssl if: steps.cache-wolfssl.outputs.cache-hit != 'true' uses: wolfSSL/actions-build-autotools-project@v1 with: repository: wolfssl/wolfssl ref: ${{ matrix.wolfssl }} path: wolfssl configure: --enable-all check: false install: true build_wolfssh: needs: - build_wolfssl - create_matrix strategy: fail-fast: false matrix: os: [ ubuntu-latest ] wolfssl: ${{ fromJson(needs.create_matrix.outputs['versions']) }} name: Build and test wolfsshd runs-on: ${{ matrix.os }} timeout-minutes: 10 steps: - name: Checking cache for wolfssl uses: actions/cache@v4 with: path: build-dir/ key: wolfssh-sshd-wolfssl-${{ matrix.wolfssl }}-${{ matrix.os }} fail-on-cache-miss: true - uses: actions/checkout@v4 with: path: wolfssh/ - name: autogen working-directory: ./wolfssh/ run: ./autogen.sh - name: configure working-directory: ./wolfssh/ run : | ./configure --enable-all LDFLAGS="-L${{ github.workspace }}/build-dir/lib" CPPFLAGS="-I${{ github.workspace }}/build-dir/include -DWOLFSSH_NO_FPKI -DWOLFSSH_NO_SFTP_TIMEOUT -DMAX_PATH_SZ=120" - name: make working-directory: ./wolfssh/ run: make - name: Setup test user run: sudo useradd -p password jak # This is a regression test for a reported hang with SCP file transfer. # Verifying the error from a bad directory is propogated back, and # that the direcotry/file is not created. To account for potential # hanging of the operation, the timeout is set to 1 minute. - name: Run SCP example test timeout-minutes: 1 working-directory: ./wolfssh/ run: | mkdir /tmp/wolfssh echo "test file" > /tmp/wolfssh/test.txt ./examples/scpclient/wolfscp -p 22 -u jak -P password -H 127.0.0.1 -L /tmp/wolfssh/test.txt:/tmp/non_existent_folder/ || true # check that the directory and file do not exist [ ! -d /tmp/non_existent_folder ] [ ! -f /tmp/non_existent_folder/test.txt ]