62 lines
1.8 KiB
YAML
62 lines
1.8 KiB
YAML
name: Build, Test and Push Docker Image
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
|
|
jobs:
|
|
e2e-test:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Build Docker image
|
|
run: docker build -t ssh-server-test .
|
|
|
|
- name: Run SSH server
|
|
run: |
|
|
docker network create test-net || true
|
|
docker rm -f ssh-server-test || true
|
|
docker run -d --network test-net --name ssh-server-test -e COMMAND="/bin/sh" ssh-server-test
|
|
sleep 2
|
|
if ! docker ps | grep -q ssh-server-test; then
|
|
echo "Container failed to start"
|
|
docker logs ssh-server-test
|
|
exit 1
|
|
fi
|
|
|
|
- name: Test SSH connection
|
|
run: |
|
|
output=$(docker run --rm --network test-net alpine sh -c "apk add --no-cache openssh-client >/dev/null 2>&1 && ssh -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10 root@ssh-server-test 'echo test559920' 2>/dev/null")
|
|
if echo "$output" | grep -q "test559920"; then
|
|
echo "SSH connection test passed"
|
|
else
|
|
echo "SSH connection test failed: $output"
|
|
exit 1
|
|
fi
|
|
docker stop ssh-server-test && docker rm ssh-server-test && docker network rm test-net
|
|
|
|
build-and-push:
|
|
runs-on: ubuntu-latest
|
|
needs: e2e-test
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Log in to Docker Hub
|
|
uses: docker/login-action@v2
|
|
with:
|
|
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
|
password: ${{ secrets.DOCKER_HUB_TOKEN }}
|
|
|
|
- name: Build and push Docker image
|
|
uses: docker/build-push-action@v4
|
|
with:
|
|
context: .
|
|
push: true
|
|
tags: dcorral3/go-ssh-server-command:latest
|