Ant Media Server Release #33
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 Release | |
on: | |
push: | |
branches: [ "add_helm_repo" ] | |
paths-ignore: | |
- '**/README.md' | |
- '**/.github/**' | |
- '**/package.sh' | |
- '**/ams-k8s-ssl.sh' | |
workflow_dispatch: | |
permissions: | |
contents: write | |
pull-requests: 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) | |
SERVER_ID="ci-$REPO" | |
echo "server_id=$SERVER_ID" >> $GITHUB_OUTPUT | |
- name: Configure OpenStack CLI and Create Instance | |
run: | | |
echo "Setting up OpenStack CLI environment variables..." | |
export OS_USERNAME=$OS_USERNAME | |
export OS_PASSWORD=$OS_PASSWORD | |
export OS_PROJECT_NAME=$OS_PROJECT_NAME | |
export OS_AUTH_URL=$OS_AUTH_URL | |
export OS_REGION_NAME=$OS_REGION_NAME | |
export OS_USER_DOMAIN_NAME | |
export OS_API_VERSION | |
export OS_TENANT_NAME | |
export OS_TENANT_ID | |
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: | | |
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" ]]; do | |
echo "Runner is $RUNNER_STATUS. Waiting for 10 seconds..." | |
sleep 10 | |
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 | |
env: | |
DOCKER_URL: antmedia/enterprise | |
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 image name | |
id: set-image-name | |
run: echo "IMAGE_NAME=${{ env.DOCKER_URL }}" >> $GITHUB_ENV | |
- 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 | |
local_tests: | |
needs: [setup-runner, docker-build-and-push] | |
runs-on: self-hosted | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- 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: | | |
helm repo add antmedia https://ant-media.github.io/helm | |
helm repo update | |
helm search repo | |
helm install antmedia antmedia/antmedia --set origin=origin.antmedia.cloud --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: Uninstall Helm release | |
run: | | |
helm uninstall antmedia -n antmedia | |
- name: Stop Minikube | |
run: minikube stop | |
release: | |
needs: local_tests | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Get version | |
id: version | |
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT | |
- uses: "marvinpinto/action-automatic-releases@latest" | |
with: | |
repo_token: "${{ secrets.GITHUB_TOKEN }}" | |
if: steps.version.outputs.released == 'true | |
automatic_release_tag: ${{ steps.version.outputs.version }} | |
prerelease: false | |
files: | | |
antmedia-${{ steps.version.outputs.version }}.tgz | |
clean: | |
if: ${{ always() }} | |
needs: [setup-runner, local_tests, docker-build-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 |