Build and Release mgconsole #8
Workflow file for this run
This file contains hidden or 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: Build and Release mgconsole Docker Image | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: "Version of the Docker image to publish." | |
| required: true | |
| default: "0.0.1" | |
| force_release: | |
| description: "Force release even if the version already exists." | |
| type: boolean | |
| required: false | |
| default: false | |
| test-release: | |
| description: "Test the release by pushing to test repository" | |
| type: boolean | |
| required: false | |
| default: true | |
| env: | |
| S3_BUCKET: "${{ github.event.inputs.test-release == 'true' && 'deps.memgraph.io' || 'download.memgraph.com' }}" | |
| S3_BASE_PREFIX: "${{ github.event.inputs.test-release == 'true' && 'mgconsole-test' || 'mgconsole' }}/v${{ github.event.inputs.version }}" | |
| jobs: | |
| build-and-push: | |
| runs-on: ubuntu-latest | |
| env: | |
| DOCKER_ORGANIZATION_NAME: memgraph | |
| DOCKER_REPOSITORY_NAME: "${{ github.event.inputs.test-release == 'true' && 'mgconsole-test' || 'mgconsole' }}" | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v2 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v2 | |
| - name: Log in to Docker Hub | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Check if specified version is already pushed | |
| run: | | |
| EXISTS=$(docker manifest inspect ${{ env.DOCKER_ORGANIZATION_NAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:${{ github.event.inputs.version }} > /dev/null; echo $?) | |
| echo $EXISTS | |
| if [[ ${EXISTS} -eq 0 ]]; then | |
| echo 'The specified version has been already released to DockerHub.' | |
| if [[ ${{ github.event.inputs.force_release }} == 'true' ]]; then | |
| echo 'Forcing the release!' | |
| else | |
| echo 'Stopping the release!' | |
| exit 1 | |
| fi | |
| else | |
| echo 'All good, the specified version has not been released to DockerHub.' | |
| fi | |
| - name: Build and push Docker image | |
| uses: docker/build-push-action@v4 | |
| with: | |
| context: . | |
| push: true | |
| tags: | | |
| ${{ env.DOCKER_ORGANIZATION_NAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:${{ github.event.inputs.version }} | |
| ${{ env.DOCKER_ORGANIZATION_NAME }}/${{ env.DOCKER_REPOSITORY_NAME }}:latest | |
| platforms: linux/amd64,linux/arm64 | |
| - name: Verify Docker image | |
| run: | | |
| docker run --rm $DOCKER_ORGANIZATION_NAME/$DOCKER_REPOSITORY_NAME:${{ github.event.inputs.version }} --version | |
| build-binaries: | |
| name: Build binaries | |
| uses: ./.github/workflows/ci.yml | |
| upload-binaries: | |
| name: Upload binaries | |
| needs: [build-binaries, build-and-push] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - name: Login to AWS | |
| uses: aws-actions/configure-aws-credentials@f7b8181755fc1413cd909cbac860d8a76dc848f1 # v6.0.2 | |
| with: | |
| aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| aws-region: eu-west-1 | |
| - name: Download artifacts Linux X64 | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: "mgconsole static Linux build X64" | |
| path: linux-x86_64/mgconsole | |
| - name: Download artifacts Linux ARM64 | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: "mgconsole static Linux build ARM64" | |
| path: linux-aarch64/mgconsole | |
| - name: Download artifacts MacOS | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: "mgconsole MacOS build" | |
| path: macos/mgconsole | |
| - name: Download artifacts Windows | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: "mgconsole Windows build" | |
| path: windows/mgconsole.exe | |
| - name: Upload binaries to S3 | |
| env: | |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| run: | | |
| aws s3 cp linux-x86_64/mgconsole s3://${{ env.S3_BUCKET }}/${{ env.S3_BASE_PREFIX }}/linux-x86_64/mgconsole | |
| aws s3 cp linux-aarch64/mgconsole s3://${{ env.S3_BUCKET }}/${{ env.S3_BASE_PREFIX }}/linux-aarch64/mgconsole | |
| aws s3 cp macos/mgconsole s3://${{ env.S3_BUCKET }}/${{ env.S3_BASE_PREFIX }}/macos/mgconsole | |
| aws s3 cp windows/mgconsole.exe s3://${{ env.S3_BUCKET }}/${{ env.S3_BASE_PREFIX }}/windows/mgconsole.exe | |
| - name: Configure Git | |
| run: | | |
| git config user.name "github-actions" | |
| git config user.email "github-actions@github.com" | |
| - name: Set tag | |
| run: | | |
| TAG="v${{ github.event.inputs.version }}" | |
| echo "TAG=${TAG}" >> $GITHUB_ENV | |
| git tag $TAG | |
| git push origin $TAG | |
| - name: Create GitHub Release | |
| id: create_release | |
| uses: actions/create-release@0cb9c9b65d5d1901c1f53e5e66eaf4afd303e70e # v1.1.4 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: ${{ env.TAG }} | |
| release_name: "Release ${{ env.TAG }}" | |
| draft: true | |
| prerelease: false | |
| - name: Compress binaries | |
| run: | | |
| tar -czvf mgconsole-${{ env.TAG }}-linux-x86_64.tar.gz linux-x86_64/mgconsole | |
| tar -czvf mgconsole-${{ env.TAG }}-linux-aarch64.tar.gz linux-aarch64/mgconsole | |
| tar -czvf mgconsole-${{ env.TAG }}-macos.tar.gz macos/mgconsole | |
| tar -czvf mgconsole-${{ env.TAG }}-windows.tar.gz windows/mgconsole.exe | |
| - name: Upload binaries to Release Linux X64 | |
| uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ./mgconsole-${{ env.TAG }}-linux-x86_64.tar.gz | |
| asset_name: mgconsole-${{ env.TAG }}-linux-x86_64.tar.gz | |
| asset_content_type: application/octet-stream | |
| - name: Upload binaries to Release Linux ARM64 | |
| uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ./mgconsole-${{ env.TAG }}-linux-aarch64.tar.gz | |
| asset_name: mgconsole-${{ env.TAG }}-linux-aarch64.tar.gz | |
| asset_content_type: application/octet-stream | |
| - name: Upload binaries to Release MacOS | |
| uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ./mgconsole-${{ env.TAG }}-macos.tar.gz | |
| asset_name: mgconsole-${{ env.TAG }}-macos.tar.gz | |
| asset_content_type: application/octet-stream | |
| - name: Upload binaries to Release Windows | |
| uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ./mgconsole-${{ env.TAG }}-windows.tar.gz | |
| asset_name: mgconsole-${{ env.TAG }}-windows.tar.gz | |
| asset_content_type: application/octet-stream |