diff --git a/.github/actions/docker-build-and-push/action.yml b/.github/actions/docker-build-and-push/action.yml new file mode 100644 index 0000000..c6a4c31 --- /dev/null +++ b/.github/actions/docker-build-and-push/action.yml @@ -0,0 +1,86 @@ +name: 'docker-build-and-push' +description: 'Docker build and push' +inputs: + base-dir: + description: 'Base directory' + required: false + default: './services' + service-name: + description: 'Service name' + required: true + repository-name: + description: 'Override the repository name' + required: false + default: '' +outputs: + registry: + description: "Registry" + value: ${{ steps.login-ecr.outputs.registry }} + service-name: + description: "Service name" + value: ${{ steps.docker-build-and-push-config.outputs.service-name }} + repository-name: + description: "Repository name" + value: ${{ steps.docker-build-and-push-config.outputs.repository-name }} + branch-name: + description: "Branch name" + value: ${{ steps.branch-specific-config.outputs.branch-name }} + image-rev: + description: "Docker image revision" + value: ${{ steps.branch-specific-config.outputs.image-rev }} + tf-workingdir: + description: "Terraform working directory" + value: ${{ steps.branch-specific-config.outputs.tf-workingdir }} + tf-lockfile: + description: "Terraform lockfile" + value: ${{ steps.branch-specific-config.outputs.tf-lockfile }} + docker-load: + description: "Docker load" + value: ${{ steps.branch-specific-config.outputs.docker-load }} + docker-push: + description: "Docker push" + value: ${{ steps.branch-specific-config.outputs.docker-push }} + manifests-dir: + description: "Manifests directory for the environment" + value: ${{ steps.branch-specific-config.outputs.manifests-dir }} + digest: + description: "Digest for the Docker repository image" + value: ${{ steps.docker-build-and-push.outputs.digest }} + repository-url: + description: "Repository URL for the Docker repository image" + value: ${{ steps.login-ecr.outputs.registry }}/${{ steps.docker-build-and-push-config.outputs.repository-name }} + +runs: + using: "composite" + steps: + - name: Docker Build and Push Config + id: docker-build-and-push-config + run: | + set -euxo pipefail + + SERVICE_NAME="${{ inputs.service-name }}" + SERVICE_NAME_SANITIZED="${SERVICE_NAME//_/-}" + + REPOSITORY_NAME="${{ inputs.repository-name }}" + if [ -z "$REPOSITORY_NAME" ]; then + REPOSITORY_NAME="${SERVICE_NAME_SANITIZED}" + fi + + echo "::set-output name=service-name::$(echo $SERVICE_NAME_SANITIZED)" + echo "::set-output name=repository-name::$(echo $REPOSITORY_NAME)" + shell: bash + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + - name: Branch specific config + uses: ./.github/actions/branch-specific-config + id: branch-specific-config + - uses: docker/setup-buildx-action@v1 + - name: Build and push image + id: docker-build-and-push + uses: docker/build-push-action@v2 + with: + context: ${{ inputs.base-dir }}/${{ inputs.service-name }} + load: ${{ steps.branch-specific-config.outputs.docker-load }} + push: ${{ steps.branch-specific-config.outputs.docker-push }} + tags: ${{ steps.login-ecr.outputs.registry }}/${{ steps.docker-build-and-push-config.outputs.repository-name }}:${{ steps.branch-specific-config.outputs.image-rev }} \ No newline at end of file