{"id":28533461,"url":"https://github.com/epam/ai-dial-ci","last_synced_at":"2026-01-26T20:30:06.491Z","repository":{"id":196276422,"uuid":"688399516","full_name":"epam/ai-dial-ci","owner":"epam","description":"Continuous Integration instrumentation for AI DIAL components","archived":false,"fork":false,"pushed_at":"2025-07-02T09:59:47.000Z","size":391,"stargazers_count":10,"open_issues_count":24,"forks_count":7,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-07-02T22:36:16.424Z","etag":null,"topics":["ai-dial","llm"],"latest_commit_sha":null,"homepage":"https://epam-rail.com","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/epam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-09-07T09:13:12.000Z","updated_at":"2025-07-01T15:12:18.000Z","dependencies_parsed_at":"2024-02-13T18:10:52.408Z","dependency_job_id":"ec76c7ee-c997-4128-adcd-eb08652ccfff","html_url":"https://github.com/epam/ai-dial-ci","commit_stats":null,"previous_names":["epam/ai-dial-ci"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/epam/ai-dial-ci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-ci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-ci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-ci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-ci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/epam","download_url":"https://codeload.github.com/epam/ai-dial-ci/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-ci/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263916912,"owners_count":23529496,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-dial","llm"],"created_at":"2025-06-09T17:07:07.194Z","updated_at":"2026-01-26T20:30:06.469Z","avatar_url":"https://github.com/epam.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AI DIAL workflows\n\n- [AI DIAL workflows](#ai-dial-workflows)\n  - [Overview](#overview)\n  - [Usage](#usage)\n    - [NodeJS (npm)](#nodejs-npm)\n      - [PR Workflow](#pr-workflow)\n      - [Release Workflow](#release-workflow)\n    - [Java (gradle)](#java-gradle)\n      - [PR Workflow (Docker)](#pr-workflow-docker)\n      - [Release Workflow (Docker)](#release-workflow-docker)\n      - [Dependency Review](#dependency-review)\n    - [Python (Poetry)](#python-poetry)\n      - [PR Workflow (Docker)](#pr-workflow-docker-1)\n      - [Release Workflow (Docker)](#release-workflow-docker-1)\n      - [PR Workflow (package)](#pr-workflow-package)\n      - [Release Workflow (package)](#release-workflow-package)\n    - [Generic Docker](#generic-docker)\n      - [PR Workflow](#pr-workflow-1)\n      - [Release Workflow](#release-workflow-1)\n    - [Others](#others)\n      - [Validate PR title](#validate-pr-title)\n      - [Deploy review environment](#deploy-review-environment)\n        - [End-to-end tests](#end-to-end-tests)\n          - [Test Repository Structure](#test-repository-structure)\n          - [Skipping E2E Tests](#skipping-e2e-tests)\n      - [Cleanup for untagged images in GHCR](#cleanup-for-untagged-images-in-ghcr)\n      - [Trigger deployment of development environment in GitLab](#trigger-deployment-of-development-environment-in-gitlab)\n      - [Trivy additional configuration](#trivy-additional-configuration)\n      - [Dependabot](#dependabot)\n        - [Dependabot Pull Requests Automation](#dependabot-pull-requests-automation)\n  - [Contributing](#contributing)\n\n## Overview\n\nContinuous Integration instrumentation for [AI DIAL](https://dialx.ai) components.\n\nContains reusable workflows for AI-DIAL group of repositories under EPAM GitHub organization.\n\n## Usage\n\nThese workflows could be imported to any repository under EPAM GitHub organization as standard `.github/workflows` files. See examples below (replace `@main` with specific version tag).\n\n### NodeJS (npm)\n\n\u003e [!tip]\n\u003e Workflows allow independent choices of output artifacts: container image, npm package, or both (default) via `docker-build-enabled` and `publish-enabled` inputs respectively. Set variable values to match your needs.\n\n#### PR Workflow\n\n`pr.yml`\n\n```yml\nname: PR Workflow\n\non:\n  pull_request:\n    branches: [development, release-*]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}\n  cancel-in-progress: true\n\njobs:\n  run_tests:\n    uses: epam/ai-dial-ci/.github/workflows/node_pr.yml@main\n    secrets: inherit\n```\n\n#### Release Workflow\n\n`release.yml`\n\n```yml\nname: Release Workflow\n\non:\n  push:\n    branches: [development, release-*]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  release:\n    uses: epam/ai-dial-ci/.github/workflows/node_release.yml@main\n    secrets: inherit\n```\n\n### Java (gradle)\n\n#### PR Workflow (Docker)\n\n`pr.yml`\n\n```yml\nname: PR Workflow\n\non:\n  pull_request:\n    branches: [development, release-*]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}\n  cancel-in-progress: true\n\njobs:\n  run_tests:\n    uses: epam/ai-dial-ci/.github/workflows/java_pr.yml@main\n    secrets: inherit\n```\n\n#### Release Workflow (Docker)\n\n`release.yml`\n\n```yml\nname: Release Workflow\n\non:\n  push:\n    branches: [development, release-*]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  release:\n    uses: epam/ai-dial-ci/.github/workflows/java_release.yml@main\n    secrets: inherit\n```\n\n#### Dependency Review\n\nTo support Dependabot security updates, GitHub requires uploading dependency graph data to GitHub's Dependency Graph API. To enable this feature, add the workflow from example below to your repository. You'll start getting review comments on PRs.\n\n`dependency-review.yml`\n\n```yml\nname: Dependency Review\n\non:\n  pull_request_target:\n    types:\n      - opened\n      - synchronize\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}\n  cancel-in-progress: true\n\njobs:\n  dependency-review:\n    uses: epam/ai-dial-ci/.github/workflows/java_dependency_review.yml@main\n    secrets:\n      ACTIONS_BOT_TOKEN: ${{ secrets.ACTIONS_BOT_TOKEN }}\n```\n\n### Python (Poetry)\n\n#### PR Workflow (Docker)\n\n`pr.yml`\n\n```yml\nname: PR Workflow\n\non:\n  pull_request:\n    branches: [development, release-*]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}\n  cancel-in-progress: true\n\njobs:\n  run_tests:\n    uses: epam/ai-dial-ci/.github/workflows/python_docker_pr.yml@main\n    secrets: inherit\n```\n\n#### Release Workflow (Docker)\n\n`release.yml`\n\n```yml\nname: Release Workflow\n\non:\n  push:\n    branches: [development, release-*]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  release:\n    uses: epam/ai-dial-ci/.github/workflows/python_docker_release.yml@main\n    secrets: inherit\n```\n\n#### PR Workflow (package)\n\n`pr.yml`\n\n```yml\nname: PR Workflow\n\non:\n  pull_request:\n    branches: [development, release-*]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}\n  cancel-in-progress: true\n\njobs:\n  run_tests:\n    uses: epam/ai-dial-ci/.github/workflows/python_package_pr.yml@main\n    secrets: inherit\n```\n\n#### Release Workflow (package)\n\n`release.yml`\n\n```yml\nname: Release Workflow\n\non:\n  push:\n    branches: [development, release-*]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  release:\n    uses: epam/ai-dial-ci/.github/workflows/python_package_release.yml@main\n    secrets: inherit\n```\n\n### Generic Docker\n\n#### PR Workflow\n\n`pr.yml`\n\n```yml\nname: PR Workflow\n\non:\n  pull_request:\n    branches: [development, release-*]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}\n  cancel-in-progress: true\n\njobs:\n  run_tests:\n    uses: epam/ai-dial-ci/.github/workflows/generic_docker_pr.yml@main\n    secrets: inherit\n```\n\n#### Release Workflow\n\n`release.yml`\n\n```yml\nname: Release Workflow\n\non:\n  push:\n    branches: [development, release-*]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  release:\n    uses: epam/ai-dial-ci/.github/workflows/generic_docker_release.yml@main\n    secrets: inherit\n```\n\n### Others\n\n#### Validate PR title\n\n`pr-title-check.yml`\n\n```yml\nname: \"Validate PR title\"\n\non:\n  pull_request_target:\n    types:\n      - opened\n      - edited\n      - reopened\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}\n  cancel-in-progress: true\n\njobs:\n  pr-title-check:\n    uses: epam/ai-dial-ci/.github/workflows/pr-title-check.yml@main\n    secrets:\n      ACTIONS_BOT_TOKEN: ${{ secrets.ACTIONS_BOT_TOKEN }}\n```\n\n#### Deploy review environment\n\n`slash-command-dispatch.yml`\n\n```yml\nname: Slash Command Dispatch\non:\n  issue_comment:\n    types: [created]\njobs:\n  slashCommandDispatch:\n    runs-on: ubuntu-latest\n    if: ${{ github.event.issue.pull_request }}\n    steps:\n      - name: Slash Command Dispatch\n        id: scd\n        uses: peter-evans/slash-command-dispatch@13bc09769d122a64f75aa5037256f6f2d78be8c4 # v4.0.0\n        with:\n          token: ${{ secrets.ACTIONS_BOT_TOKEN }}\n          reaction-token: ${{ secrets.ACTIONS_BOT_TOKEN }}\n          config: \u003e\n            [\n              {\n                \"command\": \"deploy-review\",\n                \"permission\": \"write\",\n                \"issue_type\": \"pull-request\",\n                \"repository\": \"epam/ai-dial-ci\",\n                \"static_args\": [\n                  \"application=${{ github.event.repository.name }}\"\n                ]\n              }\n            ]\n```\n\n##### End-to-end tests\n\nThe E2E testing system for review environments enables automated testing of pull request changes in isolated, short-lived environments. When a developer comments `/deploy-review` on a PR, the system deploys the PR code to a review environment and runs E2E tests against it.\n\n```mermaid\nflowchart-elk TD\n    A[Developer comments /deploy-review on PR] --\u003e B[Slash Command Dispatch triggers repository_dispatch in epam/ai-dial-ci]\n\n    subgraph workflow[\"deploy-review-command workflow run\"]\n        subgraph deploy[\"deploy-review job\"]\n            B --\u003e C[deploy-review job]\n            C --\u003e D{Validate dispatch repository against whitelist}\n            D --\u003e|Invalid| E[Fail with error]\n            D --\u003e|Valid| F{Validate required payload values}\n            F --\u003e|Missing| E\n            F --\u003e|Present| G[Trigger GitLab deployment pipeline]\n        end\n\n        subgraph e2e[\"e2e-test job (matrix for each application)\"]\n            G --\u003e I{Does skip-e2e label on PR exist or argument been passed?}\n            I --\u003e|Yes| J[Skip E2E tests]\n            I --\u003e|No| K[Wait for application be available]\n            K --\u003e L[Checkout test repository]\n            L --\u003e M[Run test action]\n        end\n\n        subgraph monitor[\"monitor job\"]\n            O[Periodically update PR comment with status]\n        end\n\n        M --\u003e Q[Workflow complete]\n        J --\u003e Q\n    end\n\n    Q --\u003e R[Final status updated in PR comment]\n```\n\n###### Test Repository Structure\n\nA test repository must provide [composite actions](https://docs.github.com/en/actions/tutorials/create-actions/create-a-composite-action) with the following layout:\n\n```text\n.github/\n  actions/\n    test-\u003capplication\u003e/\n      action.yml \u003c-- Composite action that runs tests\n```\n\n\u003e [!note]\n\u003e The `\u003capplication\u003e` placeholder must match the `application` value passed in `static_args` of the `slash-command-dispatch` action\n\nThe action must have inputs:\n\n- `environment-url`: URL of the deployed review environment\n- `report-prefix`: (Optional) Prefix for report files generated by the action\n- `test-branch`: (Optional) Branch of repository with tests source code to use\n\nBesides inputs, the action will have access to environment variables:\n\n- `E2E_ADMIN`\n- `E2E_OVERLAY_USERNAME`\n- `E2E_PASSWORD`\n- `E2E_USERNAME`\n- `NEXT_PUBLIC_OVERLAY_USER_BUCKET`\n\n\u003e [!note]\n\u003e One composite action should test one application only\n\n###### Skipping E2E Tests\n\nIf you need to disable E2E tests execution:\n\n- for the **whole repository**: add `skip-e2e` argument to `static_args` list\n\n  ```yml\n                \"static_args\": [\n                  \"application=${{ github.event.repository.name }}\",\n                  \"skip-e2e\"\n                ]\n  ```\n\n- for the **specific PR**: assign `skip-e2e` label to PR\n- **once**: use `/deploy-review skip-e2e` command in PR comment\n\n#### Cleanup for untagged images in GHCR\n\n`cleanup-untagged-images.yml`\n\n```yml\nname: Cleanup untagged images\n\non:\n  schedule:\n    - cron: \"0 0 * * *\"\n\njobs:\n  clean:\n    name: Delete untagged images\n    runs-on: ubuntu-latest\n    permissions:\n      packages: write\n    steps:\n      - uses: dataaxiom/ghcr-cleanup-action@cd0cdb900b5dbf3a6f2cc869f0dbb0b8211f50c4 # v1.0.16\n        with:\n          delete-untagged: true\n```\n\n#### Trigger deployment of development environment in GitLab\n\nA common case is to trigger development environment(s) update from GitHub to GitLab, e.g. each time a `development` branch produces a new artifact. Also, it could be not single, but several environments, representing different configuration presets of a single app. To use the example below:\n\n1. add a new [repository secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets) with name `DEPLOY_HOST` and value of the gitlab host, e.g. `gitlab.example.com`\n1. create a new [environment](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-deployments/managing-environments-for-deployment#creating-an-environment), e.g. `development`\n1. for the environment, add [environment secrets](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-deployments/managing-environments-for-deployment#environment-secrets) with names `DEPLOY_ACCESS_TOKEN` and `DEPLOY_TRIGGER_TOKEN` and values of the gitlab access token and trigger token respectively.\n1. use the example workflow file below\n\n`deploy-development.yml`\n\n```yml\nname: Deploy development\n\non:\n  workflow_dispatch: # manual run\n  registry_package: # on new package version (main path)\n  workflow_run: # HACK: redundant trigger to mitigate GitHub's huge delays in registry_package event processing\n    workflows: [\"Release Workflow\"]\n    types:\n      - completed\n\njobs:\n  gitlab-dev-deploy:\n    if: |\n      github.event_name == 'workflow_dispatch' ||\n      github.event.registry_package.package_version.container_metadata.tag.name == 'development' ||\n      (github.event.workflow_run.conclusion == 'success' \u0026\u0026 github.event.workflow_run.head_branch == 'development')\n    uses: epam/ai-dial-ci/.github/workflows/deploy-development.yml@main\n    with:\n      gitlab-project-id: \"1487\"\n    secrets:\n      DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}\n      DEPLOY_ACCESS_TOKEN: ${{ secrets.DEPLOY_ACCESS_TOKEN }}\n      DEPLOY_TRIGGER_TOKEN: ${{ secrets.DEPLOY_TRIGGER_TOKEN }}\n```\n\nIn case of multiple environments, continue creating multiple GitHub environments named after e.g. feature sets, each with its own secrets, then use matrix approach as shown below.\n\n`deploy-development.yml`\n\n```yml\nname: Deploy development\n\non:\n  workflow_dispatch: # manual run\n  registry_package: # on new package version (main path)\n  workflow_run: # HACK: redundant trigger to mitigate GitHub's huge delays in registry_package event processing\n    workflows: [\"Release Workflow\"]\n    types:\n      - completed\n\njobs:\n  trigger:\n    if: |\n      github.event_name == 'workflow_dispatch' ||\n      github.event.registry_package.package_version.container_metadata.tag.name == 'development' ||\n      (github.event.workflow_run.conclusion == 'success' \u0026\u0026 github.event.workflow_run.head_branch == 'development')\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - environment-name: \"development\"\n            gitlab-project-id: \"1487\"\n          - environment-name: \"feature-1\"\n            gitlab-project-id: \"1489\"\n          - environment-name: \"feature-2\"\n            gitlab-project-id: \"1984\"\n          - environment-name: \"feature-3\"\n            gitlab-project-id: \"1337\"\n\n    name: Deploy to ${{ matrix.environment-name }}\n    uses: epam/ai-dial-ci/.github/workflows/deploy-development.yml@main\n    with:\n      gitlab-project-id: ${{ matrix.gitlab-project-id }}\n      environment-name: ${{ matrix.environment-name }}\n    secrets:\n      DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}\n      DEPLOY_ACCESS_TOKEN: ${{ secrets.DEPLOY_ACCESS_TOKEN }}\n      DEPLOY_TRIGGER_TOKEN: ${{ secrets.DEPLOY_TRIGGER_TOKEN }}\n```\n\n#### Trivy additional configuration\n\nTo change predefined Trivy parameters or set up additional configuration options, create `trivy.yaml` file in root of your repository. Use example below to add fallback repositories for vulnerabilities and checks DB and thus mitigate rate limit issues.\n\n`trivy.yaml`\n\n```yaml\n# Trivy configuration file\n# https://aquasecurity.github.io/trivy/latest/docs/references/configuration/config-file/\ndb:\n  no-progress: true\n  repository:\n    - mirror.gcr.io/aquasec/trivy-db:2\n    - public.ecr.aws/aquasecurity/trivy-db:2\n    - ghcr.io/aquasecurity/trivy-db:2\n  java-repository:\n    - mirror.gcr.io/aquasec/trivy-java-db:1\n    - public.ecr.aws/aquasecurity/trivy-java-db:1\n    - ghcr.io/aquasecurity/trivy-java-db:1\nmisconfiguration:\n  checks-bundle-repository: mirror.gcr.io/aquasec/trivy-checks:1\n```\n\n#### Dependabot\n\nIt's strongly recommended to enable at least [Dependabot security updates](https://docs.github.com/en/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates) for your repositories to stay protected from known vulnerabilities in dependencies. To do that, create `.github/dependabot.yml` file in your repository.\n\n\u003e [!note]\n\u003e The example for `java` with `gradle` as a package manager given. Adjust repo's **primary** [package-ecosystem](https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem) accordingly. Keep `github-actions` ecosystem as is\n\n`dependabot.yml`\n\n```yml\nversion: 2\nupdates:\n  - package-ecosystem: \"gradle\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n      day: \"wednesday\"\n      time: \"09:00\"\n    # Disable version updates, keep security updates only\n    open-pull-requests-limit: 0\n    commit-message:\n      # Prefix all commit messages with \"chore: \"\n      prefix: \"chore\"\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n      day: \"wednesday\"\n      time: \"09:00\"\n    commit-message:\n      # Prefix all commit messages with \"chore: \"\n      prefix: \"chore\"\n    groups:\n      ai-dial-ci:\n        applies-to: version-updates\n        patterns:\n          - \"epam/ai-dial-ci/*\"\n      github-actions:\n        applies-to: version-updates\n        patterns:\n          - \"*\"\n        exclude-patterns:\n          - \"epam/ai-dial-ci/*\"\n    open-pull-requests-limit: 10\n```\n\n##### Dependabot Pull Requests Automation\n\nRepository maintainers may want to automate approval/merging of Dependabot PRs to reduce manual effort. The example below will automatically approve all Dependabot PRs, and merge those that belong to `ai-dial-ci` group and are **not major** version updates.\n\n\u003e [!warning]\n\u003e The workflow requires [auto-merge](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-auto-merge-for-pull-requests-in-your-repository#managing-auto-merge) option in repository settings enabled\n\n\u003e [!tip]\n\u003e You can modify the conditions to fit your needs, e.g remove `steps.metadata.outputs.dependency-group == 'ai-dial-ci'` condition to enable auto-merging for **all** Dependabot PRs except major version updates\n\n`dependabot-automation.yml`\n\n```yml\nname: Dependabot Automation\n\non: pull_request_target\n\npermissions: {}\n\njobs:\n  dependabot:\n    runs-on: ubuntu-latest\n    if: |\n      github.event.pull_request.user.login == 'dependabot[bot]' \u0026\u0026\n      github.repository_owner == 'epam'\n    steps:\n      - name: Dependabot metadata\n        id: metadata\n        uses: dependabot/fetch-metadata@08eff52bf64351f401fb50d4972fa95b9f2c2d1b # v2.4.0\n      - name: Approve PR\n        run: gh pr review --approve \"$PR_URL\"\n        env:\n          PR_URL: ${{ github.event.pull_request.html_url }}\n          GH_TOKEN: ${{ secrets.ACTIONS_BOT_TOKEN }}\n      - name: Merge PR\n        if: |\n          steps.metadata.outputs.dependency-group == 'ai-dial-ci' \u0026\u0026\n          steps.metadata.outputs.update-type != 'version-update:semver-major'\n        run: gh pr merge --auto --squash \"$PR_URL\"\n        env:\n          PR_URL: ${{ github.event.pull_request.html_url }}\n          GH_TOKEN: ${{ secrets.ACTIONS_BOT_TOKEN }}\n```\n\n## Contributing\n\nThis project contains reusable workflows under [`.github/workflows`](.github/workflows) directory, and composite actions under [`actions`](actions) directory.\n\nCheck [contribution guidelines](CONTRIBUTING.md) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepam%2Fai-dial-ci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fepam%2Fai-dial-ci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepam%2Fai-dial-ci/lists"}