Skip to content

Merge pull request #19 from BouyguesTelecom/improve/dx-docker-compose #143

Merge pull request #19 from BouyguesTelecom/improve/dx-docker-compose

Merge pull request #19 from BouyguesTelecom/improve/dx-docker-compose #143

Workflow file for this run

name: CI Docker and Helm
on:
push:
branches:
- main
env:
IMAGE_NAME: bouyguestelecom/tada
CHART_PATH: ./opensource
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install bru (Bruno)
run: |
npm install -g @usebruno/cli
- name: Run docker-compose
uses: hoverkraft-tech/[email protected]
with:
compose-file: "./docker-compose.yml"
- name: Copy tmp/images for tests
run: |
cp -r local/images /tmp/images
continue-on-error: false
- name: Run Tests
run: |
cd ${{ github.workspace }}/tests
bru run flows/ --env LOCAL -r --bail
continue-on-error: false
- name: Report test results
if: failure()
run: echo "Tests failed."
determine-version:
runs-on: ubuntu-latest
needs: tests
outputs:
new_version: ${{ steps.set_output.outputs.new_version }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Get the latest tag
id: get_latest_tag
run: |
git fetch --tags
latest_tag=$(git tag -l --sort=-v:refname | head -n 1)
if [ -z "$latest_tag" ]; then
latest_tag="0.0.0"
fi
echo "Latest tag: $latest_tag"
echo "tag=$latest_tag" >> $GITHUB_ENV
- name: Determine next version
id: set_output
run: |
latest_tag=${{ env.tag }}
echo "Latest tag: $latest_tag"
IFS='.' read -r -a version_parts <<< "$latest_tag"
major=${version_parts[0]}
minor=${version_parts[1]}
patch=${version_parts[2]}
if [[ "${{ github.event.head_commit.message }}" == *"major"* ]]; then
major=$((major + 1))
minor=0
patch=0
elif [[ "${{ github.event.head_commit.message }}" == *"minor"* ]]; then
minor=$((minor + 1))
patch=0
else
patch=$((patch + 1))
branch_name=$(echo "${{ github.ref }}" | sed 's/refs\/heads\///' | sed 's/\//-/g')
new_version="$major.$minor.$patch-${branch_name}"
fi
while git rev-parse "refs/tags/$new_version" >/dev/null 2>&1; do
patch=$((patch + 1))
new_version="$major.$minor.$patch-${branch_name}"
done
echo "New version: $new_version"
echo "new_version=$new_version" >> $GITHUB_ENV
echo "new_version=$new_version" >> $GITHUB_OUTPUT
- name: Create and push new tag
run: |
git config --global user.name 'github-actions'
git config --global user.email '[email protected]'
git tag ${{ steps.set_output.outputs.new_version }}
git push origin ${{ steps.set_output.outputs.new_version }}
build-and-push-docker-api:
runs-on: ubuntu-latest
needs: determine-version
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Cache npm dependencies for API
uses: actions/cache@v3
with:
path: src/api/node_modules
key: ${{ runner.os }}-api-node-modules-${{ hashFiles('src/api/package-lock.json') }}
restore-keys: |
${{ runner.os }}-api-node-modules-
- name: Install npm dependencies for API
working-directory: src/api
run: npm install
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
install: true
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ hashFiles('src/api/Dockerfile', 'src/api/.dockerignore') }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-${{ hashFiles('src/api/Dockerfile', 'src/api/.dockerignore') }}-
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image API
run: |
new_version=${{ needs.determine-version.outputs.new_version }}
echo "Docker api with version $new_version"
docker buildx build --platform linux/amd64,linux/arm64 --push -t ${{ env.IMAGE_NAME }}:api-${new_version} --cache-from=type=local,src=/tmp/.buildx-cache --cache-to=type=local,dest=/tmp/.buildx-cache,mode=max ./src/api
build-and-push-docker-job:
runs-on: ubuntu-latest
needs: determine-version
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
install: true
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ hashFiles('src/Dockerfile', 'src/.dockerignore') }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-${{ hashFiles('src/Dockerfile', 'src/.dockerignore') }}-
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image Job
run: |
new_version=${{ needs.determine-version.outputs.new_version }}
docker buildx build --platform linux/amd64,linux/arm64 --push -t ${{ env.IMAGE_NAME }}:job-${new_version} --cache-from=type=local,src=/tmp/.buildx-cache --cache-to=type=local,dest=/tmp/.buildx-cache,mode=max ./src
publish-helm-chart:
runs-on: ubuntu-latest
needs:
- determine-version
- build-and-push-docker-api
- build-and-push-docker-job
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_CHART_USERNAME }}
password: ${{ secrets.DOCKER_CHART_PASSWORD }}
- name: Install Helm
uses: azure/setup-helm@v3
with:
version: v3.11.1
- name: Package Helm chart
run: |
helm package opensource --version "${{ needs.determine-version.outputs.new_version }}"
- name: Push Helm chart to Docker Hub
run: |
helm push $(ls *.tgz) oci://registry-1.docker.io/bouyguestelecomcharts