Skip to content

Merge pull request #80 from oracle-quickstart/cart-to-micronaut-4 #240

Merge pull request #80 from oracle-quickstart/cart-to-micronaut-4

Merge pull request #80 from oracle-quickstart/cart-to-micronaut-4 #240

Workflow file for this run

name: Java CI
on:
push:
branches:
- main
pull_request:
branches:
- main
env:
JAVA: '21'
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
project-path: [
'api',
'carts',
'catalogue',
'events',
'fulfillment',
'functions/newsletter-subscription',
'orders',
'payment',
'user',
'assets'
]
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2.1.4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Setup GraalVM
uses: graalvm/setup-graalvm@v1.1.2
with:
distribution: 'graalvm'
java-version: ${{ env.JAVA }}
- name: Build and test
working-directory: src/${{ matrix.project-path }}
run: |
if [ -f "mvnw" ]; then
./mvnw test --no-transfer-progress
elif [ -f "gradlew" ]; then
./gradlew check --no-daemon --continue
fi
env:
TESTCONTAINERS_RYUK_DISABLED: true
build-docker-compose-test-images:
if: success()
needs: build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
project-path: [
'api',
'carts',
'catalogue',
'fulfillment',
'orders',
'payment',
'user',
'assets'
]
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2.1.4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Setup GraalVM
uses: graalvm/setup-graalvm@v1.1.22
with:
distribution: 'graalvm'
java-version: ${{ env.JAVA }}
- name: Login to OCIR
uses: docker/login-action@v1
with:
registry: phx.ocir.io
username: ${{ secrets.OCI_USERNAME }}
password: ${{ secrets.OCI_TOKEN }}
#
# Build GraalVM docker image with SHA as tag for later use in docker-compose test job
- name: Build docker & push image - GraalVM
working-directory: src/${{ matrix.project-path }}
run: |
if [ -f "mvnw" ]; then
# Install only the `lib` module to the local repository so it can be used for building the `app` image
./mvnw install -Drevision=$GITHUB_SHA -pl -app,-aws,-oci
./mvnw deploy -Dpackaging=docker -Djib.from.image=ghcr.io/graalvm/native-image-community:21 -Ddocker.image.suffix=graalvm -Drevision=$GITHUB_SHA --no-transfer-progress -pl app
elif [ -f "gradlew" ]; then
./gradlew :app:dockerPush -Pversion=$GITHUB_SHA --no-daemon
fi
docker-compose-test:
if: success()
needs: build-docker-compose-test-images
runs-on: self-hosted
steps:
- uses: actions/checkout@v2
- name: Login to OCIR
uses: docker/login-action@v1
with:
registry: phx.ocir.io
username: ${{ secrets.OCI_USERNAME }}
password: ${{ secrets.OCI_TOKEN }}
logout: false
- name: Setup stack
working-directory: deploy/complete/docker-compose
run: |
#
# Configure higher timeouts
export DOCKER_CLIENT_TIMEOUT=120
export COMPOSE_HTTP_TIMEOUT=120
#
# Generate override docker compose so we use latest build docker images
grep -B 1 -e "services:" -e 'graalvm' docker-compose.yml | sed -E "s/(.*):(.*):(.*)/\1:\2:$GITHUB_SHA/g" | grep -v -e '--' > docker-compose.override.yml
cat docker-compose.override.yml
docker-compose pull
docker-compose up -d --renew-anon-volumes --force-recreate --remove-orphans
docker-compose ps
#
# wait 10 seconds to let the containers initalize
sleep 10
docker-compose logs
- name: Run test
working-directory: src/load
run: |
docker build -t mushop/load:latest .
docker run --net=host mushop/load:latest -h localhost:81 -c 5 -r 60
- name: Cleanup stack
if: ${{ always() }}
working-directory: deploy/complete/docker-compose
run: |
docker-compose down -t 300
docker volume prune -f
docker image prune -f
push-docker-images:
if: success() && github.event_name == 'push'
needs: docker-compose-test
runs-on: self-hosted
strategy:
fail-fast: false
matrix:
project-path: [
'api',
'carts',
'catalogue',
'events',
'fulfillment',
'functions/newsletter-subscription',
'orders',
'payment',
'user',
'assets'
]
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2.1.4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Setup GraalVM
uses: graalvm/setup-graalvm@v1.1.22
with:
distribution: 'graalvm'
java-version: ${{ env.JAVA }}
- name: Login to OCIR
uses: docker/login-action@v1
with:
registry: phx.ocir.io
username: ${{ secrets.OCI_USERNAME }}
password: ${{ secrets.OCI_TOKEN }}
logout: false
- name: Push docker image - GraalVM Native Image
working-directory: src/${{ matrix.project-path }}
run: |
if [ -f "mvnw" ]; then
# Install only the `lib` module to the local repository so it can be used for building `app`, `aws` and `oci` GraalVM images
./mvnw install -pl -app,-aws,-oci
# Build and deploy `app`, `aws` and `oci` GraalVM images
./mvnw deploy -Dpackaging=docker -Djib.from.image=phx.ocir.io/oraclelabs/micronaut-showcase/mushop/base/native-image-community:21 -Ddocker.image.suffix=graalvm --no-transfer-progress -pl app
./mvnw deploy -Dpackaging=docker -Djib.from.image=phx.ocir.io/oraclelabs/micronaut-showcase/mushop/base/native-image-community:21 -Ddocker.image.suffix=graalvm --no-transfer-progress -pl aws
./mvnw deploy -Dpackaging=docker -Djib.from.image=phx.ocir.io/oraclelabs/micronaut-showcase/mushop/base/native-image-community:21 -Ddocker.image.suffix=graalvm --no-transfer-progress -pl oci
elif [ -f "gradlew" ]; then
./gradlew dockerPush --no-daemon
fi
- name: Cleanup images
if: ${{ always() }}
run: docker image prune -a -f