Update to 2.11.0 #48
Workflow file for this run
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: Ant Media Server Development Test | |
on: | |
pull_request: | |
paths-ignore: | |
- '**/README.md' | |
- '**/.github/**' | |
- '**/package.sh' | |
check_suite: | |
types: | |
- requested | |
workflow_dispatch: | |
permissions: | |
contents: write | |
pull-requests: write | |
repository-projects: write | |
env: | |
GITHUB_TOKEN: ${{ secrets.G_TOKEN }} | |
REPO: ${{ github.repository }} | |
OWNER: ${{ github.repository_owner }} | |
OS_USERNAME: ${{ secrets.OS_USERNAME }} | |
OS_PASSWORD: ${{ secrets.OS_PASSWORD }} | |
OS_PROJECT_NAME: ${{ secrets.OS_PROJECT_NAME }} | |
OS_AUTH_URL: ${{ secrets.OS_AUTH_URL }} | |
OS_REGION_NAME: ${{ secrets.OS_REGION_NAME }} | |
OS_TENANT_ID: ${{ secrets.OS_TENANT_ID }} | |
OS_TENANT_NAME: ${{ secrets.OS_TENANT_NAME }} | |
OS_API_VERSION: ${{ secrets.OS_API_VERSION }} | |
OS_USER_DOMAIN_NAME: ${{ secrets.OS_USER_DOMAIN_NAME }} | |
INSTANCE_TYPE: "c3-4" | |
IMAGE_ID: "Ubuntu 24.04" | |
jobs: | |
setup-runner: | |
runs-on: ubuntu-latest | |
outputs: | |
server_id: ${{ steps.set-server-id.outputs.server_id }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Install Dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y python3-pip python3-dev libffi-dev libssl-dev | |
sudo pip3 install python-openstackclient | |
- name: server-id | |
id: set-server-id | |
run: | | |
REPO=$(echo "$REPO" | cut -d'/' -f2) | |
BRANCH_NAME="${{ github.head_ref }}" | |
SERVER_ID="ci-$REPO-$BRANCH_NAME" | |
echo $SERVER_ID | |
echo "server_id=$SERVER_ID" >> $GITHUB_OUTPUT | |
- name: Configure OpenStack CLI and Create Instance | |
run: | | |
echo "Setting up OpenStack CLI environment variables..." | |
echo "GITHUB_TOKEN=${GITHUB_TOKEN}" >> $GITHUB_ENV | |
sed -i "s/^GITHUB_TOKEN=.*$/GITHUB_TOKEN=${GITHUB_TOKEN}/" user_data.sh | |
sed -i "s|RUNNER_ORG=\"[^\"]*\"|RUNNER_ORG=\"$REPO\"|g" user_data.sh | |
SERVER_ID="${{ steps.set-server-id.outputs.server_id }}" | |
echo $SERVER_ID | |
openstack server create --flavor "$INSTANCE_TYPE" --image "$IMAGE_ID" --key-name ovh --security-group default --user-data user_data.sh --network Ext-Net $SERVER_ID | |
echo "Server creation initiated." | |
STATUS=$(openstack server show $SERVER_ID -f value -c status) | |
echo "Current server status: $STATUS" | |
while [[ "$STATUS" != "ACTIVE" && "$STATUS" != "ERROR" ]]; do | |
echo "Waiting for server to be ACTIVE. Current status: $STATUS" | |
sleep 10 | |
STATUS=$(openstack server show $SERVER_ID -f value -c status) | |
done | |
if [[ "$STATUS" == "ERROR" ]]; then | |
echo "Server creation failed." | |
exit 1 | |
fi | |
- name: Check runner status and wait if offline | |
id: check_status | |
run: | | |
MAX_WAIT=300 | |
WAIT_INTERVAL=10 | |
ELAPSED_TIME=0 | |
RUNNER_STATUS=$(curl -s -L \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "Authorization: Bearer $GITHUB_TOKEN" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
https://api.github.com/repos/$REPO/actions/runners | jq -r '.runners[0].status') | |
echo "Initial Runner status is: $RUNNER_STATUS" | |
while [[ "$RUNNER_STATUS" != "online" && "$ELAPSED_TIME" -lt "$MAX_WAIT" ]]; do | |
echo "Runner is $RUNNER_STATUS. Waiting for $WAIT_INTERVAL seconds..." | |
sleep $WAIT_INTERVAL | |
ELAPSED_TIME=$((ELAPSED_TIME + WAIT_INTERVAL)) | |
RUNNER_STATUS=$(curl -s -L \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "Authorization: Bearer $GITHUB_TOKEN" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
https://api.github.com/repos/$REPO/actions/runners | jq -r '.runners[0].status') | |
echo "Runner status is: $RUNNER_STATUS" | |
done | |
echo "::set-output name=runner_status::$RUNNER_STATUS" | |
- name: Cancel workflow if runner is still offline | |
if: steps.check_status.outputs.runner_status == 'offline' | |
run: | | |
exit 1 | |
docker-build-and-push: | |
runs-on: ubuntu-latest | |
outputs: | |
image_name: ${{ steps.set-image-name.outputs.image_name }} | |
env: | |
DOCKER_URL: antmedia/development | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Download latest.zip | |
run: wget --quiet ${{ secrets.LATEST_URL }} | |
- name: Download Dockerfile | |
run: wget --quiet https://raw.githubusercontent.com/ant-media/Scripts/master/docker/Dockerfile_Process -O Dockerfile | |
- name: Read version from VERSION file | |
id: read-version | |
run: echo "::set-output name=version::$(cat VERSION)" | |
- name: Set Development image name | |
id: set-image-name | |
run: | | |
echo "IMAGE_NAME=${{ env.DOCKER_URL }}" >> $GITHUB_ENV | |
echo "image_name=${{ env.DOCKER_URL }}" >> $GITHUB_OUTPUT | |
- name: Build Docker image | |
run: docker build --network=host -t antmediaserver:${{ steps.read-version.outputs.version }} --build-arg AntMediaServer=latest.zip . | |
- name: Tag Docker image | |
run: | | |
docker tag $(docker images --format "{{.ID}}" --filter "reference=antmediaserver:${{ steps.read-version.outputs.version }}") ${{ env.IMAGE_NAME }}:${{ steps.read-version.outputs.version }} | |
docker tag $(docker images --format "{{.ID}}" --filter "reference=antmediaserver:${{ steps.read-version.outputs.version }}") ${{ env.IMAGE_NAME }}:latest | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v1 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Push Docker image | |
run: | | |
docker push ${{ env.IMAGE_NAME }}:${{ steps.read-version.outputs.version }} | |
docker push ${{ env.IMAGE_NAME }}:latest | |
prepare-and-push: | |
needs: setup-runner | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.pull_request.head.ref }} | |
- name: Run the build package | |
run: bash package.sh | |
shell: bash | |
- name: Get version | |
id: version | |
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT | |
- name: Get commit message | |
id: commit_message | |
run: | | |
commit_message=$(git log --format=%B -n 1 ${{ github.event.pull_request.head.sha }}) | |
echo "::set-output name=commit_message::$commit_message" | |
- name: Commit files | |
run: | | |
git config --global user.name ${{ github.actor }} | |
git config --global user.email "[email protected]" | |
git add * | |
git commit -m "${{ steps.commit_message.outputs.commit_message || 'Auto-commit changes' }}" | |
- name: Push changes | |
run: | | |
git remote set-url origin https://github.com/ant-media/helm.git | |
git config --global user.name ${{ github.actor }} | |
git config --global user.email "[email protected]" | |
git push origin HEAD:${GITHUB_HEAD_REF} | |
local_tests: | |
needs: [setup-runner, prepare-and-push, docker-build-and-push] | |
runs-on: self-hosted | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.ref }} | |
- name: Get version | |
id: version | |
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT | |
- name: Set up Minikube | |
run: | | |
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 | |
sudo install minikube-linux-amd64 /usr/local/bin/minikube | |
- name: Stop/Start Minikube - Docker | |
run: | | |
echo $USER | |
sudo usermod -aG docker $USER && newgrp docker | |
sudo chown $USER /var/run/docker.sock | |
minikube start --driver=docker | |
- name: Install Helm | |
run: | | |
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash | |
- name: Install dependencies | |
run: | | |
helm dependency update . | |
- name: Lint Helm chart | |
run: | | |
helm lint . | |
- name: Deploy Helm chart to Minikube | |
run: | | |
ls -alh | |
echo "${{ env.IMAGE_NAME }}" | |
echo "${{ needs.docker-build-and-push.outputs.image_name }}" | |
helm install antmedia antmedia-${{ steps.version.outputs.version }}.tgz --set origin=origin.antmedia.cloud --set image.repository="antmedia/development" --set image.tag="latest" --namespace antmedia --create-namespace | |
- name: Wait for containers to be ready | |
run: | | |
whoami | |
while true; do | |
STATUS=$(minikube kubectl get pods -- -n antmedia -o jsonpath='{.items[0].status.containerStatuses[0].ready}') | |
if [ "$STATUS" == "true" ]; then | |
break | |
fi | |
sleep 5 | |
done | |
- name: Get Minikube IP | |
id: minikube_ip | |
run: echo "::set-output name=ip::$(minikube ip)" | |
- name: Test pod using curl | |
id: curl_result | |
run: | | |
sleep 30 | |
status_code=$(curl -s -o /dev/null -w "%{http_code}" http://${{ steps.minikube_ip.outputs.ip }}:5080) | |
echo "::set-output name=status_code::$status_code" | |
- name: Check curl result | |
run: | | |
if [[ "${{ steps.curl_result.outputs.status_code }}" -eq 200 ]]; then | |
echo "Ant Media Server is running successfully." | |
else | |
echo "Ant Media Server is not accessible. HTTP status code: ${{ steps.curl_result.outputs.status_code }}" | |
exit 1 | |
fi | |
- name: Download Sample MP4 Video | |
run: | | |
wget https://raw.githubusercontent.com/ant-media/Ant-Media-Server/master/src/test/resources/sample_MP4_480.mp4 | |
- name: Install FFmpeg and Check RTMP Stream | |
run: | | |
pod_ip_address=$(minikube kubectl get pods -- -l app=ant-media-origin -o wide -n antmedia -o custom-columns=IP:.status.podIP --no-headers) | |
sudo apt-get update | |
sudo apt-get install -y ffmpeg | |
ffmpeg -re -i sample_MP4_480.mp4 -t 10 -c copy -f flv rtmp://"$pod_ip_address"/WebRTCAppEE/stream1 | |
clean: | |
if: ${{ always() }} | |
needs: [setup-runner, local_tests, prepare-and-push] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Delete runner | |
if: ${{ always() }} | |
run: | | |
echo "GITHUB_TOKEN=${GITHUB_TOKEN}" >> $GITHUB_ENV | |
RUNNER_ID=$(curl -s -H "Accept: application/vnd.github+json" \ | |
-H "Authorization: Bearer $GITHUB_TOKEN" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
https://api.github.com/repos/$REPO/actions/runners | jq -r '.runners[0].id') | |
echo "Deleting runner with ID: $RUNNER_ID" | |
curl -X DELETE -H "Accept: application/vnd.github+json" \ | |
-H "Authorization: Bearer $GITHUB_TOKEN" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
https://api.github.com/repos/$REPO/actions/runners/$RUNNER_ID | |
echo "Runner deleted successfully." | |
- name: Install Dependencies | |
if: ${{ always() }} | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y python3-pip python3-dev libffi-dev libssl-dev | |
sudo pip3 install python-openstackclient | |
- name: Delete CI Instance | |
if: ${{ always() }} | |
run: | | |
SERVER_ID="${{ needs.setup-runner.outputs.server_id }}" | |
echo "server id" $SERVER_ID | |
openstack server delete $SERVER_ID |