Могут ли действия github включать postgresql с поддержкой uuid? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть работающее действие GitHub, которое устанавливает PostgreSQL 11. Но теперь я использую UUID, и они не поддерживаются.

Мне нужно запустить CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; для установки UUID, но не понятно, как сделать это с помощью действий GitHub.

Я избил и перепробовал несколько других Docker изображений, для которых включена поддержка UUID, но они являются старыми для пользователя и не поддерживают Actions.

My Rust.yml ниже:

name: Rust

on: [push]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        rust: [stable, beta]
    services:
      postgres:
        image: postgres:11.6
        ports:
        - 5432:5432
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
    env:
      RUSTFLAGS: -D warnings
      CARGO_INCREMENTAL: 0
      RUN_SLOW_TESTS: 1
      RUSTUP_MAX_RETRIES: 10
      CARGO_NET_RETRY: 10
    steps:
      - uses: hecrj/setup-rust-action@v1
        with:
          rust-version: ${{ matrix.rust }}
          components: rustfmt
          targets: wasm32-unknown-unknown
      - uses: actions/checkout@master
      - name: Install Dependencies
        if: matrix.os == 'ubuntu-latest'
        run: sudo apt-get update && sudo apt-get install libudev-dev zlib1g-dev alsa libasound2-dev
      - name: Build
        run: cargo build --verbose
      - name: Install Diesel CLI
        run: cargo install diesel_cli --no-default-features --features postgres
      - name: Setup Diesel
        env:
          DATABASE_URL: postgres://postgres:postgres@localhost/nof1_time_series
        run: diesel setup
      - name: Run tests
        env:
          DATABASE_URL: postgres://postgres:postgres@localhost/nof1_time_series
        run: cargo test --verbose

1 Ответ

0 голосов
/ 25 апреля 2020

Решением было включить следующее /migrations/00000000000010_install_uuid_feature/Up.sql в качестве собственной миграции в начале набора миграции и запускать от имени суперпользователя postgres:

-- Install the UUID extension to this database
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

Другие советы UUID, если вы используете Rust Diesel в качестве вашего ORM:

  1. Обязательно включите необходимые функции дизеля:
[dependencies]
diesel = { version = "1.4", features = ["postgres", "chrono", "uuidv07", "serde_json"] }
uuid = {version = "0.8", features = ["serde", "v4"]}
chrono = { version = "0.4", features = ["serde"] }
Не проверяйте форматирование в действии Github - сгенерированная схема дизеля приведет к сбою сборки. Мое обновленное действие Github для Rust Diesel с поддержкой UUID приведено ниже:
name: Rust

on: [push]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        rust: [stable, beta]
    services:
      postgres:
        image: postgres:11.6
        ports:
        - 5432:5432
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
    env:
      RUSTFLAGS: -D warnings
      CARGO_INCREMENTAL: 0
      RUN_SLOW_TESTS: 1
      RUSTUP_MAX_RETRIES: 10
      CARGO_NET_RETRY: 10
    steps:
      - uses: hecrj/setup-rust-action@v1
        with:
          rust-version: ${{ matrix.rust }}
          components: rustfmt
          targets: wasm32-unknown-unknown
      - uses: actions/checkout@master
      - name: Install Dependencies
        if: matrix.os == 'ubuntu-latest'
        run: sudo apt-get update && sudo apt-get install libudev-dev zlib1g-dev alsa libasound2-dev
      - name: Build
        run: cargo build --verbose
      - name: Install Diesel CLI
        run: cargo install diesel_cli --no-default-features --features postgres
      - name: Setup Diesel
        env:
          DATABASE_URL: postgres://postgres:postgres@localhost/timeseries
        run: diesel setup
      - name: Run tests
        env:
          DATABASE_URL: postgres://postgres:postgres@localhost/timeseries
        run: cargo test --verbose
Полный пример База данных временных рядов
...