Merge pull request #1472 from maximhq/01-29-guardrail_docs_updates #1773
This file contains hidden or 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: Release Pipeline | |
| # Triggers automatically on push to main when any version file changes | |
| on: | |
| push: | |
| branches: ["main"] | |
| # Prevent concurrent runs | |
| concurrency: | |
| group: release-pipeline | |
| cancel-in-progress: false | |
| jobs: | |
| # Check if pipeline should be skipped based on first line of commit message | |
| check-skip: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| should-skip: ${{ steps.check.outputs.should-skip }} | |
| steps: | |
| - name: Check if pipeline should be skipped | |
| id: check | |
| env: | |
| COMMIT_MESSAGE: ${{ github.event.head_commit.message }} | |
| run: | | |
| FIRST_LINE=$(echo "$COMMIT_MESSAGE" | head -n 1) | |
| if [[ "$FIRST_LINE" == *"--skip-pipeline"* ]]; then | |
| echo "should-skip=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "should-skip=false" >> $GITHUB_OUTPUT | |
| fi | |
| # Detect what needs to be released | |
| detect-changes: | |
| needs: [check-skip] | |
| runs-on: ubuntu-latest | |
| # Skip if first line of commit message contains --skip-pipeline | |
| if: needs.check-skip.outputs.should-skip != 'true' | |
| outputs: | |
| core-needs-release: ${{ steps.detect.outputs.core-needs-release }} | |
| framework-needs-release: ${{ steps.detect.outputs.framework-needs-release }} | |
| plugins-need-release: ${{ steps.detect.outputs.plugins-need-release }} | |
| bifrost-http-needs-release: ${{ steps.detect.outputs.bifrost-http-needs-release }} | |
| docker-needs-release: ${{ steps.detect.outputs.docker-needs-release }} | |
| changed-plugins: ${{ steps.detect.outputs.changed-plugins }} | |
| core-version: ${{ steps.detect.outputs.core-version }} | |
| framework-version: ${{ steps.detect.outputs.framework-version }} | |
| transport-version: ${{ steps.detect.outputs.transport-version }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - name: Install jq | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y jq | |
| - name: Detect what needs release | |
| id: detect | |
| run: ./.github/workflows/scripts/detect-all-changes.sh "auto" | |
| core-release: | |
| needs: [check-skip, detect-changes] | |
| if: needs.check-skip.outputs.should-skip != 'true' && needs.detect-changes.outputs.core-needs-release == 'true' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| outputs: | |
| success: ${{ steps.release.outputs.success }} | |
| version: ${{ needs.detect-changes.outputs.core-version }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| token: ${{ secrets.GH_TOKEN }} | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: "1.25.5" | |
| - name: Configure Git | |
| run: | | |
| git config user.name "GitHub Actions Bot" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| - name: Release core | |
| id: release | |
| env: | |
| GH_TOKEN: ${{ secrets.GH_TOKEN }} | |
| MAXIM_API_KEY: ${{ secrets.MAXIM_API_KEY }} | |
| MAXIM_LOGGER_ID: ${{ secrets.MAXIM_LOG_REPO_ID }} | |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AWS_SESSION_TOKEN: ${{ secrets.AWS_SESSION_TOKEN }} | |
| AWS_ARN: ${{ secrets.AWS_ARN }} | |
| BEDROCK_API_KEY: ${{ secrets.BEDROCK_API_KEY }} | |
| AZURE_ENDPOINT: ${{ secrets.AZURE_ENDPOINT }} | |
| AZURE_API_KEY: ${{ secrets.AZURE_API_KEY }} | |
| AZURE_API_VERSION: ${{ secrets.AZURE_API_VERSION }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | |
| GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }} | |
| MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }} | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} | |
| OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} | |
| PARASAIL_API_KEY: ${{ secrets.PARASAIL_API_KEY }} | |
| ELEVENLABS_API_KEY: ${{ secrets.ELEVENLABS_API_KEY }} | |
| PERPLEXITY_API_KEY: ${{ secrets.PERPLEXITY_API_KEY }} | |
| SGL_API_KEY: ${{ secrets.SGL_API_KEY }} | |
| CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }} | |
| COHERE_API_KEY: ${{ secrets.COHERE_API_KEY }} | |
| VERTEX_CREDENTIALS: ${{ secrets.VERTEX_CREDENTIALS }} | |
| VERTEX_PROJECT_ID: ${{ secrets.VERTEX_PROJECT_ID }} | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| HUGGING_FACE_API_KEY: ${{ secrets.HUGGING_FACE_API_KEY }} | |
| AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} | |
| AWS_BEDROCK_ROLE_ARN: ${{ secrets.AWS_BEDROCK_ROLE_ARN }} | |
| run: ./.github/workflows/scripts/release-core.sh "${{ needs.detect-changes.outputs.core-version }}" | |
| framework-release: | |
| needs: [check-skip, detect-changes, core-release] | |
| if: "always() && needs.check-skip.outputs.should-skip != 'true' && needs.detect-changes.outputs.framework-needs-release == 'true' && (needs.detect-changes.outputs.core-needs-release == 'false' || needs.core-release.result == 'success' || needs.core-release.result == 'skipped')" | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| outputs: | |
| success: ${{ steps.release.outputs.success }} | |
| version: ${{ needs.detect-changes.outputs.framework-version }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| token: ${{ secrets.GH_TOKEN }} | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: "1.25.5" | |
| - name: Configure Git | |
| run: | | |
| git config user.name "GitHub Actions Bot" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| - name: Set up Docker Compose | |
| run: | | |
| # Verify Docker is available | |
| docker --version | |
| # Install Docker Compose if not available as plugin | |
| if ! docker compose version >/dev/null 2>&1; then | |
| echo "Installing Docker Compose..." | |
| sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose | |
| sudo chmod +x /usr/local/bin/docker-compose | |
| docker-compose --version | |
| else | |
| echo "Docker Compose plugin is available" | |
| docker compose version | |
| fi | |
| - name: Release framework | |
| id: release | |
| env: | |
| GH_TOKEN: ${{ secrets.GH_TOKEN }} | |
| MAXIM_API_KEY: ${{ secrets.MAXIM_API_KEY }} | |
| MAXIM_LOGGER_ID: ${{ secrets.MAXIM_LOG_REPO_ID }} | |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AWS_SESSION_TOKEN: ${{ secrets.AWS_SESSION_TOKEN }} | |
| AWS_ARN: ${{ secrets.AWS_ARN }} | |
| BEDROCK_API_KEY: ${{ secrets.BEDROCK_API_KEY }} | |
| AZURE_ENDPOINT: ${{ secrets.AZURE_ENDPOINT }} | |
| AZURE_API_KEY: ${{ secrets.AZURE_API_KEY }} | |
| AZURE_API_VERSION: ${{ secrets.AZURE_API_VERSION }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | |
| GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }} | |
| MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }} | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} | |
| OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} | |
| PARASAIL_API_KEY: ${{ secrets.PARASAIL_API_KEY }} | |
| ELEVENLABS_API_KEY: ${{ secrets.ELEVENLABS_API_KEY }} | |
| PERPLEXITY_API_KEY: ${{ secrets.PERPLEXITY_API_KEY }} | |
| SGL_API_KEY: ${{ secrets.SGL_API_KEY }} | |
| CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }} | |
| COHERE_API_KEY: ${{ secrets.COHERE_API_KEY }} | |
| VERTEX_CREDENTIALS: ${{ secrets.VERTEX_CREDENTIALS }} | |
| VERTEX_PROJECT_ID: ${{ secrets.VERTEX_PROJECT_ID }} | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| HUGGING_FACE_API_KEY: ${{ secrets.HUGGING_FACE_API_KEY }} | |
| run: ./.github/workflows/scripts/release-framework.sh "${{ needs.detect-changes.outputs.framework-version }}" | |
| plugins-release: | |
| needs: [check-skip, detect-changes, core-release, framework-release] | |
| if: "always() && needs.check-skip.outputs.should-skip != 'true' && needs.detect-changes.outputs.plugins-need-release == 'true' && (needs.detect-changes.outputs.core-needs-release == 'false' || needs.core-release.result == 'success' || needs.core-release.result == 'skipped') && (needs.detect-changes.outputs.framework-needs-release == 'false' || needs.framework-release.result == 'success' || needs.framework-release.result == 'skipped')" | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| outputs: | |
| success: ${{ steps.release.outputs.success }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| token: ${{ secrets.GH_TOKEN }} | |
| - name: Install jq | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y jq | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: "1.25.5" | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| - name: Configure Git | |
| run: | | |
| git config user.name "GitHub Actions Bot" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| - name: Set up Docker Compose | |
| run: | | |
| # Verify Docker is available | |
| docker --version | |
| # Install Docker Compose if not available as plugin | |
| if ! docker compose version >/dev/null 2>&1; then | |
| echo "Installing Docker Compose..." | |
| sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose | |
| sudo chmod +x /usr/local/bin/docker-compose | |
| docker-compose --version | |
| else | |
| echo "Docker Compose plugin is available" | |
| docker compose version | |
| fi | |
| - name: Release all changed plugins | |
| id: release | |
| env: | |
| GH_TOKEN: ${{ secrets.GH_TOKEN }} | |
| MAXIM_API_KEY: ${{ secrets.MAXIM_API_KEY }} | |
| MAXIM_LOGGER_ID: ${{ secrets.MAXIM_LOG_REPO_ID }} | |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AWS_SESSION_TOKEN: ${{ secrets.AWS_SESSION_TOKEN }} | |
| AWS_ARN: ${{ secrets.AWS_ARN }} | |
| BEDROCK_API_KEY: ${{ secrets.BEDROCK_API_KEY }} | |
| AZURE_ENDPOINT: ${{ secrets.AZURE_ENDPOINT }} | |
| AZURE_API_KEY: ${{ secrets.AZURE_API_KEY }} | |
| AZURE_API_VERSION: ${{ secrets.AZURE_API_VERSION }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | |
| GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }} | |
| MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }} | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} | |
| OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} | |
| PARASAIL_API_KEY: ${{ secrets.PARASAIL_API_KEY }} | |
| ELEVENLABS_API_KEY: ${{ secrets.ELEVENLABS_API_KEY }} | |
| PERPLEXITY_API_KEY: ${{ secrets.PERPLEXITY_API_KEY }} | |
| SGL_API_KEY: ${{ secrets.SGL_API_KEY }} | |
| CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }} | |
| COHERE_API_KEY: ${{ secrets.COHERE_API_KEY }} | |
| VERTEX_CREDENTIALS: ${{ secrets.VERTEX_CREDENTIALS }} | |
| VERTEX_PROJECT_ID: ${{ secrets.VERTEX_PROJECT_ID }} | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| HUGGING_FACE_API_KEY: ${{ secrets.HUGGING_FACE_API_KEY }} | |
| run: ./.github/workflows/scripts/release-all-plugins.sh '${{ needs.detect-changes.outputs.changed-plugins }}' | |
| bifrost-http-release: | |
| needs: | |
| [ | |
| check-skip, | |
| detect-changes, | |
| core-release, | |
| framework-release, | |
| plugins-release, | |
| ] | |
| if: "always() && needs.check-skip.outputs.should-skip != 'true' && needs.detect-changes.outputs.bifrost-http-needs-release == 'true' && (needs.detect-changes.outputs.core-needs-release == 'false' || needs.core-release.result == 'success' || needs.core-release.result == 'skipped') && (needs.detect-changes.outputs.framework-needs-release == 'false' || needs.framework-release.result == 'success' || needs.framework-release.result == 'skipped') && (needs.detect-changes.outputs.plugins-need-release == 'false' || needs.plugins-release.result == 'success' || needs.plugins-release.result == 'skipped')" | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| outputs: | |
| success: ${{ steps.release.outputs.success }} | |
| version: ${{ needs.detect-changes.outputs.transport-version }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| token: ${{ secrets.GH_TOKEN }} | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: "1.25.5" | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| - name: Configure Git | |
| run: | | |
| git config user.name "GitHub Actions Bot" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| - name: Set up Docker Compose | |
| run: | | |
| # Verify Docker is available | |
| docker --version | |
| # Install Docker Compose if not available as plugin | |
| if ! docker compose version >/dev/null 2>&1; then | |
| echo "Installing Docker Compose..." | |
| sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose | |
| sudo chmod +x /usr/local/bin/docker-compose | |
| docker-compose --version | |
| else | |
| echo "Docker Compose plugin is available" | |
| docker compose version | |
| fi | |
| - name: Release bifrost-http | |
| id: release | |
| env: | |
| GH_TOKEN: ${{ secrets.GH_TOKEN }} | |
| MAXIM_API_KEY: ${{ secrets.MAXIM_API_KEY }} | |
| MAXIM_LOGGER_ID: ${{ secrets.MAXIM_LOG_REPO_ID }} | |
| R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }} | |
| R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} | |
| R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} | |
| R2_BUCKET: ${{ secrets.R2_BUCKET }} | |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AWS_SESSION_TOKEN: ${{ secrets.AWS_SESSION_TOKEN }} | |
| AWS_ARN: ${{ secrets.AWS_ARN }} | |
| BEDROCK_API_KEY: ${{ secrets.BEDROCK_API_KEY }} | |
| AZURE_ENDPOINT: ${{ secrets.AZURE_ENDPOINT }} | |
| AZURE_API_KEY: ${{ secrets.AZURE_API_KEY }} | |
| AZURE_API_VERSION: ${{ secrets.AZURE_API_VERSION }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | |
| GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }} | |
| MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }} | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} | |
| OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} | |
| PARASAIL_API_KEY: ${{ secrets.PARASAIL_API_KEY }} | |
| ELEVENLABS_API_KEY: ${{ secrets.ELEVENLABS_API_KEY }} | |
| PERPLEXITY_API_KEY: ${{ secrets.PERPLEXITY_API_KEY }} | |
| SGL_API_KEY: ${{ secrets.SGL_API_KEY }} | |
| CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }} | |
| COHERE_API_KEY: ${{ secrets.COHERE_API_KEY }} | |
| VERTEX_CREDENTIALS: ${{ secrets.VERTEX_CREDENTIALS }} | |
| VERTEX_PROJECT_ID: ${{ secrets.VERTEX_PROJECT_ID }} | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| HUGGING_FACE_API_KEY: ${{ secrets.HUGGING_FACE_API_KEY }} | |
| run: ./.github/workflows/scripts/release-bifrost-http.sh "${{ needs.detect-changes.outputs.transport-version }}" | |
| # Docker build amd64 | |
| docker-build-amd64: | |
| needs: | |
| [ | |
| check-skip, | |
| detect-changes, | |
| core-release, | |
| framework-release, | |
| plugins-release, | |
| bifrost-http-release, | |
| ] | |
| if: "always() && needs.check-skip.outputs.should-skip != 'true' && needs.detect-changes.outputs.docker-needs-release == 'true' && (needs.detect-changes.outputs.core-needs-release == 'false' || needs.core-release.result == 'success' || needs.core-release.result == 'skipped') && (needs.detect-changes.outputs.framework-needs-release == 'false' || needs.framework-release.result == 'success' || needs.framework-release.result == 'skipped') && (needs.detect-changes.outputs.plugins-need-release == 'false' || needs.plugins-release.result == 'success' || needs.plugins-release.result == 'skipped') && (needs.detect-changes.outputs.bifrost-http-needs-release == 'false' || needs.bifrost-http-release.result == 'success' || needs.bifrost-http-release.result == 'skipped')" | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| env: | |
| REGISTRY: docker.io | |
| ACCOUNT: maximhq | |
| IMAGE_NAME: bifrost | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - name: Verify bifrost-http release | |
| id: verify | |
| continue-on-error: true | |
| env: | |
| GH_TOKEN: ${{ secrets.GH_TOKEN }} | |
| run: | | |
| ./.github/workflows/scripts/verify-bifrost-http-release.sh "${{ needs.detect-changes.outputs.transport-version }}" "${{ needs.detect-changes.outputs.bifrost-http-needs-release }}" | |
| echo "verified=true" >> $GITHUB_OUTPUT | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Log in to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Determine Docker tags | |
| id: tags | |
| run: | | |
| git pull origin ${{ github.ref_name }} | |
| VERSION="${{ needs.detect-changes.outputs.transport-version }}" | |
| BASE_TAG="${{ env.REGISTRY }}/${{ env.ACCOUNT }}/${{ env.IMAGE_NAME }}:v${VERSION}-amd64" | |
| echo "tags=${BASE_TAG}" >> $GITHUB_OUTPUT | |
| - name: Build and push AMD64 Docker image | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| build-args: | | |
| VERSION=${{ needs.detect-changes.outputs.transport-version }} | |
| file: ./transports/Dockerfile | |
| push: true | |
| tags: ${{ steps.tags.outputs.tags }} | |
| platforms: linux/amd64 | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| # Docker build arm64 | |
| docker-build-arm64: | |
| needs: | |
| [ | |
| check-skip, | |
| detect-changes, | |
| core-release, | |
| framework-release, | |
| plugins-release, | |
| bifrost-http-release, | |
| ] | |
| if: "always() && needs.check-skip.outputs.should-skip != 'true' && needs.detect-changes.outputs.docker-needs-release == 'true' && (needs.detect-changes.outputs.core-needs-release == 'false' || needs.core-release.result == 'success' || needs.core-release.result == 'skipped') && (needs.detect-changes.outputs.framework-needs-release == 'false' || needs.framework-release.result == 'success' || needs.framework-release.result == 'skipped') && (needs.detect-changes.outputs.plugins-need-release == 'false' || needs.plugins-release.result == 'success' || needs.plugins-release.result == 'skipped') && (needs.detect-changes.outputs.bifrost-http-needs-release == 'false' || needs.bifrost-http-release.result == 'success' || needs.bifrost-http-release.result == 'skipped')" | |
| runs-on: ubuntu-24.04-arm | |
| permissions: | |
| contents: write | |
| env: | |
| REGISTRY: docker.io | |
| ACCOUNT: maximhq | |
| IMAGE_NAME: bifrost | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - name: Verify bifrost-http release | |
| id: verify | |
| continue-on-error: true | |
| env: | |
| GH_TOKEN: ${{ secrets.GH_TOKEN }} | |
| run: | | |
| ./.github/workflows/scripts/verify-bifrost-http-release.sh "${{ needs.detect-changes.outputs.transport-version }}" "${{ needs.detect-changes.outputs.bifrost-http-needs-release }}" | |
| echo "verified=true" >> $GITHUB_OUTPUT | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Log in to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Determine Docker tags | |
| id: tags | |
| run: | | |
| git pull origin ${{ github.ref_name }} | |
| VERSION="${{ needs.detect-changes.outputs.transport-version }}" | |
| BASE_TAG="${{ env.REGISTRY }}/${{ env.ACCOUNT }}/${{ env.IMAGE_NAME }}:v${VERSION}-arm64" | |
| echo "tags=${BASE_TAG}" >> $GITHUB_OUTPUT | |
| - name: Build and push ARM64 Docker image | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| file: ./transports/Dockerfile | |
| push: true | |
| build-args: | | |
| VERSION=${{ needs.detect-changes.outputs.transport-version }} | |
| tags: ${{ steps.tags.outputs.tags }} | |
| platforms: linux/arm64 | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| # Docker manifest | |
| docker-manifest: | |
| needs: [check-skip, detect-changes, docker-build-amd64, docker-build-arm64] | |
| if: "always() && needs.check-skip.outputs.should-skip != 'true' && needs.docker-build-amd64.result == 'success' && needs.docker-build-arm64.result == 'success'" | |
| runs-on: ubuntu-latest | |
| env: | |
| REGISTRY: docker.io | |
| ACCOUNT: maximhq | |
| IMAGE_NAME: bifrost | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Log in to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Create and push multi-arch manifest | |
| run: | | |
| ./.github/workflows/scripts/create-docker-manifest.sh "${{ needs.detect-changes.outputs.transport-version }}" | |
| # Push Mintlify changelog | |
| push-mintlify-changelog: | |
| needs: | |
| [ | |
| check-skip, | |
| detect-changes, | |
| core-release, | |
| framework-release, | |
| plugins-release, | |
| bifrost-http-release, | |
| ] | |
| if: "always() && needs.check-skip.outputs.should-skip != 'true' && (needs.detect-changes.outputs.core-needs-release == 'false' || needs.core-release.result == 'success' || needs.core-release.result == 'skipped') && (needs.detect-changes.outputs.framework-needs-release == 'false' || needs.framework-release.result == 'success' || needs.framework-release.result == 'skipped') && (needs.detect-changes.outputs.plugins-need-release == 'false' || needs.plugins-release.result == 'success' || needs.plugins-release.result == 'skipped') && (needs.detect-changes.outputs.bifrost-http-needs-release == 'false' || needs.bifrost-http-release.result == 'success' || needs.bifrost-http-release.result == 'skipped')" | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| token: ${{ secrets.GH_TOKEN }} | |
| - name: Push Mintlify changelog | |
| run: | | |
| ./.github/workflows/scripts/push-mintlify-changelog.sh "${{ needs.detect-changes.outputs.transport-version }}" | |
| # Notification | |
| notify: | |
| needs: | |
| [ | |
| check-skip, | |
| detect-changes, | |
| core-release, | |
| framework-release, | |
| plugins-release, | |
| bifrost-http-release, | |
| docker-manifest, | |
| ] | |
| if: "always() && needs.check-skip.outputs.should-skip != 'true'" | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Install jq | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y jq | |
| - name: Discord Notification | |
| env: | |
| DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} | |
| run: | | |
| # Build status summary | |
| CORE_STATUS="⏭️ Skipped" | |
| FRAMEWORK_STATUS="⏭️ Skipped" | |
| PLUGINS_STATUS="⏭️ Skipped" | |
| BIFROST_STATUS="⏭️ Skipped" | |
| if [ "${{ needs.core-release.result }}" = "success" ]; then | |
| CORE_STATUS="✅ Released v${{ needs.detect-changes.outputs.core-version }}" | |
| elif [ "${{ needs.core-release.result }}" = "failure" ]; then | |
| CORE_STATUS="❌ Failed" | |
| fi | |
| if [ "${{ needs.framework-release.result }}" = "success" ]; then | |
| FRAMEWORK_STATUS="✅ Released v${{ needs.detect-changes.outputs.framework-version }}" | |
| elif [ "${{ needs.framework-release.result }}" = "failure" ]; then | |
| FRAMEWORK_STATUS="❌ Failed" | |
| fi | |
| if [ "${{ needs.plugins-release.result }}" = "success" ]; then | |
| PLUGINS_STATUS="✅ Released plugins" | |
| elif [ "${{ needs.plugins-release.result }}" = "failure" ]; then | |
| PLUGINS_STATUS="❌ Failed" | |
| fi | |
| if [ "${{ needs.bifrost-http-release.result }}" = "success" ]; then | |
| BIFROST_STATUS="✅ Released v${{ needs.detect-changes.outputs.transport-version }}" | |
| elif [ "${{ needs.bifrost-http-release.result }}" = "failure" ]; then | |
| BIFROST_STATUS="❌ Failed" | |
| fi | |
| # Build the message with proper formatting | |
| MESSAGE=$(printf "🚀 **Release Pipeline Complete**\n\n**Components:**\n• Core: %s\n• Framework: %s\n• Plugins: %s\n• Bifrost HTTP: %s\n\n**Details:**\n• Branch: \`${{ github.ref_name }}\`\n• Commit: \`%.8s\`\n• Author: %s\n\n[View Workflow Run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" "$CORE_STATUS" "$FRAMEWORK_STATUS" "$PLUGINS_STATUS" "$BIFROST_STATUS" "${{ github.sha }}" "${{ github.actor }}") | |
| payload="$(jq -n --arg content "$MESSAGE" '{content:$content}')" | |
| curl -sS -H "Content-Type: application/json" -d "$payload" "$DISCORD_WEBHOOK" |