# docker-builder-rust

Docker image for building Rust projects with Cargo.

## Usage

In a Forgejo action file, e.g. `.forgejo/workflows/test.yml`:

```yml
on: [push]
jobs:
  test:
    runs-on: docker
    container:
      image:
        git.kemitix.net/kemitix/rust:v3.0.0
    steps:
      - name: test with nightly
        run: cargo +nightly test
      - name: build with v1.74.1
        run: cargo +1.74.1 cargo build
      - name: test with stable
        run: cargo test
```

## Toolchains

The available toolchain in the image are:

- `nightly` 
- stable
- 1.74.1

## Contents

- nodejs
- rust
- git
- cargo
- cargo-binstall
- cargo-mutants
- cargo-chef
- cargo-hack
- release-plz
- dbus-dev
- perl

### Scripts

- `check-for-ignored`

Checks for files that are being tracked by Git but should be ignored according
to the `.gitignore` file.

#### Usage

```yaml
steps:
  - name: Check for Ignored Files
    run: check-for-ignored
```

## Caveats

### openssl

The alpine linux install doesn't build with this dependency. You can either compile `native-tls` with the `vendored` feature, or not use `openssl`.

#### vendoered native-tls

This crate *must* use the `vendored` feature in order to compile in the Alpine Linux image.

```toml
native-tls = { version = "0.2", features = ["vendored"] }
```

#### Don't use `openssl`

Check that none of your dependencies require `openssl`:

```bash
cargo tree --edges normal -i openssl
```

This will list the tree of dependencies that are bringing in `openssl`.

If you do need ssl/tls, try using `rustls`.  e.g.

```toml
reqwest = { version = "0.12", default-features = false, features = [
  "json",
  "rustls-tls",
] }
```