diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 076321f5..d092bc46 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -120,7 +120,15 @@ jobs: DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }} # Build arm64 + arm/v7 images + create-arm: + uses: ./.github/workflows/create-arm.yml + secrets: + SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY }} + SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY }} + SCW_DEFAULT_PROJECT_ID: ${{ secrets.SCW_DEFAULT_PROJECT_ID }} + SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_DEFAULT_ORGANIZATION_ID }} build-bw-arm: + needs: [create-arm] uses: ./.github/workflows/container-build.yml with: RELEASE: beta @@ -134,9 +142,10 @@ jobs: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }} ARM_SSH_KEY: ${{ secrets.ARM_SSH_KEY }} + ARM_SSH_IP: ${{ needs.create-arm.outputs.arm_ip }} ARM_SSH_CONFIG: ${{ secrets.ARM_SSH_CONFIG }} build-sc-arm: - needs: ["build-bw-arm"] + needs: [create-arm, build-bw-arm] uses: ./.github/workflows/container-build.yml with: RELEASE: beta @@ -149,9 +158,10 @@ jobs: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }} ARM_SSH_KEY: ${{ secrets.ARM_SSH_KEY }} + ARM_SSH_IP: ${{ needs.create-arm.outputs.arm_ip }} ARM_SSH_CONFIG: ${{ secrets.ARM_SSH_CONFIG }} build-au-arm: - needs: ["build-sc-arm"] + needs: [create-arm, build-sc-arm] uses: ./.github/workflows/container-build.yml with: RELEASE: beta @@ -164,9 +174,10 @@ jobs: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }} ARM_SSH_KEY: ${{ secrets.ARM_SSH_KEY }} + ARM_SSH_IP: ${{ needs.create-arm.outputs.arm_ip }} ARM_SSH_CONFIG: ${{ secrets.ARM_SSH_CONFIG }} build-ui-arm: - needs: ["build-au-arm"] + needs: [create-arm, build-au-arm] uses: ./.github/workflows/container-build.yml with: RELEASE: beta @@ -179,6 +190,7 @@ jobs: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }} ARM_SSH_KEY: ${{ secrets.ARM_SSH_KEY }} + ARM_SSH_IP: ${{ needs.create-arm.outputs.arm_ip }} ARM_SSH_CONFIG: ${{ secrets.ARM_SSH_CONFIG }} # Linux packages @@ -402,7 +414,16 @@ jobs: VERSION: ${{ needs.wait-builds.outputs.version }} ALIAS: beta - - + # Remove ARM VM + rm-arm: + if: ${{ always() }} + needs: [create-arm, push-bunkerweb, push-scheduler, push-autoconf, push-ui] + uses: ./.github/workflows/rm-arm.yml + secrets: + ARM_ID: ${{ needs.create-arm.outputs.arm_id }} + SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY }} + SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY }} + SCW_DEFAULT_PROJECT_ID: ${{ secrets.SCW_DEFAULT_PROJECT_ID }} + SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_DEFAULT_ORGANIZATION_ID }} diff --git a/.github/workflows/container-build.yml b/.github/workflows/container-build.yml index e0704dbf..d862f2c5 100644 --- a/.github/workflows/container-build.yml +++ b/.github/workflows/container-build.yml @@ -38,6 +38,8 @@ on: required: false ARM_SSH_KEY: required: false + ARM_SSH_IP: + required: false ARM_SSH_CONFIG: required: false @@ -54,10 +56,11 @@ jobs: mkdir -p ~/.ssh echo "$SSH_KEY" > ~/.ssh/id_rsa_arm chmod 600 ~/.ssh/id_rsa_arm - echo "$SSH_CONFIG" > ~/.ssh/config + echo "$SSH_CONFIG" | sed "s/SSH_IP/$SSH_IP/g" > ~/.ssh/config env: SSH_KEY: ${{ secrets.ARM_SSH_KEY }} - SSH_CONFIG: ${{ secrets.ARM_SSH_CONFIG }} + SSH_IP: ${{ secrets.ARM_SSH_IP }} + SSH_CONFIG: ${{ secrets.ARM_SSH_IP }} - name: Setup Buildx uses: docker/setup-buildx-action@v2 if: inputs.CACHE_SUFFIX != 'arm' @@ -66,7 +69,7 @@ jobs: if: inputs.CACHE_SUFFIX == 'arm' with: driver: remote - endpoint: ssh://ubuntu@arm + endpoint: ssh://root@arm platforms: linux/arm64,linux/arm/v7,linux/arm/v6 - name: Login to Docker Hub uses: docker/login-action@v2 diff --git a/.github/workflows/create-arm.yml b/.github/workflows/create-arm.yml new file mode 100644 index 00000000..d25031ea --- /dev/null +++ b/.github/workflows/create-arm.yml @@ -0,0 +1,47 @@ +name: Create ARM node (REUSABLE) + +on: + workflow_call: + outputs: + arm_id: + description: "ARM ID" + value: ${{ fromJson(jobs.build.outputs.json).ID }} + arm_ip: + description: "ARM ID" + value: ${{ fromJson(jobs.build.outputs.json).PluginIP.Address }} + + secrets: + SCW_ACCESS_KEY: + required: true + SCW_SECRET_KEY: + required: true + SCW_DEFAULT_PROJECT_ID: + required: true + SCW_DEFAULT_ORGANIZATION_ID: + required: true + +jobs: + build: + runs-on: ubuntu-latest + outputs: + json: steps.scw.outputs.json + steps: + # Prepare + - name: Checkout source code + uses: actions/checkout@v3 + - name: Create ARM VM + id: scw + uses: scaleway/action-scw@v0 + with: + args: instance server create zone=fr-par-2 type=AMP2-C8 + save_config: true + version: v2.13.0 + access-key: ${{ secrets.SCW_ACCESS_KEY }} + secret-key: ${{ secrets.SCW_SECRET_KEY }} + default-project-id: ${{ secrets.SCW_DEFAULT_PROJECT_ID }} + default-organization-id: ${{ secrets.SCW_DEFAULT_ORGANIZATION_ID }} + - name: Wait for VM + run: scw instance server wait ${{ fromJson(steps.scw.outputs.json).ID }} zone=fr-par-2 + - name: Install Docker + run: scw instance server ssh ${{ fromJson(steps.scw.outputs.json).ID }} zone=fr-par-2 "command=curl -fsSL https://test.docker.com -o test-docker.sh ; sh test-docker.sh" + diff --git a/.github/workflows/rm-arm.yml b/.github/workflows/rm-arm.yml new file mode 100644 index 00000000..6ac9ba10 --- /dev/null +++ b/.github/workflows/rm-arm.yml @@ -0,0 +1,35 @@ +name: Create ARM node (REUSABLE) + +on: + workflow_call: + inputs: + ARM_ID: + required: true + type: string + secrets: + SCW_ACCESS_KEY: + required: true + SCW_SECRET_KEY: + required: true + SCW_DEFAULT_PROJECT_ID: + required: true + SCW_DEFAULT_ORGANIZATION_ID: + required: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + # Prepare + - name: Checkout source code + uses: actions/checkout@v3 + - name: Delete ARM VM + uses: scaleway/action-scw@v0 + with: + args: instance server delete ${{ inputs.ARM_ID }} zone=fr-par-2 with-ip=true with-volumes=all + version: v2.13.0 + access-key: ${{ secrets.SCW_ACCESS_KEY }} + secret-key: ${{ secrets.SCW_SECRET_KEY }} + default-project-id: ${{ secrets.SCW_DEFAULT_PROJECT_ID }} + default-organization-id: ${{ secrets.SCW_DEFAULT_ORGANIZATION_ID }} + diff --git a/src/scheduler/Dockerfile b/src/scheduler/Dockerfile index 007aa11a..20ee20b2 100644 --- a/src/scheduler/Dockerfile +++ b/src/scheduler/Dockerfile @@ -10,7 +10,7 @@ RUN mkdir -p /usr/share/bunkerweb/deps && \ rm -rf /tmp/req # Install python requirements -RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev && \ +RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo && \ pip install --no-cache-dir --upgrade pip && \ pip install wheel && \ mkdir -p /usr/share/bunkerweb/deps/python && \ diff --git a/src/ui/Dockerfile b/src/ui/Dockerfile index 6df55ec9..c4a8d806 100755 --- a/src/ui/Dockerfile +++ b/src/ui/Dockerfile @@ -10,7 +10,7 @@ RUN mkdir -p /usr/share/bunkerweb/deps && \ rm -rf /tmp/req # Install python requirements -RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo && \ +RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo file && \ pip install --no-cache-dir --upgrade pip && \ pip install wheel && \ mkdir -p /usr/share/bunkerweb/deps/python && \