Skip to content

add release-image.yml - #39

Merged
fuwx295 merged 3 commits into
CloudDetail:release-cifrom
konpure:apo-1.0.0
Aug 4, 2025
Merged

add release-image.yml#39
fuwx295 merged 3 commits into
CloudDetail:release-cifrom
konpure:apo-1.0.0

Conversation

@konpure

@konpure konpure commented Aug 4, 2025

Copy link
Copy Markdown

Summary

Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.

Tip

Close issue syntax: Fixes #<issue number> or Resolves #<issue number>, see documentation for more details.

Screenshots

Before After
... ...

Checklist

Important

Please review the checklist below before submitting your pull request.

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran dev/reformat(backend) and cd web && npx lint-staged(frontend) to appease the lint gods

Summary by Sourcery

Add GitHub Actions workflows to automate building and pushing multi-architecture Docker images for both API and Web components.

New Features:

  • Add release-image-api.yml to build and push Dify API images for amd64 and arm64
  • Add release-image-web.yml to build and push Dify Web images for amd64 and arm64

CI:

  • Configure manual dispatch, branch triggers, and concurrency controls for release workflows

@sourcery-ai

sourcery-ai Bot commented Aug 4, 2025

Copy link
Copy Markdown

Reviewer's Guide

Introduces two new GitHub workflows to automate building and pushing Docker images for the API and web components across AMD64 and ARM64 architectures, including registry authentication, QEMU/buildx setup, caching, and concurrency control.

Flow diagram for Docker image build and push process (API & Web)

flowchart TD
  Start([Start Workflow])
  Checkout[Checkout Code]
  Login[Login to Aliyun Registry]
  QEMU[Set up QEMU]
  Buildx[Set up Docker Buildx]
  BuildAMD[Build & Push AMD64 Image]
  BuildARM[Build & Push ARM64 Image]
  End([End])

  Start --> Checkout --> Login --> QEMU --> Buildx
  Buildx --> BuildAMD --> BuildARM --> End
Loading

File-Level Changes

Change Details Files
Define release-image-api GitHub workflow
  • Trigger on manual workflow_dispatch, push to 'release-ci', and closed PRs
  • Enforce concurrency to cancel in-progress runs per build
  • Set environment variables for registry host and DockerHub credentials
  • Authenticate with Aliyun registry and configure QEMU and Docker Buildx
  • Build and push multi-arch (AMD64 & ARM64) Docker images with GitHub Actions cache
.github/workflows/release-image-api.yml
Define release-image-web GitHub workflow
  • Trigger on manual workflow_dispatch, push to 'release-ci', and closed PRs
  • Enforce concurrency to cancel in-progress runs per build
  • Set environment variables for registry host and DockerHub credentials
  • Authenticate with Aliyun registry and configure QEMU and Docker Buildx
  • Build and push multi-arch (AMD64 & ARM64) Docker images with GitHub Actions cache
.github/workflows/release-image-web.yml

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @konpure - I've reviewed your changes - here's some feedback:

  • Consider refactoring duplicated steps in release-image-api.yml and release-image-web.yml into a reusable workflow or using a matrix to reduce duplication.
  • The context: "{{defaultContext}}:api" syntax looks off—use the actual path (e.g. ./api) or ${{ github.workspace }}/api for the build context.
  • Instead of pushing separate arch-specific tags, use a single multi-platform buildx invocation to publish a manifest list so docker pull automatically selects the correct architecture.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- Consider refactoring duplicated steps in release-image-api.yml and release-image-web.yml into a reusable workflow or using a matrix to reduce duplication.
- The `context: "{{defaultContext}}:api"` syntax looks off—use the actual path (e.g. `./api`) or `${{ github.workspace }}/api` for the build context.
- Instead of pushing separate arch-specific tags, use a single multi-platform buildx invocation to publish a manifest list so docker pull automatically selects the correct architecture.

## Individual Comments

### Comment 1
<location> `.github/workflows/release-image-api.yml:11` </location>
<code_context>
+        required: true
+  push:
+    branches: [release-ci]
+  pull_request:
+    types: [closed]
+    branches: [release-ci]
+
+concurrency:
</code_context>

<issue_to_address>
Workflow triggers on pull_request closed may cause unnecessary builds.

To avoid unnecessary builds when a PR is closed without merging, add a condition to check if 'github.event.pull_request.merged == true' in your workflow job.

Suggested implementation:

```
jobs:
  # Only run jobs if the PR was merged (not just closed)
  # Add this 'if' condition to each job definition below, for example:
  # build:
  #   if: github.event.pull_request.merged == true

```

You must add `if: github.event.pull_request.merged == true` to the top level of each job definition in this workflow file. 
For example, if you have a job called `build:`, add the line directly under the job name:

build:
  if: github.event.pull_request.merged == true
  runs-on: ubuntu-latest
  ...

Repeat this for every job that should only run when the PR is merged.
</issue_to_address>

### Comment 2
<location> `.github/workflows/release-image-web.yml:11` </location>
<code_context>
+        required: true
+  push:
+    branches: [release-ci]
+  pull_request:
+    types: [closed]
+    branches: [release-ci]
+
+concurrency:
</code_context>

<issue_to_address>
Workflow triggers on pull_request closed may cause unnecessary builds.

Consider refining the trigger or adding a condition so builds only run when PRs are merged, not just closed.

Suggested implementation:

```
jobs:
  build-and-push:
    if: github.event_name != 'pull_request' || github.event.pull_request.merged == true

```

- If you already have a job defined (e.g., `build-and-push`), add the `if:` condition to that job instead of creating a new job block as above.
- If there are multiple jobs, apply the `if:` condition to each job that should only run when the PR is merged.
- Remove the extra indentation if you are not introducing a new job block.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

description: 'The tag to release'
required: true
push:
branches: [release-ci]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Workflow triggers on pull_request closed may cause unnecessary builds.

To avoid unnecessary builds when a PR is closed without merging, add a condition to check if 'github.event.pull_request.merged == true' in your workflow job.

Suggested implementation:

jobs:
  # Only run jobs if the PR was merged (not just closed)
  # Add this 'if' condition to each job definition below, for example:
  # build:
  #   if: github.event.pull_request.merged == true

You must add if: github.event.pull_request.merged == true to the top level of each job definition in this workflow file.
For example, if you have a job called build:, add the line directly under the job name:

build:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
...

Repeat this for every job that should only run when the PR is merged.

description: 'The tag to release'
required: true
push:
branches: [release-ci]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Workflow triggers on pull_request closed may cause unnecessary builds.

Consider refining the trigger or adding a condition so builds only run when PRs are merged, not just closed.

Suggested implementation:

jobs:
  build-and-push:
    if: github.event_name != 'pull_request' || github.event.pull_request.merged == true

  • If you already have a job defined (e.g., build-and-push), add the if: condition to that job instead of creating a new job block as above.
  • If there are multiple jobs, apply the if: condition to each job that should only run when the PR is merged.
  • Remove the extra indentation if you are not introducing a new job block.

@fuwx295
fuwx295 merged commit 043d3e5 into CloudDetail:release-ci Aug 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants