test: add ConcurrentSyncInvoke test to reproduce invoke_curl data rac… #1035
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 Push Docker Image for Multiple Architectures | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - master | |
| - develop | |
| tags: | |
| - 'v*.*.*' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| DOCKER_REGISTRY: index.docker.io | |
| DOCKER_USERNAME: metacall | |
| IMAGE_NAME: core | |
| BUILDKIT_VERSION: 0.30.0 | |
| # TODO: Tests failing | |
| # - linux/s390x | |
| # - linux/ppc64le | |
| # TODO: Detour not supported, needs to patch GOT instead of PLT | |
| # - linux/mips64le | |
| # - linux/mips64 | |
| # TODO: Debian does not support all packages yet (i.e NodeJS) | |
| # - linux/loong64 | |
| PLATFORM_LIST: > | |
| [ | |
| "linux/amd64", | |
| "linux/amd64/v2", | |
| "linux/amd64/v3", | |
| "linux/386", | |
| "linux/arm64", | |
| "linux/riscv64", | |
| "linux/arm/v7", | |
| "linux/arm/v6" | |
| ] | |
| jobs: | |
| matrix: | |
| name: Generate Platform List | |
| runs-on: ubuntu-latest | |
| outputs: | |
| platform_list: ${{ steps.generate_platform_list.outputs.platform_list }} | |
| steps: | |
| - name: Generate platform list | |
| id: generate_platform_list | |
| run: | | |
| set -exuo pipefail | |
| PLATFORM_STRING=$(cat <<EOF | |
| ${{ env.PLATFORM_LIST }} | |
| EOF | |
| ) | |
| PLATFORM_LIST=$(echo $PLATFORM_STRING | jq -c .) | |
| echo "PLATFORM_LIST=$PLATFORM_LIST" >> $GITHUB_ENV | |
| echo "platform_list=$PLATFORM_LIST" >> $GITHUB_OUTPUT | |
| build: | |
| name: Build | |
| runs-on: ubuntu-latest | |
| needs: matrix | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platform: ${{ fromJSON(needs.matrix.outputs.platform_list) }} | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v6.0.1 | |
| with: | |
| fetch-depth: 0 | |
| - name: Docker Metadata | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }} | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker BuildX | |
| uses: docker/setup-buildx-action@v3 | |
| with: | |
| version: v${{ env.BUILDKIT_VERSION }} | |
| - name: Login to Docker Hub | |
| if: (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) && github.event_name != 'pull_request' | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Build MetaCall Docker Images (local) | |
| # Test in develop or pull requests | |
| if: github.ref == 'refs/heads/develop' || github.event_name == 'pull_request' | |
| env: | |
| METACALL_PLATFORM: ${{ matrix.platform }} | |
| DOCKER_BUILDKIT: 1 | |
| run: | | |
| ./docker-compose.sh platform | |
| - name: Build MetaCall Docker Images (registry) | |
| if: (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) && github.event_name != 'pull_request' | |
| env: | |
| METACALL_PLATFORM: ${{ matrix.platform }} | |
| DOCKER_BUILDKIT: 1 | |
| run: | | |
| ./docker-compose.sh bake | |
| - name: Run Tests | |
| if: (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) && github.event_name != 'pull_request' | |
| env: | |
| DOCKER_BUILDKIT: 1 | |
| run: | | |
| set -exuo pipefail | |
| image=${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}@sha256:$(basename .bake/digests/cli/*) | |
| docker pull --platform ${{ matrix.platform }} ${image} | |
| docker image inspect ${image} --format='{{.Os}}/{{.Architecture}}' | |
| cat <<EOF > Dockerfile.test | |
| FROM ${image} | |
| RUN apt-get update && apt-get install -y file | |
| RUN file /usr/local/bin/metacallcli && ldd /usr/local/bin/metacallcli | |
| RUN echo "console.log('0123456789abcdef')" > script.js | |
| RUN metacallcli script.js | tee output.txt | |
| RUN grep 0123456789abcdef output.txt | |
| EOF | |
| docker buildx build --progress=plain --platform ${{ matrix.platform }} -f Dockerfile.test -t metacall/core:test . | |
| - name: Sanitize platform name | |
| if: (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) && github.event_name != 'pull_request' | |
| shell: bash | |
| # Replaces all '/' with '-' using bash parameter expansion | |
| run: | | |
| PLATFORM_SAFE=${{ matrix.platform }} | |
| echo "PLATFORM_SAFE=${PLATFORM_SAFE//\//-}" >> $GITHUB_ENV | |
| - name: Upload digest | |
| if: (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) && github.event_name != 'pull_request' | |
| uses: actions/upload-artifact@v6.0.0 | |
| with: | |
| name: digests-${{ env.PLATFORM_SAFE }} | |
| path: .bake/digests/* | |
| if-no-files-found: error | |
| retention-days: 1 | |
| merge: | |
| name: Merge digests for the manifest | |
| # Only run when master or when tagging a version | |
| if: (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) && github.event_name != 'pull_request' | |
| needs: [matrix, build] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v6.0.1 | |
| with: | |
| fetch-depth: 0 | |
| - name: Download digests | |
| uses: actions/download-artifact@v7.0.0 | |
| with: | |
| path: .bake/digests/ | |
| pattern: digests-* | |
| merge-multiple: true | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| with: | |
| version: v${{ env.BUILDKIT_VERSION }} | |
| - name: Docker Metadata | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }} | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Create manifest list and push | |
| env: | |
| TAG_VERSION: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| run: | | |
| ./docker-compose.sh manifest |