From 66b9ad098b50e638c8277b0d37888fc26d262bdb Mon Sep 17 00:00:00 2001 From: conache Date: Wed, 13 Mar 2024 20:19:40 +0200 Subject: [PATCH] Add github workflow for pushing to dockerhub --- .github/workflows/build_push_docker_hub.yml | 72 +++++++++++++++++++++ .github/workflows/build_push_ecr.yml | 39 ++++++----- 2 files changed, 90 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/build_push_docker_hub.yml diff --git a/.github/workflows/build_push_docker_hub.yml b/.github/workflows/build_push_docker_hub.yml new file mode 100644 index 0000000..907a31a --- /dev/null +++ b/.github/workflows/build_push_docker_hub.yml @@ -0,0 +1,72 @@ +# This workflow will build and push a new container image to Docker Hub +name: Build and Push docker image to Docker Hub + +on: + push: + branch: + - main + tags: + - 'v*' + - dev-latest + +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true +jobs: + build-push: + name: Build and Push docker image + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Build, tag, and push image to Docker Hub + id: build-push-image + env: + DOCKERHUB_USERNAME: alloranetwork + DOCKERHUB_REPOSITORY: ${{github.event.repository.name}} # Naming convention: ECR registry name == GITHUB repo name + run: | + #! Due to we trigger on push.tags GITHUB_REF - is the tag name + GIT_TAG="$(echo $GITHUB_REF| sed 's#refs/tags/##')" + + IMAGE_TAG="${GITHUB_SHA:0:8}" + EXTRA_IMAGE_TAGS=$GIT_TAG + + #! Add latest tag only if on named releases tag='v*' + if [[ ${GIT_TAG} == v* ]]; then + EXTRA_IMAGE_TAGS="${EXTRA_IMAGE_TAGS};latest" + fi + + appsToBuild=("node") + + for app in "${appsToBuild[@]}"; do + + echo "Building docker image from $app folder" + + DOCKERHUB_REPOSITORY="${DOCKERHUB_REPOSITORY}" + if [ "$app" != "." ]; then + DOCKERHUB_REPOSITORY="${DOCKERHUB_REPOSITORY}-${app}" + fi + + if [ -f $app/Dockerfile ]; then + docker build --pull -t $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$IMAGE_TAG $app + else + echo 'No Dockerfile in $app folder, skipping.' + continue + fi + + docker push $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$IMAGE_TAG + + # Build and PUSH additional tags + for tag in $(echo $EXTRA_IMAGE_TAGS| tr ";" "\n"); do + docker tag $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$IMAGE_TAG $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$tag + docker push $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$tag + done + done diff --git a/.github/workflows/build_push_ecr.yml b/.github/workflows/build_push_ecr.yml index e8cc233..0e49603 100644 --- a/.github/workflows/build_push_ecr.yml +++ b/.github/workflows/build_push_ecr.yml @@ -1,9 +1,11 @@ -# This workflow will build and push a new container image to Amazon ECR, -# and then will deploy a new task definition to Amazon ECS which will be run by Fargate when a release is created -name: Build and Push docker image to ECR +# This workflow will build and push a new container image to Docker Hub +name: Build and Push docker image to Docker Hub on: push: + # todo: remove + branch: + - feat/gh-workflow-for-dh-push tags: - 'v*' - dev-latest @@ -20,22 +22,17 @@ jobs: - name: Checkout uses: actions/checkout@v3 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v2 + - name: Login to Docker Hub + uses: docker/login-action@v1 with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} - - name: Login to Amazon ECR - id: login-ecr - uses: aws-actions/amazon-ecr-login@v1 - - - name: Build, tag, and push image to Amazon ECR + - name: Build, tag, and push image to Docker Hub id: build-push-image env: - ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} - ECR_REPOSITORY: ${{github.event.repository.name}} # Naming convention: ECR registry name == GITHUB repo name + DOCKERHUB_USERNAME: alloranetwork + DOCKERHUB_REPOSITORY: ${{github.event.repository.name}} # Naming convention: ECR registry name == GITHUB repo name run: | #! Due to we trigger on push.tags GITHUB_REF - is the tag name GIT_TAG="$(echo $GITHUB_REF| sed 's#refs/tags/##')" @@ -54,23 +51,23 @@ jobs: echo "Building docker image from $app folder" - APP_ECR_REPOSITORY="${ECR_REPOSITORY}" + DOCKERHUB_REPOSITORY="${DOCKERHUB_REPOSITORY}" if [ "$app" != "." ]; then - APP_ECR_REPOSITORY="${ECR_REPOSITORY}-${app}" + DOCKERHUB_REPOSITORY="${DOCKERHUB_REPOSITORY}-${app}" fi if [ -f $app/Dockerfile ]; then - docker build --pull -t $ECR_REGISTRY/$APP_ECR_REPOSITORY:$IMAGE_TAG $app + docker build --pull -t $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$IMAGE_TAG $app else echo 'No Dockerfile in $app folder, skipping.' continue fi - docker push $ECR_REGISTRY/$APP_ECR_REPOSITORY:$IMAGE_TAG + docker push $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$IMAGE_TAG # Build and PUSH additional tags for tag in $(echo $EXTRA_IMAGE_TAGS| tr ";" "\n"); do - docker tag $ECR_REGISTRY/$APP_ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$APP_ECR_REPOSITORY:$tag - docker push $ECR_REGISTRY/$APP_ECR_REPOSITORY:$tag + docker tag $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$IMAGE_TAG $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$tag + docker push $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$tag done done