mirror of
https://github.com/Unstructured-IO/unstructured.git
synced 2025-12-31 09:17:17 +00:00
* Fix missing HF_TOKEN when running containerized test for the build process * Fix pytest args when running specific test ## Testing Example run of the HF_TOKEN assgned for the containerized test in the build process: https://github.com/Unstructured-IO/unstructured/actions/runs/6504556437/job/17666669155 Example run of the pytest args working for the arm test (ran in a new workflow for testing on push): https://github.com/Unstructured-IO/unstructured/actions/runs/6504213010
114 lines
4.8 KiB
YAML
114 lines
4.8 KiB
YAML
name: Build And Push Docker Image
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
env:
|
|
DOCKER_REPOSITORY: quay.io/unstructured-io/unstructured
|
|
DOCKER_BUILD_REPOSITORY: quay.io/unstructured-io/build-unstructured
|
|
PIP_VERSION: "23.2.1"
|
|
PYTHON_VERSION: "3.8"
|
|
|
|
jobs:
|
|
set-short-sha:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
short_sha: ${{ steps.set_short_sha.outputs.short_sha }}
|
|
steps:
|
|
- name: Set Short SHA
|
|
id: set_short_sha
|
|
run: echo "short_sha=$(echo ${{ github.sha }} | cut -c1-7)" >> $GITHUB_OUTPUT
|
|
|
|
build-images:
|
|
strategy:
|
|
matrix:
|
|
docker-platform: ["linux/arm64", "linux/amd64"]
|
|
runs-on: ubuntu-latest
|
|
needs: set-short-sha
|
|
env:
|
|
SHORT_SHA: ${{ needs.set-short-sha.outputs.short_sha }}
|
|
steps:
|
|
- name: Set up Docker
|
|
# Use the `docker` driver for AMD builds because the `docker-container` driver may fail to locally load the built image.
|
|
# This could be due to the larger size of the AMD build and the `docker-container` driver needing to load the tarball.
|
|
# Use the `docker-container` driver for ARM builds because it may otherwise intermittently fail with: `exec /bin/sh: exec format error`
|
|
uses: docker/setup-buildx-action@v1
|
|
with:
|
|
driver: ${{ matrix.docker-platform == 'linux/amd64' && 'docker' || 'docker-container' }}
|
|
- name: Checkout code
|
|
uses: actions/checkout@v3
|
|
- name: Login to Quay.io
|
|
uses: docker/login-action@v2
|
|
with:
|
|
registry: quay.io
|
|
username: ${{ secrets.QUAY_IO_ROBOT_USERNAME }}
|
|
password: ${{ secrets.QUAY_IO_ROBOT_TOKEN }}
|
|
- name: Build images
|
|
run: |
|
|
ARCH=$(cut -d "/" -f2 <<< ${{ matrix.docker-platform }})
|
|
DOCKER_BUILDKIT=1 docker buildx build --platform=$ARCH --load \
|
|
--build-arg PIP_VERSION=$PIP_VERSION \
|
|
--build-arg BUILDKIT_INLINE_CACHE=1 \
|
|
--progress plain \
|
|
--cache-from $DOCKER_BUILD_REPOSITORY:$ARCH \
|
|
-t $DOCKER_BUILD_REPOSITORY:$ARCH-$SHORT_SHA .
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
- name: Test images
|
|
run: |
|
|
echo "UNS_API_KEY=${{ secrets.UNS_API_KEY }}" > uns_test_env_file
|
|
echo "UNSTRUCTURED_HF_TOKEN=${{ secrets.HF_TOKEN }}" > uns_test_env_file
|
|
ARCH=$(cut -d "/" -f2 <<< ${{ matrix.docker-platform }})
|
|
if [ "$ARCH" = "amd64" ]; then
|
|
DOCKER_PLATFORM="${{ matrix.docker-platform }}" DOCKER_IMAGE="$DOCKER_BUILD_REPOSITORY:$ARCH-$SHORT_SHA" \
|
|
make docker-test CI=true
|
|
else
|
|
DOCKER_PLATFORM="${{ matrix.docker-platform }}" DOCKER_IMAGE="$DOCKER_BUILD_REPOSITORY:$ARCH-$SHORT_SHA" \
|
|
make docker-test CI=true TEST_FILE=test_unstructured/partition/test_text.py
|
|
fi
|
|
DOCKER_IMAGE=$DOCKER_BUILD_REPOSITORY:$ARCH-$SHORT_SHA make docker-smoke-test
|
|
- name: Push images
|
|
run: |
|
|
# write to the build repository to cache for the publish-images job
|
|
ARCH=$(cut -d "/" -f2 <<< ${{ matrix.docker-platform }})
|
|
docker push "$DOCKER_BUILD_REPOSITORY:$ARCH-$SHORT_SHA"
|
|
publish-images:
|
|
runs-on: ubuntu-latest
|
|
needs: [set-short-sha, build-images]
|
|
env:
|
|
SHORT_SHA: ${{ needs.set-short-sha.outputs.short_sha }}
|
|
steps:
|
|
- uses: docker/setup-buildx-action@v1
|
|
- name: Checkout code
|
|
uses: actions/checkout@v3
|
|
- name: Login to Quay.io
|
|
uses: docker/login-action@v1
|
|
with:
|
|
registry: quay.io
|
|
username: ${{ secrets.QUAY_IO_ROBOT_USERNAME }}
|
|
password: ${{ secrets.QUAY_IO_ROBOT_TOKEN }}
|
|
- name: Pull AMD image
|
|
run: |
|
|
docker pull $DOCKER_BUILD_REPOSITORY:amd64-$SHORT_SHA
|
|
- name: Pull ARM image
|
|
run: |
|
|
docker pull $DOCKER_BUILD_REPOSITORY:arm64-$SHORT_SHA
|
|
- name: Push latest build tags for AMD and ARM
|
|
run: |
|
|
# these are used to construct the final manifest but also cache-from in subsequent runs
|
|
docker tag $DOCKER_BUILD_REPOSITORY:amd64-$SHORT_SHA $DOCKER_BUILD_REPOSITORY:amd64
|
|
docker push $DOCKER_BUILD_REPOSITORY:amd64
|
|
docker tag $DOCKER_BUILD_REPOSITORY:arm64-$SHORT_SHA $DOCKER_BUILD_REPOSITORY:arm64
|
|
docker push $DOCKER_BUILD_REPOSITORY:arm64
|
|
- name: Push multiarch manifest
|
|
run: |
|
|
docker manifest create ${DOCKER_REPOSITORY}:latest $DOCKER_BUILD_REPOSITORY:amd64 $DOCKER_BUILD_REPOSITORY:arm64
|
|
docker manifest push $DOCKER_REPOSITORY:latest
|
|
docker manifest create ${DOCKER_REPOSITORY}:$SHORT_SHA $DOCKER_BUILD_REPOSITORY:amd64 $DOCKER_BUILD_REPOSITORY:arm64
|
|
docker manifest push $DOCKER_REPOSITORY:$SHORT_SHA
|
|
VERSION=$(grep -Po '(?<=__version__ = ")[^"]*' unstructured/__version__.py)
|
|
docker manifest create ${DOCKER_REPOSITORY}:$VERSION $DOCKER_BUILD_REPOSITORY:amd64 $DOCKER_BUILD_REPOSITORY:arm64
|
|
docker manifest push $DOCKER_REPOSITORY:$VERSION
|