Skip to content

Commit

Permalink
Experimental ci with github actions
Browse files Browse the repository at this point in the history
If that actually works I'm proposing moving all of our ci/automation
to this service, because of:

* Integration with github seems to be vastly better
    + No need to click n times to go to logs
    + Rerun a failed job is easier
    + Maybe? Inline error messages in PR's
* Error messages are automatically extracted
* I think they have 20 free concurrent jobs, azure has only 10 (so
faster CI)

(Most of the config is copied from wundergraph)
  • Loading branch information
weiznich committed Jan 16, 2020
1 parent bd349ce commit 1e11e76
Show file tree
Hide file tree
Showing 8 changed files with 428 additions and 491 deletions.
16 changes: 16 additions & 0 deletions .github/workflows/audit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Security audit
on:
push:
paths:
- '**/Cargo.toml'
- '**/Cargo.lock'
schedule:
- cron: '0 0 */7 * *'
jobs:
security_audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/audit-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
373 changes: 373 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,373 @@
on:
pull_request:
types: [opened, synchronize, reopened]
push:
branches:
- master
- '0.[0-9]+.x'
- '1.[0-9]+.x'


name: CI Tests

jobs:
check_and_test:
name: Check
strategy:
fail-fast: false
matrix:
rust: ["stable", "beta", "nightly"]
backend: ["postgres", "sqlite", "mysql"]
os: [ubuntu-18.04, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout sources
uses: actions/checkout@v1

- name: Cache cargo registry
uses: actions/cache@v1
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-${{ matrix.backend }}-cargo-registry-${{ hashFiles('**/Cargo.toml') }}

- name: Cache cargo index
uses: actions/cache@v1
with:
path: ~/.cargo/git
key: ${{ runner.os }}-${{ matrix.backend }}-cargo-index-${{ hashFiles('**/Cargo.toml') }}

- name: Set environment variables
shell: bash
if: matrix.backend == 'mysql'
run: |
echo '::set-env name=RUST_TEST_THREADS::1'
- name: Set environment variables
shell: bash
if: matrix.rust == 'nightly'
run:
echo '::set-env name=RUSTFLAGS::--cap-lints=warn'

- name: Install postgres (Linux)
if: runner.os == 'Linux' && matrix.backend == 'postgres'
run: |
sudo apt-get update
sudo apt-get install -y libpq-dev postgresql
echo "host all all 127.0.0.1/32 md5" > sudo tee -a /etc/postgresql/10/main/pg_hba.conf
sudo service postgresql restart && sleep 3
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
sudo service postgresql restart && sleep 3
echo '::set-env name=PG_DATABASE_URL::postgres://postgres:postgres@localhost/'
echo '::set-env name=PG_EXAMPLE_DATABASE_URL::postgres://postgres:postgres@localhost/diesel_example'
- name: Install sqlite (Linux)
if: runner.os == 'Linux' && matrix.backend == 'sqlite'
run: |
sudo apt-get update && sudo apt-get install -y libsqlite3-dev sqlite3
echo '::set-env name=SQLITE_DATABASE_URL::/tmp/test.db'
- name: Install mysql (Linux)
if: runner.os == 'Linux' && matrix.backend == 'mysql'
run: |
sudo apt-get update
sudo apt-get -y install mysql-server libmysqlclient-dev
mysql -e "create database diesel_test; create database diesel_unit_test; grant all on \`diesel_%\`.* to 'root'@'localhost';" -uroot -proot
echo '::set-env name=MYSQL_DATABASE_URL::mysql://root:root@localhost/diesel_test'
echo '::set-env name=MYSQL_EXAMPLE_DATABASE_URL::mysql://root:root@localhost/diesel_example'
echo '::set-env name=MYSQL_UNIT_TEST_DATABASE_URL::mysql://root:root@localhost/diesel_unit_test'
- name: Install postgres (MacOs)
if: runner.os == 'macOS' && matrix.backend == 'postgres'
run: |
brew update
brew install postgres
/usr/local/opt/postgres/bin/pg_ctl -D /usr/local/var/postgres start
sleep 3
/usr/local/opt/postgres/bin/createuser -s postgres
echo '::set-env name=PG_DATABASE_URL::postgres://postgres@localhost/'
echo '::set-env name=PG_EXAMPLE_DATABASE_URL::postgres://postgres@localhost/diesel_example'
- name: Install sqlite (MacOS)
if: runner.os == 'macOS' && matrix.backend == 'sqlite'
run: |
brew update
brew install sqlite
echo '::set-env name=SQLITE_DATABASE_URL::/tmp/test.db'
- name: Install mysql (MacOS)
if: runner.os == 'macOS' && matrix.backend == 'mysql'
run: |
brew update &&
brew install mysql &&
brew services start mysql &&
brew services stop mysql;sleep 3;brew services start mysql &&
sleep 2 &&
/usr/local/Cellar/mysql/8.0.19/bin/mysql -e "create database diesel_test; create database diesel_unit_test; grant all on \`diesel_%\`.* to 'root'@'localhost';" -uroot
echo '::set-env name=MYSQL_DATABASE_URL::mysql://root@localhost/diesel_test'
echo '::set-env name=MYSQL_EXAMPLE_DATABASE_URL::mysql://root@localhost/diesel_example'
echo '::set-env name=MYSQL_UNIT_TEST_DATABASE_URL::mysql://root@localhost/diesel_unit_test'
echo '::set-env name=MYSQLCLIENT_LIB_DIR::/usr/local/Cellar/mysql/8.0.19/lib'
- name: Install sqlite (Windows)
if: runner.os == 'Windows' && matrix.backend == 'sqlite'
shell: cmd
run: |
choco install sqlite
cd /D C:\ProgramData\chocolatey\lib\SQLite\tools
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
lib /machine:x64 /def:sqlite3.def /out:sqlite3.lib
echo ::add-path::C:\ProgramData\chocolatey\lib\SQLite\tools
echo ::set-env name=SQLITE3_LIB_DIR::C:\ProgramData\chocolatey\lib\SQLite\tools
echo ::set-env name=SQLITE_DATABASE_URL::C:\test.db
- name: Install postgres (Windows)
if: runner.os == 'Windows' && matrix.backend == 'postgres'
shell: bash
run: |
choco install postgresql12 --force --params '/Password:postgres'
echo '::add-path::C:\Program Files\PostgreSQL\12\bin'
echo '::add-path::C:\Program Files\PostgreSQL\12\lib'
echo '::set-env name=PQ_LIB_DIR::C:\Program Files\PostgreSQL\12\lib'
echo '::set-env name=PG_DATABASE_URL::postgres://postgres:postgres@localhost/'
echo '::set-env name=PG_EXAMPLE_DATABASE_URL::postgres://postgres:postgres@localhost/diesel_example'
- name: Install mysql (Windows)
if: runner.os == 'Windows' && matrix.backend == 'mysql'
shell: cmd
run: |
choco install mysql
"C:\tools\mysql\current\bin\mysql" -e "create database diesel_test; create database diesel_unit_test; grant all on `diesel_%`.* to 'root'@'localhost';" -uroot
echo ::set-env name=MYSQL_DATABASE_URL::mysql://root@localhost/diesel_test
echo ::set-env name=MYSQL_EXAMPLE_DATABASE_URL::mysql://root@localhost/diesel_example
echo ::set-env name=MYSQL_UNIT_TEST_DATABASE_URL::mysql://root@localhost/diesel_unit_test
echo ::set-env name=MYSQLCLIENT_LIB_DIR::C:\tools\mysql\current\lib
- name: Install rust toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: ${{ matrix.rust }}
override: true

- name: Test diesel (nightly)
if: matrix.rust == 'nightly'
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel/Cargo.toml --no-default-features --features "${{ matrix.backend }} unstable extras"

- name: Test diesel
if: matrix.rust != 'nightly'
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel/Cargo.toml --no-default-features --features "${{ matrix.backend }} extras"

- name: Test diesel (with-deprecated)
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel/Cargo.toml --no-default-features --features "${{ matrix.backend }} extras with-deprecated"

- name: Test diesel-derives (nightly)
if: matrix.rust == 'nightly'
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel_derives/Cargo.toml --no-default-features --features "diesel/${{ matrix.backend }} diesel/unstable"

- name: Test diesel-derives
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel_derives/Cargo.toml --no-default-features --features "diesel/${{ matrix.backend }}"

- name: Test diesel-cli
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel_cli/Cargo.toml --no-default-features --features "${{ matrix.backend }}"

- name: Test diesel examples
shell: bash
run: |
(cd examples/${{matrix.backend}} && BACKEND=${{matrix.backend}} ./test_all)
- name: Test migrations-internals
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel_migrations/migrations_internals/Cargo.toml

- name: Test migrations-macros
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel_migrations/migrations_macros/Cargo.toml

- name: Test diesel_migrations
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel_migrations/Cargo.toml --features "${{ matrix.backend }} diesel/${{ matrix.backend }}"

- name: Run diesel_tests (nightly)
if: matrix.run == 'nightly'
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel_tests/Cargo.toml --no-default-features --features "${{ matrix.backend }} unstable"

- name: Run diesel_tests
if: matrix.run != 'nightly'
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel_tests/Cargo.toml --no-default-features --features "${{ matrix.backend }}"

- name: Run rustdoc (nightly)
if: matrix.run == 'nightly'
uses: actions-rs/cargo@v1
with:
command: doc
args: --manifest-path diesel/Cargo.toml --no-deps --no-default-features --features "${{ matrix.backend }} unstable"

- name: Run rustdoc
if: matrix.run != 'nightly'
uses: actions-rs/cargo@v1
with:
command: doc
args: --manifest-path diesel/Cargo.toml --no-deps --no-default-features --features "${{ matrix.backend }}"

compile_tests:
name: Compiletests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-08-01
profile: minimal
override: true
- name: Cache cargo registry
uses: actions/cache@v1
with:
path: ~/.cargo/registry
key: compile_test-cargo-registry-${{ hashFiles('**/Cargo.toml') }}
- name: Cache cargo index
uses: actions/cache@v1
with:
path: ~/.cargo/git
key: compile_test-cargo-index-${{ hashFiles('**/Cargo.toml') }}

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get -y install libsqlite3-dev libpq-dev libmysqlclient-dev
- name: Run compile tests
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel_compile_tests/Cargo.toml

rustfmt_and_clippy:
name: Check rustfmt style && run clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.37.0
profile: minimal
components: clippy, rustfmt
override: true
- name: Cache cargo registry
uses: actions/cache@v1
with:
path: ~/.cargo/registry
key: clippy-cargo-registry-${{ hashFiles('**/Cargo.toml') }}
- name: Cache cargo index
uses: actions/cache@v1
with:
path: ~/.cargo/git
key: clippy-cargo-index-${{ hashFiles('**/Cargo.toml') }}

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get -y install libsqlite3-dev libpq-dev libmysqlclient-dev
- name: Run clippy
uses: actions-rs/cargo@v1
with:
command: clippy

- name: Check formating
uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check

sqlite_bundled:
name: Check sqlite bundled
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true
- name: Cache cargo registry
uses: actions/cache@v1
with:
path: ~/.cargo/registry
key: sqlite_bundled-cargo-registry-${{ hashFiles('**/Cargo.toml') }}
- name: Cache cargo index
uses: actions/cache@v1
with:
path: ~/.cargo/git
key: sqlite_bundled-cargo-index-${{ hashFiles('**/Cargo.toml') }}

- name: Setup environment
run: |
echo '::set-env name=SQLITE_DATABASE_URL::/tmp/test.db'
- name: Test diesel-cli
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path diesel_cli/Cargo.toml --no-default-features --features "sqlite-bundled"

minimal_rust_version:
name: Check Minimal supported rust version (1.37.0)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.37.0
profile: minimal
override: true
- name: Cache cargo registry
uses: actions/cache@v1
with:
path: ~/.cargo/registry
key: minimal_rust_version-cargo-registry-${{ hashFiles('**/Cargo.toml') }}
- name: Cache cargo index
uses: actions/cache@v1
with:
path: ~/.cargo/git
key: minimal_rust_version-cargo-index-${{ hashFiles('**/Cargo.toml') }}

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get -y install libsqlite3-dev libpq-dev libmysqlclient-dev
- name: Check building with rust 1.36.0
uses: actions-rs/cargo@v1
with:
command: check
args: --all
Loading

0 comments on commit 1e11e76

Please sign in to comment.