Development to main #18
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: Docker Image CI | |
on: | |
pull_request: | |
branches: | |
- main | |
- development | |
push: | |
branches: | |
- main | |
- development | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v1 | |
- uses: actions/setup-node@v1 | |
- name: Export release code | |
if: (success() || failure()) | |
id: releasecode #version number in a more comprehensible format: 0.1.YearMonthDay in UTC | |
run: | | |
export VERSION=$(grep APP_VERSION= .env | cut -d '=' -f2) | |
export RELEASE=$VERSION.$(date --utc +%y%m%d) | |
echo "RELEASE=$RELEASE" >> $GITHUB_ENV | |
echo "##[set-output name=releasename]$RELEASE" | |
- name: Setting APP_NAME | |
run: | | |
export NAME=$(grep APP_NAME= .env | cut -d '=' -f2) | |
echo "APP_NAME=$NAME" >> $GITHUB_ENV | |
- name: Print app name | |
run: echo "APP_NAME = $APP_NAME" | |
- name: Setting APP_ENV to dev | |
run: | | |
echo "APP_ENV=dev">> $GITHUB_ENV | |
echo "APP_BUILD=dev">> $GITHUB_ENV | |
echo "set APP_ENV to $APP_ENV" | |
- name: Setting APP_ENV to prod | |
if: contains( github.ref, 'main' ) || contains( github.base_ref, 'main' ) | |
run: | | |
echo "APP_ENV=latest">> $GITHUB_ENV | |
echo "APP_BUILD=latest">> $GITHUB_ENV | |
echo "set APP_ENV to $APP_ENV" | |
- name: Print definitive APP_ENV | |
run: echo "APP_ENV is now $APP_ENV and APP_BUILD is now $APP_BUILD" | |
- name: Build the Docker image | |
run: docker-compose build --build-arg APP_ENV=$APP_ENV --build-arg APP_BUILD=$APP_BUILD --build-arg APP_BUILD_ALL_FIXTURES=true | |
- name: Run the docker image | |
run: docker-compose up -d | |
- name: Taking some sleep (for containers to come up) | |
run: sleep 20 | |
- name: Check if all containers are running | |
run: docker ps | |
- name: Dumping the logs | |
run: docker-compose logs | |
- name: Show all images | |
run: docker images | |
- name: Login to Container Registry | |
id: containerregistry-login | |
run: | | |
if [ "${{ secrets.GITHUB_TOKEN }}" != "" ]; then | |
echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u $(cut -d'/' -f1 <<< $GITHUB_REPOSITORY) --password-stdin | |
echo "##[set-output name=success;]true" | |
else | |
echo "##[set-output name=success;]false" | |
fi | |
- if: steps.containerregistry-login.outputs.success == 'true' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/development') | |
name: Push to Container Registry | |
run: docker-compose push | |
- if: steps.containerregistry-login.outputs.success == 'true' && github.ref == 'refs/heads/main' | |
name: Push versioned containers to Container Registry | |
id: version-push | |
run: | | |
images=$(docker-compose images -q | xargs docker inspect --format='{{ index .RepoTags 0}}' | cut -d':' -f1 | grep $APP_NAME) | |
for image in $images | |
do | |
docker push "${image}":"${APP_BUILD}" | |
done | |
- name: Print release name | |
if: (success() || failure()) | |
run: echo $RELEASENAME | |
env: | |
RELEASENAME: ${{ steps.releasecode.outputs.releasename }} | |
- name: Create Release | |
if: contains( github.ref, 'main' ) && steps.version-push.outputs.success == 'true' && ( success() || failure() ) | |
id: create_release | |
uses: actions/create-release@v1 | |
continue-on-error: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token | |
with: | |
tag_name: ${{ steps.releasecode.outputs.releasename }} | |
release_name: ${{ steps.releasecode.outputs.releasename }} | |
draft: false | |
prerelease: false | |
- name: Chores | |
if: (success() || failure()) | |
run: docker-compose down |