name: Build, Publish Docker Image, and Deploy to Kubernetes on: push: branches: - main workflow_dispatch: jobs: build_and_push: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Check if Dockerfile exists id: check_dockerfile run: | if [ -f "Dockerfile" ]; then echo "exists=true" >> $GITHUB_ENV else echo "exists=false" >> $GITHUB_ENV fi - name: Set repository name as image name if: env.exists == 'true' run: echo "IMAGE_NAME=$(echo '${{ github.repository }}' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV - name: Log in to Docker registry if: env.exists == 'true' run: | echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login git.ionas999.at -u ${{ secrets.REGISTRY_USERNAME }} --password-stdin - name: Build Docker image if: env.exists == 'true' run: | docker build -t git.ionas999.at/${{ env.IMAGE_NAME }}:latest . - name: Push Docker image if: env.exists == 'true' run: | docker push git.ionas999.at/${{ env.IMAGE_NAME }}:latest deploy_to_k8s: runs-on: ubuntu-latest needs: build_and_push steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install kubectl run: | # Fetch the latest stable version of kubectl KUBECTL_VERSION=$(curl -s https://dl.k8s.io/release/stable.txt) curl -LO "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/ kubectl version --client - name: Configure kubectl using K3s config run: | mkdir -p ~/.kube echo "${{ secrets.K3S_CONFIG }}" > ~/.kube/config - name: Generate and Apply K3s Deployment and Ingress run: | cat > k3s_deployment.yaml <