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