Skip to content

Updated golang to 1.25.0 #11

Updated golang to 1.25.0

Updated golang to 1.25.0 #11

Workflow file for this run

name: PR Validation
on:
pull_request:
branches: [ main ]
jobs:
test:
name: Run Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.24'
- name: Install dependencies
run: go mod download
- name: Run tests
run: |
echo "Running Go tests..."
go test -v -json ./... > test-results.json
- name: Report test results
uses: dorny/test-reporter@v2
if: always()
with:
name: Go Tests
path: test-results.json
reporter: golang-json
fail-on-error: true
build-image:
name: Build Docker Image
runs-on: ubuntu-latest
needs: test
if: needs.test.result == 'success'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and cache Docker image
uses: docker/build-push-action@v5
with:
context: .
push: false
tags: stream-webpage:test-${{ github.run_id }}
outputs: type=docker,dest=/tmp/stream-webpage-${{ github.run_id }}.tar
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Upload Docker image artifact
uses: actions/upload-artifact@v4
with:
name: docker-image-${{ github.run_id }}
path: /tmp/stream-webpage-${{ github.run_id }}.tar
retention-days: 1
integration-test:
name: Integration Test (${{ matrix.resolution }})
runs-on: ubuntu-latest
needs: [test, build-image]
if: needs.test.result == 'success' && needs.build-image.result == 'success'
strategy:
matrix:
resolution: [720p, 1080p, 2k]
include:
- resolution: 720p
expected_height: 720
expected_width: 1280
- resolution: 1080p
expected_height: 1080
expected_width: 1920
- resolution: 2k
expected_height: 1440
expected_width: 2560
services:
rtmp-server:
image: tiangolo/nginx-rtmp
ports:
- 1935:1935
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download Docker image artifact
uses: actions/download-artifact@v4
with:
name: docker-image-${{ github.run_id }}
path: /tmp
- name: Load Docker image
run: docker load -i /tmp/stream-webpage-${{ github.run_id }}.tar
- name: Install ffmpeg
run: |
echo "Installing FFmpeg..."
sudo apt-get update
sudo apt-get install -y ffmpeg
- name: Start stream-webpage container
run: |
docker run -d \
--name stream-webpage \
--network host \
-e FRAMERATE=30 \
-e LOG_FORMAT=json \
-e LOG_LEVEL=debug \
-e PORT=8080 \
-e RESOLUTION=${{ matrix.resolution }} \
-e RTMP_URL=rtmp://localhost:1935/live/stream \
-e WEBPAGE_URL="https://www.youtube.com/embed/xuCn8ux2gbs?autoplay=1&loop=1&playlist=xuCn8ux2gbs" \
stream-webpage:test-${{ github.run_id }}
- name: Wait for services to start
run: |
echo "Waiting for services to start..."
sleep 120
- name: Test Stream Container Health Endpoint
run: |
echo "Testing stream container health endpoint..."
response=$(curl -s -w "%{http_code}" http://localhost:8080/health)
http_code="${response: -3}"
response_body="${response%???}"
echo "HTTP Status: $http_code"
echo "Response: $response_body"
if [[ "$http_code" != "200" ]]; then
echo "Health check failed with HTTP status: $http_code"
exit 1
else
echo "Health check passed"
fi
- name: Test RTMP stream
run: |
echo "Testing RTMP stream..."
# Test if RTMP server is accessible and stream is available
timeout 30 bash -c '
while ! nc -z localhost 1935; do
echo "Waiting for RTMP server..."
sleep 2
done
echo "RTMP server is ready"
'
# Use ffprobe to check stream properties
echo "Checking stream properties with ffprobe..."
timeout 30 "ffprobe" -v quiet -print_format json -show_streams rtmp://localhost:1935/live/stream > stream_info.json 2>/dev/null || {
echo "Stream not available yet, checking container logs..."
docker logs stream-webpage
exit 1
}
# Check if stream matches expected resolution
height=$(cat stream_info.json | jq -r '.streams[] | select(.codec_type == "video") | .height // empty')
width=$(cat stream_info.json | jq -r '.streams[] | select(.codec_type == "video") | .width // empty')
echo "Stream resolution: ${width}x${height}"
echo "Expected resolution: ${{ matrix.expected_width }}x${{ matrix.expected_height }}"
if [ "$height" = "${{ matrix.expected_height }}" ] && [ "$width" = "${{ matrix.expected_width }}" ]; then
echo "✅ Stream is ${{ matrix.resolution }} as expected"
else
echo "❌ Stream is not ${{ matrix.resolution }}. Expected ${{ matrix.expected_width }}x${{ matrix.expected_height }}, got ${width}x${height}"
cat stream_info.json | jq '.'
docker logs stream-webpage
exit 1
fi
echo "✅ Integration test completed successfully"
- name: Cleanup
if: always()
run: |
echo "Stopping stream-webpage container..."
docker stop stream-webpage || true
docker rm stream-webpage || true