From 565e6bc5e424d1a6b8801112d70b27012d72466c Mon Sep 17 00:00:00 2001 From: Rohan Sircar Date: Sat, 24 Apr 2021 22:46:11 +0530 Subject: [PATCH] Changes to ci instead of docker layer caching, build binary in runner itself and copy binary to dockerfile old Dockerfile is now build.Dockerfile whereas new one is ci.Dockerfile caching docker layers was taking more time than building the image from scratch add powerpc build (for the 100th time) but without cross in it's own job --- .github/workflows/ci.yml | 90 +++++++++++-------- Dockerfile => build.Dockerfile | 0 ...kerignore => build.Dockerfile.dockerignore | 0 ci.Dockerfile | 27 ++++++ ci.Dockerfile.dockerignore | 3 + 5 files changed, 85 insertions(+), 35 deletions(-) rename Dockerfile => build.Dockerfile (100%) rename .dockerignore => build.Dockerfile.dockerignore (100%) create mode 100644 ci.Dockerfile create mode 100644 ci.Dockerfile.dockerignore diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c02b75d..7326b62 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,8 +1,4 @@ # Based on https://github.com/actions-rs/meta/blob/master/recipes/quickstart.md -# -# While our "example" application has the platform-specific code, -# for simplicity we are compiling and testing everything on the Ubuntu environment only. -# For multi-OS testing see the `cross.yml` workflow. on: [push, pull_request] @@ -15,18 +11,15 @@ jobs: steps: - name: Checkout sources uses: actions/checkout@v2 - - name: Install stable toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - - name: Rust Cache uses: Swatinem/rust-cache@v1.2.0 - - - name: Run cargo check + - name: Run Cargo Check uses: actions-rs/cargo@v1 with: command: check @@ -37,7 +30,6 @@ jobs: steps: - name: Checkout sources uses: actions/checkout@v2 - - name: Install stable toolchain uses: actions-rs/toolchain@v1 with: @@ -47,7 +39,7 @@ jobs: - name: Rust Cache uses: Swatinem/rust-cache@v1.2.0 - - name: Run cargo test + - name: Run Tests uses: actions-rs/cargo@v1 with: command: test @@ -58,7 +50,6 @@ jobs: steps: - name: Checkout sources uses: actions/checkout@v2 - - name: Install stable toolchain uses: actions-rs/toolchain@v1 with: @@ -68,31 +59,23 @@ jobs: components: rustfmt, clippy - name: Rust Cache uses: Swatinem/rust-cache@v1.2.0 - - - name: Run cargo fmt + - name: Run Cargo fmt uses: actions-rs/cargo@v1 with: command: fmt args: --all -- --check - - - name: Run cargo clippy + - name: Run Cargo clippy uses: actions-rs/cargo@v1 # continue-on-error: true with: command: clippy args: -- -D warnings - build: - name: Build Binaries + build-aarch64: + name: Build aarch64 Binaries if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')) runs-on: ubuntu-latest needs: [check, test, lints] - strategy: - matrix: - target: - - x86_64-unknown-linux-gnu - - aarch64-unknown-linux-gnu - # - powerpc64-unknown-linux-gnu steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 @@ -105,20 +88,47 @@ jobs: path: | ~/.cargo/registry ~/.cargo/git + ~/.cargo/bin + ~/.cargo/.crates2.json + ~/.cargo/.crates.toml target - key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }} - # - name: Rust Cache - # uses: Swatinem/rust-cache@v1.2.0 - # - name: Install PowerPC GCC - # if: matrix.target == 'powerpc64-unknown-linux-gnu' - # run: | - # sudo apt-get install -y gcc-powerpc-linux-gnu + key: ${{ runner.os }}-aarch64-unknown-linux-gnu-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Compile uses: actions-rs/cargo@v1 with: use-cross: true command: build - args: --release --target=${{ matrix.target }} + args: --release --target=aarch64-unknown-linux-gnu + + build-ppc: + name: Build PowerPC Binaries + if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')) + continue-on-error: true + runs-on: ubuntu-latest + needs: [check, test, lints] + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: ${{ matrix.target }} + override: true + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + ~/.cargo/bin + ~/.cargo/.crates2.json + ~/.cargo/.crates.toml + target + key: ${{ runner.os }}-powerpc64-unknown-linux-gnu-cargo-${{ hashFiles('**/Cargo.lock') }} + run: sudo apt-get install -y gcc-powerpc-linux-gnu + - name: Compile + uses: actions-rs/cargo@v1 + with: + command: build + args: --release --target=powerpc64-unknown-linux-gnu publish-docker: name: Build and Publish Docker Image @@ -127,15 +137,25 @@ jobs: needs: [check, test, lints] steps: - uses: actions/checkout@v2 - - name: Docker layer cache - uses: satackey/action-docker-layer-caching@v0.0.11 - continue-on-error: true + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: x86_64-unknown-linux-gnu + override: true + - name: Rust Cache + uses: Swatinem/rust-cache@v1.2.0 - name: Login to Docker Hub uses: docker/login-action@v1 with: username: rohansircar password: ${{ secrets.DOCKER_LOGIN_PASSWORD }} + - name: Compile + uses: actions-rs/cargo@v1 + with: + command: build + args: --release - name: Build Image - run: docker build -t rohansircar/actix-demo:latest . + run: docker build -f ci.Dockerfile -t rohansircar/actix-demo:latest . + env: DOCKER_BUILDKIT=1 - name: Publish Image run: docker push rohansircar/actix-demo:latest diff --git a/Dockerfile b/build.Dockerfile similarity index 100% rename from Dockerfile rename to build.Dockerfile diff --git a/.dockerignore b/build.Dockerfile.dockerignore similarity index 100% rename from .dockerignore rename to build.Dockerfile.dockerignore diff --git a/ci.Dockerfile b/ci.Dockerfile new file mode 100644 index 0000000..4bf0138 --- /dev/null +++ b/ci.Dockerfile @@ -0,0 +1,27 @@ +FROM debian:buster-slim +ARG APP=/usr/src/app + +RUN apt-get update \ + && apt-get install -y ca-certificates tzdata \ + && rm -rf /var/lib/apt/lists/* + +EXPOSE 8000 + +ENV TZ=Etc/UTC \ + APP_USER=appuser + +RUN groupadd $APP_USER \ + && useradd -g $APP_USER $APP_USER \ + && mkdir -p ${APP} + +COPY ./.env ${APP}/.env +COPY ./migrations ${APP}/migrations +COPY ./static ${APP}/static +COPY ./db/empty.db ${APP}/app.db +COPY ./target/release/actix-demo ${APP}/actix-demo + +RUN chown -R $APP_USER:$APP_USER ${APP} + +USER $APP_USER +WORKDIR ${APP} +CMD ["./actix-demo"] \ No newline at end of file diff --git a/ci.Dockerfile.dockerignore b/ci.Dockerfile.dockerignore new file mode 100644 index 0000000..31fbab0 --- /dev/null +++ b/ci.Dockerfile.dockerignore @@ -0,0 +1,3 @@ +.git +.idea +.vscode \ No newline at end of file