This file contains 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: Create and publish a Docker image | |
on: | |
push: | |
branches: ['main'] | |
workflow_dispatch: {} | |
env: | |
REGISTRY: ghcr.io | |
IMAGE_NAME: ${{ github.repository }} | |
jobs: | |
container-test: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up containers | |
run: | | |
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.12.1 | |
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.12.1 | |
until curl -s -XGET http://localhost:9200/; do | |
echo 'Waiting for Elasticsearch to be available...' | |
sleep 5 | |
done | |
docker build -t classifier_image . | |
docker run -t -d --name classifier-container --network host classifier_image | |
- name: Check if container runs properly | |
run: | | |
docker exec classifier-container bash /home/container_test/test_script.sh | |
- name: Clean up | |
run: | | |
docker stop classifier-container | |
docker rm classifier-container | |
docker stop elasticsearch | |
docker rm elasticsearch | |
build-and-push-image: | |
runs-on: ubuntu-latest | |
needs: container-test | |
permissions: | |
contents: read | |
packages: write | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Log in to the Container registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract metadata (tags, labels) for Docker | |
id: meta | |
uses: docker/metadata-action@v4 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
- name: Build and push Docker image | |
uses: docker/build-push-action@v3 | |
with: | |
context: . | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} |