diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 71776590b..c571d7310 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,4 +1,3 @@ -## on: [push, pull_request] on: pull_request: paths-ignore: @@ -7,41 +6,27 @@ on: - 'assets/**' - '**.md' -name: Continuous Integration +name: Parseable CI Workflow jobs: - # docker: - # name: Docker Build & Push - # runs-on: ubuntu-latest - # steps: - # - name: Docker meta - # id: meta - # uses: docker/metadata-action@v4 - # with: - # images: | - # parseable/parseable - # tags: | - # type=sha - # - name: Set up QEMU - # uses: docker/setup-qemu-action@v2 - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v2 - # - name: Login to DockerHub - # uses: docker/login-action@v2 - # with: - # username: ${{ secrets.DOCKERHUB_USERNAME }} - # password: ${{ secrets.DOCKERHUB_TOKEN }} - # - name: Build and push - # uses: docker/build-push-action@v3 - # with: - # push: true - # tags: ${{ steps.meta.outputs.tags }} - test: - name: Test Suite + docker-compose-test: + name: Docker Compose integration tests runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v3 + - name: Start compose + run: docker-compose -f "docker-compose.yaml" up --build + - name: Stop compose + if: always() + run: docker-compose -f "docker-compose.yaml" down + + unit-tests: + name: Unit tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 - uses: actions-rs/toolchain@v1 with: profile: minimal @@ -52,10 +37,10 @@ jobs: command: test fmt: - name: Rustfmt + name: Rust fmt check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: actions-rs/toolchain@v1 with: profile: minimal @@ -68,10 +53,10 @@ jobs: args: --all -- --check clippy: - name: Clippy + name: Cargo Clippy check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: actions-rs/toolchain@v1 with: profile: minimal diff --git a/Cargo.lock b/Cargo.lock index 71df22a7c..8690c0d3b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2785,6 +2785,7 @@ dependencies = [ "aws-smithy-async", "base64 0.21.0", "bytes", + "bzip2", "cargo_toml", "chrono", "chrono-humanize", @@ -2828,6 +2829,7 @@ dependencies = [ "ureq", "vergen", "xxhash-rust", + "xz2", "zip", ] diff --git a/Dockerfile b/Dockerfile index 928302206..1b3d14a13 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,18 +13,50 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -FROM rust:1.67.0 as builder + +# Compile +FROM rust:1.67-alpine AS compiler WORKDIR /parseable +RUN apk add --no-cache musl-dev + COPY . . -RUN cargo build --release - -FROM gcr.io/distroless/cc:latest +RUN set -eux; \ + apkArch="$(apk --print-arch)"; \ + if [ "$apkArch" = "aarch64" ]; then \ + export JEMALLOC_SYS_WITH_LG_PAGE=16; \ + fi && \ + cargo build --release + +# Run +FROM alpine:3.16 + +RUN apk update --quiet \ + && apk add -q --no-cache tini + +# Create appuser +ENV USER=parseable +ENV UID=10001 + +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + "${USER}" WORKDIR /parseable -COPY --from=builder /parseable/target/release/parseable /usr/local/bin/parseable +COPY --from=compiler /parseable/target/release/parseable /bin/parseable +RUN chown -R parseable /parseable/ + +USER parseable:parseable + +EXPOSE 8000/tcp -CMD ["/usr/local/bin/parseable"] +ENTRYPOINT ["tini", "--"] +CMD /bin/parseable diff --git a/Dockerfile.release b/Dockerfile.release deleted file mode 100644 index 20d92a2a7..000000000 --- a/Dockerfile.release +++ /dev/null @@ -1,47 +0,0 @@ -# Parseable Server (C) 2022 - 2023 Parseable, Inc. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -FROM alpine:3.16 - -RUN apk update --quiet && \ - apk add -q --no-cache tini - -# Create appuser -ENV USER=parseable -ENV UID=10001 - -RUN adduser \ - --disabled-password \ - --gecos "" \ - --home "/nonexistent" \ - --shell "/sbin/nologin" \ - --no-create-home \ - --uid "${UID}" \ - "${USER}" - -# This directory should hold all the data related to parseable so we're going -# to move our PWD in there. -WORKDIR /parseable - -RUN \ - wget https://github.com/parseablehq/parseable/releases/latest/download/parseable_linux_x86_64 -O /bin/parseable && \ - chmod +x /bin/parseable - -USER parseable:parseable - -EXPOSE 8000/tcp - -ENTRYPOINT ["tini", "--"] -CMD /bin/parseable diff --git a/Dockerfile.static b/Dockerfile.static deleted file mode 100644 index e9ebc78eb..000000000 --- a/Dockerfile.static +++ /dev/null @@ -1,34 +0,0 @@ -# Parseable Server (C) 2022 - 2023 Parseable, Inc. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -# Compile -FROM rust:1.67-alpine AS compiler - -WORKDIR /parseable - -RUN apk add --no-cache musl-dev - -COPY . . - -RUN set -eux; \ - apkArch="$(apk --print-arch)"; \ - if [ "$apkArch" = "aarch64" ]; then \ - export JEMALLOC_SYS_WITH_LG_PAGE=16; \ - fi && \ - cargo build --release --target x86_64-unknown-linux-musl - -FROM scratch AS export-stage - -COPY --from=compiler parseable/target/x86_64-unknown-linux-musl/release/parseable parseable diff --git a/docker-compose.yaml b/docker-compose.yaml index ada0e4803..c62dfc1b0 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -30,19 +30,21 @@ services: - parseable parseable: - image: parseable/parseable:v0.2.1 + build: + context: . + dockerfile: Dockerfile command: ["parseable", "s3-store"] ports: - 8000 environment: - - P_S3_URL=http://minio:9000 - - P_S3_ACCESS_KEY=parseable - - P_S3_SECRET_KEY=supersecret - - P_S3_REGION=us-east-1 - - P_S3_BUCKET=parseable - - P_STAGING_DIR=/tmp/data - - P_USERNAME=admin - - P_PASSWORD=admin + - P_S3_URL="http://minio:9000" + - P_S3_ACCESS_KEY="parseable" + - P_S3_SECRET_KEY="supersecret" + - P_S3_REGION="us-east-1" + - P_S3_BUCKET="parseable" + - P_STAGING_DIR="/tmp/data" + - P_USERNAME="admin" + - P_PASSWORD="admin" networks: - parseable healthcheck: @@ -53,8 +55,8 @@ services: depends_on: - minio - quest-smoke: - image: parseable/quest:v0.1 + quest: + image: ghcr.io/parseablehq/quest:main command: ["smoke", "http://parseable:8000", "admin", "admin"] networks: - parseable @@ -64,17 +66,4 @@ services: restart_policy: condition: on-failure delay: 10s - max_attempts: 10 - - quest-load: - image: parseable/quest:v0.1 - command: ["load", "http://parseable:8000", "admin", "admin"] - networks: - - parseable - depends_on: - - quest-smoke - deploy: - restart_policy: - condition: on-failure - delay: 10s - max_attempts: 10 + max_attempts: 3 diff --git a/server/Cargo.toml b/server/Cargo.toml index 7d5daae37..ac6082ddc 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -70,6 +70,8 @@ ureq = { version = "2.6", features = ["json"] } hex = "0.4" itertools = "0.10" xxhash-rust = { version = "0.8", features = ["xxh3"] } +xz2 = { version = "*", features=["static"] } +bzip2 = { version = "*", features=["static"] } [build-dependencies] static-files = "0.2"