Skip to content

ivangabriele/docker-tauri

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tauri Docker Image

img-docker img-github-actions

Full-featured Tauri Docker Image based on Rust non-slim Debian images including:

⚠️ (*) tauri-driver is currently in pre-alpha
Check the official documentation for more information.

This image is a good base for CIs (builds, unit & e2e tests, etc) as well as for local runs.

Images are automatically updated on a daily basis.



Supported tags and respective Dockerfile links

E2E Testing

WebDriverIO

Since tauri-driver is available as a global command in this image, you can use it as is in wdio.config.js (see documentation):

// Keep track of the `tauri-driver` child process
let tauriDriver;

const config = {
  // Ensure we are running `tauri-driver` before the session starts,
  // so that we can proxy the webdriver requests
  beforeSession: () => {
    // No need for that: `path.resolve(os.homedir(), '.cargo', 'bin', 'tauri-driver')`
    tauriDriver = spawn('tauri-driver', [], {
      stdio: [null, process.stdout, process.stderr],
    })
  },

  // Clean up the `tauri-driver` process we spawned at the start of the session
  afterSession: () => tauriDriver.kill(),

  // ...
}

Continuous Integration

Github Actions

Example:

jobs:
  core_unit_test:
    name: Core Unit Test
    runs-on: ubuntu-latest
    container:
      image: ivangabriele/tauri:debian-bullseye-18
      # This is REQUIRED if you use `tarpaulin`
      # https://github.com/xd009642/tarpaulin/issues/146
      # https://github.com/xd009642/tarpaulin#github-actions
      options: --security-opt seccomp=unconfined
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Run
        run: cargo test
        working-directory: ./src-tauri
      # https://github.com/xd009642/tarpaulin#github-actions
      - name: Generate Coverage
        run: cargo tarpaulin --all-features --out Xml --timeout 120 --verbose
        working-directory: ./src-tauri
      # Add any other step here to upload your coverage somewhere

  e2e_test:
    name: E2E Test
    runs-on: ubuntu-latest
    container:
      image: ivangabriele/tauri:debian-bullseye-18
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Install Node.js dependencies
        run: yarn --frozen-lockfile # or `npm ci`
      - name: Build
        # Add your core + webview build command(s)
        run: ...
      # I recommend using `nick-fields/retry@v2` action here
      # with a `fuser -n tcp -k 4445` command to kill the process using (likely Selenium)
      # since WebdriverIO often hangs out during the first run (unable to connect)
      - name: Run tests
        uses: nick-fields/retry@v2
        with:
          timeout_seconds: 600
          max_attempts: 3
          retry_on: error
          # https://tauri.app/v1/guides/testing/webdriver/ci
          command: |
            fuser -n tcp -k 4445
            xvfb-run wdio run ./configs/wdio.config.js

Roadmap

Excepted Ubuntu, all those planned distributions are a maybe for now.

  • Arch
  • Fedora 38
  • NixOS
  • openSUSE
  • Ubuntu 22

Contribute

X is the OS name + version (one of debian-bookworm, debian-bullseye, fedora-37).
y is the Node.js tag (18).
Z is the Rust variant (-nightly or nothing).

Prerequisites

Build

make build-X-Y # with no variant
make build-X-Y-Z

Example: make build-debian-bullseye-18 or make build-debian-bullseye-18-nightly.

Run

make run-X-Y # with no variant
make run-X-Y-Z

Example: make run-debian-bullseye-18 or make run-debian-bullseye-18-nightly.

Test

You need to have Node.js installed in order to run tests: node

make test-X-Y # with no variant
make test-X-Y-Z

Example: make test-debian-bullseye-18 or make test-debian-bullseye-18-nightly.