From a7405be4e1b864096854a0a15bdf43a3e0d7bd0a Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 5 Dec 2022 21:00:16 +0100 Subject: [PATCH] Gha (#946) * Typings for editor SDK. * Multiplatform build. * Remove old port. * Test something. * Gha build. * No set output. * Shared concurrency. * Remove old step. * Improve versions. --- .github/workflows/dev.yml | 116 ++++++++++------------------ .github/workflows/release.yml | 141 +++++++++++++++------------------- Dockerfile | 9 ++- 3 files changed, 105 insertions(+), 161 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 45029b267..8832f9ca4 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -1,5 +1,5 @@ name: Dev -concurrency: dev +concurrency: build on: push: @@ -16,94 +16,59 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v3.1.0 - name: Inject slug/short variables uses: rlespinasse/github-slug-action@v4.3.2 - - name: Calculate Version - env: - BUILD_NUMBER: ${{ github.run_number }} - run: | - echo "BUILD_NUMBER=$(($BUILD_NUMBER + 6000))" >> $GITHUB_ENV - - name: Set up QEMU uses: docker/setup-qemu-action@v2.1.0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2.2.1 - - name: Cache Docker layers - uses: actions/cache@v3.0.11 + - name: Login to Docker Hub + uses: docker/login-action@v2.1.0 with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-buildx- + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - name: BUILD uses: docker/build-push-action@v3.2.0 with: - push: false - load: true - build-args: "SQUIDEX__VERSION=5.0.0-dev-${{ env.BUILD_NUMBER }}" - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache-new - tags: squidex-tmp - - - name: Export Image - run: docker save squidex-tmp | gzip > squidex-tmp.tar.gz - - - name: Save Image to Cache - uses: actions/cache@v3.0.11 - with: - path: squidex-tmp.tar.gz - key: squidex-dev-image-${{ github.sha }} - - - name: Move cache - run: | - rm -rf /tmp/.buildx-cache - mv /tmp/.buildx-cache-new /tmp/.buildx-cache + push: true + build-args: "SQUIDEX__RUNTIME__VERSION=7.0.0-dev-${{ env.BUILD_NUMBER }}" + cache-from: type=gha + cache-to: type=gha,mode=max + tags: squidex/squidex-build test: needs: build runs-on: ubuntu-latest steps: - - name: Calculate Version - env: - BUILD_NUMBER: ${{ github.run_number }} - run: | - echo "BUILD_NUMBER=$(($BUILD_NUMBER + 6000))" >> $GITHUB_ENV - - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v3.1.0 - name: Inject slug/short variables uses: rlespinasse/github-slug-action@v4.3.2 - - - name: Get Image From Cache - uses: actions/cache@v3.0.11 - with: - path: squidex-tmp.tar.gz - key: squidex-dev-image-${{ github.sha }} - - - name: Load Image - run: docker load < squidex-tmp.tar.gz + + - name: Pull from Cache + run: docker pull squidex/squidex-build - name: Replace Image Name1 uses: mikefarah/yq@v4.28.2 with: - cmd: yq e '.services.squidex1.image = "squidex-tmp"' -i backend/tests/docker-compose.yml + cmd: yq e '.services.squidex1.image = "squidex/squidex-build"' -i backend/tests/docker-compose.yml - name: Replace Image Name2 uses: mikefarah/yq@v4.28.2 with: - cmd: yq e '.services.squidex2.image = "squidex-tmp"' -i backend/tests/docker-compose.yml + cmd: yq e '.services.squidex2.image = "squidex/squidex-build"' -i backend/tests/docker-compose.yml - name: Replace Image Name3 uses: mikefarah/yq@v4.28.2 with: - cmd: yq e '.services.squidex3.image = "squidex-tmp"' -i backend/tests/docker-compose.yml + cmd: yq e '.services.squidex3.image = "squidex/squidex-build"' -i backend/tests/docker-compose.yml - name: Start Test run: docker-compose up -d @@ -166,42 +131,39 @@ jobs: publish: needs: test runs-on: ubuntu-latest + if: github.event_name != 'pull_request' steps: + - name: Checkout + uses: actions/checkout@v3.1.0 + + - name: Inject slug/short variables + uses: rlespinasse/github-slug-action@v4.3.2 + - name: Calculate Version env: BUILD_NUMBER: ${{ github.run_number }} run: | echo "BUILD_NUMBER=$(($BUILD_NUMBER + 6000))" >> $GITHUB_ENV - - name: Inject slug/short variables - uses: rlespinasse/github-slug-action@v4.3.2 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2.1.0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2.2.1 - name: Login to Docker Hub uses: docker/login-action@v2.1.0 - if: github.event_name != 'pull_request' with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - - name: Get Image From Cache - if: github.event_name != 'pull_request' - uses: actions/cache@v3.0.11 + - name: BUILD + uses: docker/build-push-action@v3.2.0 with: - path: squidex-tmp.tar.gz - key: squidex-dev-image-${{ github.sha }} - - - name: Load Image - if: github.event_name != 'pull_request' - run: docker load < squidex-tmp.tar.gz - - - name: Rename Tags - if: github.event_name != 'pull_request' - run: | - docker tag squidex-tmp squidex/squidex:dev - docker tag squidex-tmp squidex/squidex:dev-${{ env.BUILD_NUMBER }} - - - name: Push Tags - if: github.event_name != 'pull_request' - run: | - docker push squidex/squidex:dev - docker push squidex/squidex:dev-${{ env.BUILD_NUMBER }} + push: true + build-args: "SQUIDEX__RUNTIME__VERSION=7.0.0-dev-${{ env.BUILD_NUMBER }}" + cache-from: type=gha + cache-to: type=gha,mode=max + tags: | + squidex/squidex:dev + squidex/squidex:dev-${{ env.BUILD_NUMBER }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5bee6fcc6..cb9ff8a6d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,5 +1,5 @@ name: Release -concurrency: release +concurrency: build on: push: @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v3.1.0 - name: Inject slug/short variables uses: rlespinasse/github-slug-action@v4.3.2 @@ -22,71 +22,48 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2.2.1 - - name: Cache Docker layers - uses: actions/cache@v3.0.11 + - name: Login to Docker Hub + uses: docker/login-action@v2.1.0 with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-buildx- + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - name: BUILD uses: docker/build-push-action@v3.2.0 with: - push: false - load: true - tags: squidex-tmp - build-args: "SQUIDEX__VERSION=${{ env.GITHUB_REF_SLUG }}" - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache-new - - - name: Export Image - run: docker save squidex-tmp | gzip > squidex-tmp.tar.gz - - - name: Save Image to Cache - uses: actions/cache@v3.0.11 - with: - path: squidex-tmp.tar.gz - key: squidex-release-image-${{ github.sha }} - - - name: Move cache - run: | - rm -rf /tmp/.buildx-cache - mv /tmp/.buildx-cache-new /tmp/.buildx-cache + push: true + build-args: "SQUIDEX__BUILD__VERSION=${{ env.GITHUB_REF_SLUG }},SQUIDEX__RUNTIME__VERSION=${{ env.GITHUB_REF_SLUG }}" + cache-from: type=gha + cache-to: type=gha,mode=max + tags: squidex/squidex-build test: needs: build runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v3.1.0 - name: Inject slug/short variables uses: rlespinasse/github-slug-action@v4.3.2 - - - name: Get Image From Cache - uses: actions/cache@v3.0.11 - with: - path: squidex-tmp.tar.gz - key: squidex-release-image-${{ github.sha }} - - - name: Load Image - run: docker load < squidex-tmp.tar.gz + + - name: Pull from Cache + run: docker pull squidex/squidex-build - name: Replace Image Name1 uses: mikefarah/yq@v4.28.2 with: - cmd: yq e '.services.squidex1.image = "squidex-tmp"' -i backend/tests/docker-compose.yml + cmd: yq e '.services.squidex1.image = "squidex/squidex-build"' -i backend/tests/docker-compose.yml - name: Replace Image Name2 uses: mikefarah/yq@v4.28.2 with: - cmd: yq e '.services.squidex2.image = "squidex-tmp"' -i backend/tests/docker-compose.yml + cmd: yq e '.services.squidex2.image = "squidex/squidex-build"' -i backend/tests/docker-compose.yml - name: Replace Image Name3 uses: mikefarah/yq@v4.28.2 with: - cmd: yq e '.services.squidex3.image = "squidex-tmp"' -i backend/tests/docker-compose.yml + cmd: yq e '.services.squidex3.image = "squidex/squidex-build"' -i backend/tests/docker-compose.yml - name: Start Test run: docker-compose up -d @@ -150,18 +127,15 @@ jobs: needs: test runs-on: ubuntu-latest steps: + - name: Checkout + uses: actions/checkout@v3.1.0 + - name: Inject slug/short variables uses: rlespinasse/github-slug-action@v4.3.2 - - name: Login to Docker Hub - uses: docker/login-action@v2.1.0 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - name: Get Major Version id: version - uses: rishabhgupta/split-by@v1.0.1 + uses: rishabhgupta/split-by@v1 with: string: "${{ env.GITHUB_REF_SLUG }}" split-by: "." @@ -170,59 +144,64 @@ jobs: id: normal-version run: | if [[ ${{ env.GITHUB_REF_SLUG }} =~ ^[0-9]+\.[0-9]+$ ]]; then - echo ::set-output name=match::true + echo "STABLE_VERSION=true" >> $GITHUB_ENV fi - - name: Get Image From Cache - uses: actions/cache@v3.0.11 - with: - path: squidex-tmp.tar.gz - key: squidex-release-image-${{ github.sha }} + - name: Set up QEMU + uses: docker/setup-qemu-action@v2.1.0 - - name: Load Image - run: docker load < squidex-tmp.tar.gz + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2.2.1 - - name: Rename Tags - run: | - docker tag squidex-tmp squidex/squidex:latest - docker tag squidex-tmp squidex/squidex:${{ env.GITHUB_REF_SLUG }} - docker tag squidex-tmp squidex/squidex:${{ steps.version.outputs._0 }} + - name: Login to Docker Hub + uses: docker/login-action@v2.1.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - - name: Push Version - run: | - docker push squidex/squidex:latest - docker push squidex/squidex:${{ env.GITHUB_REF_SLUG }} - docker push squidex/squidex:${{ steps.version.outputs._0 }} + - name: BUILD + uses: docker/build-push-action@v3.2.0 + with: + push: true + build-args: "SQUIDEX__BUILD__VERSION=${{ env.GITHUB_REF_SLUG }},SQUIDEX__RUNTIME__VERSION=${{ env.GITHUB_REF_SLUG }}" + cache-from: type=gha + cache-to: type=gha,mode=max + tags: | + squidex/squidex:latest + squidex/squidex:${{ env.GITHUB_REF_SLUG }} + squidex/squidex:${{ steps.version.outputs._0 }} + if: env.STABLE_VERSION == 'true' - - name: Push Latest - run: | - docker push squidex/squidex:latest - if: steps.normal-version.outputs.match == 'true' + - name: BUILD + uses: docker/build-push-action@v3.2.0 + with: + push: true + build-args: "SQUIDEX__BUILD__VERSION=${{ env.GITHUB_REF_SLUG }},SQUIDEX__RUNTIME__VERSION=${{ env.GITHUB_REF_SLUG }}" + cache-from: type=gha + cache-to: type=gha,mode=max + tags: | + squidex/squidex:${{ env.GITHUB_REF_SLUG }} + squidex/squidex:${{ steps.version.outputs._0 }} + if: env.STABLE_VERSION != 'true' release: needs: publish runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v3.1.0 - name: Inject slug/short variables uses: rlespinasse/github-slug-action@v4.3.2 - - - name: Get Image From Cache - uses: actions/cache@v3.0.11 - with: - path: squidex-tmp.tar.gz - key: squidex-release-image-${{ github.sha }} - - - name: Load Image - run: docker load < squidex-tmp.tar.gz + + - name: Pull from Cache + run: docker pull squidex/squidex-build - name: Make directories run: sudo mkdir /build /release - name: Create container - run: docker create --name squidex-container squidex-tmp:latest + run: docker create --name squidex-container squidex/squidex-build - name: Get binaries run: sudo docker cp squidex-container:/app/. /build diff --git a/Dockerfile b/Dockerfile index 7a3d1af0b..23d234f7c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ # FROM mcr.microsoft.com/dotnet/sdk:7.0 as backend -ARG SQUIDEX__VERSION=7.0.0 +ARG SQUIDEX__BUILD__VERSION=7.0.0 WORKDIR /src @@ -30,7 +30,7 @@ COPY backend . RUN dotnet test --no-restore --filter Category!=Dependencies # Publish -RUN dotnet publish --no-restore src/Squidex/Squidex.csproj --output /build/ --configuration Release -p:version=$SQUIDEX__VERSION +RUN dotnet publish --no-restore src/Squidex/Squidex.csproj --output /build/ --configuration Release -p:version=$SQUIDEX__BUILD__VERSION # Install tools RUN dotnet tool install --tool-path /tools dotnet-counters \ @@ -70,6 +70,8 @@ RUN cp -a build /build/ # FROM mcr.microsoft.com/dotnet/aspnet:7.0-bullseye-slim +ARG SQUIDEX__RUNTIME__VERSION=7.0.0 + # Curl for debugging and libc-dev for protobuf RUN apt-get update \ && apt-get install -y curl libc-dev @@ -89,7 +91,6 @@ COPY --from=frontend /build/ wwwroot/build/ EXPOSE 80 EXPOSE 443 -EXPOSE 11111 ENV DIAGNOSTICS__COUNTERSTOOL=/tools/dotnet-counters ENV DIAGNOSTICS__DUMPTOOL=/tools/dotnet-dump @@ -97,3 +98,5 @@ ENV DIAGNOSTICS__GCDUMPTOOL=/tools/dotnet-gcdump ENV DIAGNOSTICS__TRACETOOL=/tools/dotnet-trace ENTRYPOINT ["dotnet", "Squidex.dll"] + +ENV EXPOSEDCONFIGURATION__VERSION=$SQUIDEX__RUNTIME__VERSION \ No newline at end of file