allow building ssh3-server on other unix platform #59
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: Go | |
on: | |
pull_request: | |
paths-ignore: | |
- '**/README.md' | |
jobs: | |
build-linux: | |
strategy: | |
matrix: | |
go-version: [ '1.20.x', '1.21.x' ] | |
goos: [linux] | |
testuser: [ssh3-testuser] | |
testpasswd: [ssh3-testpasswd] | |
testuserhome: [/home/ssh3-testuser] | |
archparams: [{goarch: amd64, cc: gcc}] #,{goarch: arm64, cc: aarch64-linux-gnu-gcc}] | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
# Right now, compilation for linux-arm64 is disable as it is a pain. | |
# ARM actions might come soon on GitHub anyway | |
# - name: Add ARM repos to sources.list | |
# run: | | |
# echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy main multiverse universe" | sudo tee -a /etc/apt/sources.list | |
# echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-security main multiverse universe" | sudo tee -a /etc/apt/sources.list | |
# echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-backports main multiverse universe" | sudo tee -a /etc/apt/sources.list | |
# echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates main multiverse universe" | sudo tee -a /etc/apt/sources.list | |
# - name: Add ARM architecture and update | |
# run: sudo dpkg --add-architecture arm64 && sudo apt-get -y update || true | |
# - name: Install toolchain for compiling ARM | |
# run: sudo apt-get -y install gcc-aarch64-linux-gnu | |
# - name: Install lcrypt for arm64 | |
# run: sudo apt-get -y install libc6:arm64 libcrypt-dev:arm64 | |
- name: Setup Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '${{matrix.go-version}}' | |
- name: Install dependencies to generate ssh keys and certificates | |
run: sudo apt -y update && sudo apt -y install openssh-client openssl | |
- name: Generate server cert | |
run: pushd / && sudo sh ${{ github.workspace }}/generate_openssl_selfsigned_certificate.sh && popd | |
- name: Generate testuser's SSH key | |
run: sudo ssh-keygen -b 4096 -t rsa -f /testuser_id_rsa -q -N "" | |
- name: Generate testuser's ed25519 SSH key | |
run: sudo ssh-keygen -t ed25519 -f /testuser_id_ed25519 -q -N "" | |
- name: Generate attacker's SSH key | |
run: sudo ssh-keygen -b 4096 -t rsa -f /attacker_id_rsa -q -N "" | |
- name: Install Go dependencies | |
run: go get ./... | |
- name: Build Client | |
run: env CC=${{matrix.archparams.cc}} CGO_ENABLED=1 GOOS=${{matrix.goos}} GOARCH=${{matrix.archparams.goarch}} go build -v cli/client/main.go | |
- name: Build Server | |
run: env CC=${{matrix.archparams.cc}} CGO_ENABLED=1 GOOS=${{matrix.goos}} GOARCH=${{matrix.archparams.goarch}} go build -v cli/server/main.go | |
- name: Add test user | |
run: sudo useradd -m ${{matrix.testuser}} && echo "${{matrix.testuser}}:${{matrix.testpasswd}}" | sudo chpasswd | |
- name: Create .ssh3 directory | |
run: sudo su ${{matrix.testuser}} -c 'mkdir ${{matrix.testuserhome}}/.ssh ${{matrix.testuserhome}}/.ssh3' | |
- name: Put test public keys in testuser's authorized_identities | |
run: cat /testuser_id_rsa.pub /testuser_id_ed25519.pub | sudo tee -a ${{matrix.testuserhome}}/.ssh3/authorized_identities | |
- name: Classical unit tests | |
run: env CC=${{matrix.archparams.cc}} CGO_ENABLED=1 GOOS=${{matrix.goos}} GOARCH=${{matrix.archparams.goarch}} go run github.com/onsi/ginkgo/v2/ginkgo -r | |
- name: Integration tests | |
run: sudo env CERT_PEM=/cert.pem CERT_PRIV_KEY=/priv.key ATTACKER_PRIVKEY=/attacker_id_rsa TESTUSER_PRIVKEY=/testuser_id_rsa TESTUSER_ED25519_PRIVKEY=/testuser_id_ed25519 TESTUSER_USERNAME=${{matrix.testuser}} CC=${{matrix.archparams.cc}} CGO_ENABLED=1 GOOS=${{matrix.goos}} GOARCH=${{matrix.archparams.goarch}} SSH3_INTEGRATION_TESTS_WITH_SERVER_ENABLED=1 go run github.com/onsi/ginkgo/v2/ginkgo ./integration_tests | |
build-macos: | |
strategy: | |
matrix: | |
go-version: [ '1.20.x', '1.21.x' ] | |
goos: [darwin] | |
goarch: [amd64,arm64] | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '${{matrix.go-version}}' | |
- name: Install dependencies | |
run: go get ./... | |
# No Build Server on MacOS right now as the server currently does no build on MacOS | |
- name: Build Client | |
run: env GOOS=${{matrix.goos}} GOARCH=${{matrix.goarch}} go build -v cli/client/main.go | |
- name: Build Server | |
run: env GOOS=${{matrix.goos}} GOARCH=${{matrix.goarch}} go build -v cli/server/main.go | |
- name: Classical unit tests | |
if: ${{ matrix.goarch == 'amd64' }} # only actually run the test suite with the architecture of the host | |
run: env CGO_ENABLED=1 GOOS=${{matrix.goos}} GOARCH=${{matrix.goarch}} go run github.com/onsi/ginkgo/v2/ginkgo | |
build-other-unix: | |
strategy: | |
matrix: | |
go-version: [ '1.20.x', '1.21.x' ] | |
goos: [openbsd,freebsd,linux] | |
goarch: [amd64,"386",arm64,arm] | |
exclude: | |
- goos: linux | |
goarch: amd64 | |
- goos: linux | |
goarch: arm64 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '${{matrix.go-version}}' | |
- name: Install dependencies | |
run: go get ./... | |
# No Build Server on MacOS right now as the server currently does no build on MacOS | |
- name: Build Client | |
run: env GOOS=${{matrix.goos}} GOARCH=${{matrix.goarch}} go build -v cli/client/main.go | |
- name: Build Server | |
run: env GOOS=${{matrix.goos}} GOARCH=${{matrix.goarch}} go build -v cli/server/main.go |