Skip to content

chore: Move publishing artifacts jobs to pull-request-check.yaml work… #414

chore: Move publishing artifacts jobs to pull-request-check.yaml work…

chore: Move publishing artifacts jobs to pull-request-check.yaml work… #414

#
# Copyright (c) 2021-2025 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
name: Pull Request Check
# Trigger the workflow on pull request
on: [pull_request]
env:
PR_NUMBER: ${{ github.event.number }}
jobs:
check-artifacts-lock-yaml:
runs-on: ubuntu-22.04
steps:
- name: Checkout che-code source code
uses: actions/checkout@v4
- name: Generate artifacts.lock.yaml
run: ./build/artifacts/generate.sh
- name: Check if artifacts.lock.yaml is up to date
run: |
if [[ $(git diff --name-only | wc -l) != 0 ]]; then
# Print difference
git --no-pager diff
echo "[ERROR] artifacts.lock.yaml is not up to date."
echo "[ERROR] Run './build/artifacts/generate.sh' and include file into the commit."
exit 1
fi
build:
name: build
strategy:
fail-fast: false
matrix:
dist: ['libc-ubi8', 'libc-ubi9', 'musl']
runners: ['ubuntu-22.04', 'ubuntu-22.04-arm']
runs-on: ${{matrix.runners}}
steps:
- name: Set arch environment variable
run: |
if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then
echo arch="amd64" >> $GITHUB_ENV
else
echo arch="arm64" >> $GITHUB_ENV
fi
- name: Checkout che-code source code
uses: actions/checkout@v4
- name: Cleanup docker images
run: docker system prune -af
- name: Compile che-code
run: |
docker buildx build \
--platform linux/${{env.arch}} \
--progress=plain \
-f build/dockerfiles/linux-${{matrix.dist}}.Dockerfile \
-t linux-${{matrix.dist}}-${{env.arch}} .
- name: Display docker images
run: docker images
- name: Compress image to a file
run: docker save linux-${{matrix.dist}}-${{env.arch}} | gzip > linux-${{matrix.dist}}-${{env.arch}}.tgz
- name: Upload image artifact
uses: actions/upload-artifact@v4
with:
name: linux-${{matrix.dist}}-${{env.arch}}
path: linux-${{matrix.dist}}-${{env.arch}}.tgz
assemble:
name: assemble
needs: build
strategy:
fail-fast: false
matrix:
runners: ['ubuntu-22.04', 'ubuntu-22.04-arm']
runs-on: ${{matrix.runners}}
steps:
- name: Set arch environment variable
run: |
if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then
echo arch="amd64" >> $GITHUB_ENV
else
echo arch="arm64" >> $GITHUB_ENV
fi
- name: Checkout che-code source code
uses: actions/checkout@v4
- name: Cleanup docker images
run: docker system prune -af
- name: Download editor artifacts
uses: actions/download-artifact@v4
with:
pattern: linux-*
merge-multiple: true
path: .
- name: List downloaded files
run: ls -lah
- name: Load docker images
run: |
docker load -i linux-libc-ubi8-${{env.arch}}.tgz
docker load -i linux-libc-ubi9-${{env.arch}}.tgz
docker load -i linux-musl-${{env.arch}}.tgz
- name: Display docker images
run: docker images
- name: Update assembly.Dockerfile
run: |
sed "s|FROM linux-libc-ubi8|FROM linux-libc-ubi8-${{env.arch}}|" -i "build/dockerfiles/assembly.Dockerfile"
sed "s|FROM linux-libc-ubi9|FROM linux-libc-ubi9-${{env.arch}}|" -i "build/dockerfiles/assembly.Dockerfile"
sed "s|FROM linux-musl|FROM linux-musl-${{env.arch}}|" -i "build/dockerfiles/assembly.Dockerfile"
- name: Assemble che-code
run: |
docker buildx build \
--platform linux/${{env.arch}} \
--progress=plain \
-f build/dockerfiles/assembly.Dockerfile \
-t che-code-${{env.arch}} .
- name: Display docker images
run: docker images
- name: Compress image to a file
run: docker save che-code-${{env.arch}} | gzip > che-code-${{env.arch}}.tgz
- name: Upload image artifact
uses: actions/upload-artifact@v4
with:
name: che-code-${{env.arch}}
path: che-code-${{env.arch}}.tgz
dev:
name: build-che-dev-image
runs-on: ubuntu-22.04
steps:
- name: Checkout che-code source code
uses: actions/checkout@v4
- name: Cleanup docker images
run: |
docker system prune -af
- name: Build Che-Code Docker image
run: |
docker buildx build \
--platform linux/amd64 \
--progress=plain \
-f build/dockerfiles/dev.Dockerfile \
-t che-dev .
- name: Display docker images
run: |
docker images
- name: Compress che-dev image to a file
run: |
docker save che-dev | gzip > che-dev.tgz
- name: Upload che-dev docker image artifact
uses: actions/upload-artifact@v4
with:
name: che-dev
path: che-dev.tgz
publish-images:
name: publish image from the pull request
needs: [assemble, dev]
runs-on: ubuntu-22.04
steps:
- name: Checkout che-code source code
uses: actions/checkout@v4
- name: Cleanup docker images
run: |
docker system prune -af
- name: Download che-code docker image artifact
uses: actions/download-artifact@v4
with:
pattern: che-*
merge-multiple: true
path: .
- name: List downloaded files
run: |
ls -lahR
- name: Load Docker images
run: |
docker load -i che-code-amd64.tgz
docker load -i che-code-arm64.tgz
docker load -i che-dev.tgz
- name: Login to Quay.io
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAY_PULL_REQUESTS_USERNAME }}
password: ${{ secrets.QUAY_PULL_REQUESTS_PASSWORD }}
- name: Push che-code-amd64 docker image
run: |
export IMAGE=quay.io/che-incubator-pull-requests/che-code:pr-${{env.PR_NUMBER}}-amd64
docker tag che-code-amd64 ${IMAGE}
docker push ${IMAGE}
echo "_CHE_CODE_AMD64_IMAGE=${IMAGE}" >> $GITHUB_ENV
- name: Push che-code-arm64 docker image
run: |
export IMAGE=quay.io/che-incubator-pull-requests/che-code:pr-${{env.PR_NUMBER}}-arm64
docker tag che-code-arm64 ${IMAGE}
docker push ${IMAGE}
echo "_CHE_CODE_ARM64_IMAGE=${IMAGE}" >> $GITHUB_ENV
- name: Push che-dev docker image
run: |
export IMAGE=quay.io/che-incubator-pull-requests/che-code-dev:pr-${{env.PR_NUMBER}}-dev-amd64
docker tag che-dev ${IMAGE}
docker push ${IMAGE}
echo "_CHE_DEV_IMAGE=${IMAGE}" >> $GITHUB_ENV
- name: 'Comment PR'
uses: actions/github-script@v7
with:
script: |
const { repo: { owner, repo } } = context;
await github.rest.issues.createComment({
issue_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
body: `Pull Request images published ✨\n\nEditor amd64: [${process.env._CHE_CODE_AMD64_IMAGE}](https://${process.env._CHE_CODE_AMD64_IMAGE})\nEditor arm64: [${process.env._CHE_CODE_ARM64_IMAGE}](https://${process.env._CHE_CODE_ARM64_IMAGE})\nDev image: [${process.env._CHE_DEV_IMAGE}](https://${process.env._CHE_DEV_IMAGE})`
})