diff --git a/.github/workflows/dotnet-docker.yml b/.github/workflows/dotnet-docker.yml index 9939320b..3ad3b108 100644 --- a/.github/workflows/dotnet-docker.yml +++ b/.github/workflows/dotnet-docker.yml @@ -1,23 +1,23 @@ name: Build and push Docker image on: + workflow_dispatch: push: paths: - - '.dockerignore' - - '.github/workflows/dotnet-docker.yml' - - 'ci/Dockerfile.dotnet' - - 'ci/dotnet-version.sh' - - 'Myriad/**' - - 'PluralKit.API/**' - - 'PluralKit.Bot/**' - - 'PluralKit.Core/**' + - ".dockerignore" + - ".github/workflows/dotnet-docker.yml" + - "ci/Dockerfile.dotnet" + - "ci/dotnet-version.sh" + - "Myriad/**" + - "PluralKit.API/**" + - "PluralKit.Bot/**" + - "PluralKit.Core/**" jobs: build: - name: '.net docker build' + name: ".net docker build" runs-on: ubuntu-latest permissions: packages: write - if: github.repository == 'PluralKit/PluralKit' steps: - uses: docker/login-action@v1 with: diff --git a/.github/workflows/rust-docker.yml b/.github/workflows/rust-docker.yml index a46adf67..cde407f7 100644 --- a/.github/workflows/rust-docker.yml +++ b/.github/workflows/rust-docker.yml @@ -1,22 +1,22 @@ name: Build and push Rust service Docker images on: + workflow_dispatch: push: paths: - - 'crates/**' - - '.dockerignore' - - '.github/workflows/rust.yml' - - 'ci/Dockerfile.rust' - - 'ci/rust-docker-target.sh' - - 'Cargo.toml' - - 'Cargo.lock' + - "crates/**" + - ".dockerignore" + - ".github/workflows/rust.yml" + - "ci/Dockerfile.rust" + - "ci/rust-docker-target.sh" + - "Cargo.toml" + - "Cargo.lock" jobs: build: - name: 'rust docker build' + name: "rust docker build" runs-on: ubuntu-latest permissions: packages: write - if: github.repository == 'PluralKit/PluralKit' steps: - uses: docker/login-action@v1 if: ${{ !env.ACT }} @@ -35,7 +35,7 @@ jobs: # https://github.com/docker/build-push-action/issues/378 context: . file: ci/Dockerfile.rust - push: false + push: false cache-from: type=registry,ref=ghcr.io/pluralkit/docker-cache:rust cache-to: type=registry,ref=ghcr.io/pluralkit/docker-cache:rust,mode=max outputs: .docker-bin diff --git a/ci/Dockerfile.dotnet b/ci/Dockerfile.dotnet index c10952b3..000b7bae 100644 --- a/ci/Dockerfile.dotnet +++ b/ci/Dockerfile.dotnet @@ -2,6 +2,15 @@ FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /app +RUN apt-get update && apt-get install -y curl build-essential && \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + +ENV PATH="/root/.cargo/bin:${PATH}" +ENV RUSTFLAGS='-C link-arg=-s' + +# Install uniffi-bindgen-cs +RUN cargo install uniffi-bindgen-cs --git https://github.com/90-008/uniffi-bindgen-cs + # Restore/fetch dependencies excluding app code to make use of caching COPY PluralKit.sln /app/ COPY Myriad/Myriad.csproj /app/Myriad/ @@ -13,8 +22,21 @@ COPY .git/ /app/.git COPY Serilog/ /app/Serilog/ RUN dotnet restore PluralKit.sln -# Copy the rest of the code and build +# Copy the rest of the code COPY . /app + +# copy parser code +COPY Cargo.toml /app/ +COPY Cargo.lock /app/ + +COPY crates/ /app/crates + +# Generate command parser bindings +RUN mkdir -p app/obj && cargo -Z unstable-options build --package commands --lib --release --artifact-dir app/obj/ +RUN uniffi-bindgen-cs "app/obj/libcommands.so" --library --out-dir="app/PluralKit.Bot" +RUN cargo run --package commands --bin write_cs_glue -- "app/PluralKit.Bot/commandtypes.cs" + +# build bot RUN dotnet build -c Release -o bin # Build runtime stage (doesn't include SDK)