diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5c1f7924d..85d6e8fc6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,32 +49,32 @@ jobs: restore-key: | ${{ runner.os }}-cargo-build-target-${{ env.CURRENT_RUSTC_VERSION }}- - - name: Install PostgreSQL + - name: Launch the postgres image run: | - sudo apt-get update && DEBIAN_FRONTEND=noninteractive sudo apt-get install -y postgresql - sudo systemctl start postgresql - sudo -u postgres createuser $(whoami) -w - sudo -u postgres createdb $(whoami) -O $(whoami) - echo "::set-env name=CRATESFYI_DATABASE_URL::postgresql://$(whoami)@%2Fvar%2Frun%2Fpostgresql/$(whoami)" - - - name: Build docs.rs - run: cargo build --locked + cp .env.sample .env + . .env + mkdir -p ${CRATESFYI_PREFIX}/public-html + docker-compose up -d db + # Give the database enough time to start up + sleep 5 + # Make sure the database is actually working + psql "${CRATESFYI_DATABASE_URL}" - name: Run rustfmt run: cargo fmt -- --check - name: Run clippy - run: cargo clippy -- -D warnings + run: cargo clippy --locked -- -D warnings - - name: Prepare the test environment - run: | - prefix=$(pwd)/ignored/prefix - mkdir -p ${prefix}/public-html - echo "::set-env name=CRATESFYI_PREFIX::${prefix}" + - name: Build docs.rs + run: cargo build --locked - name: Test docs.rs run: cargo test --locked -- --test-threads=1 + - name: Clean up the database + run: docker-compose down --volumes + docker: name: Docker runs-on: ubuntu-latest diff --git a/src/db/mod.rs b/src/db/mod.rs index 2dc7bff57..503d22cf0 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -7,6 +7,7 @@ pub use self::delete_crate::delete_crate; pub use self::file::{add_path_into_database, move_to_s3}; pub use self::migrate::migrate; +use failure::Fail; use postgres::error::Error; use postgres::{Connection, TlsMode}; use std::env; @@ -18,11 +19,10 @@ pub(crate) mod file; mod migrate; /// Connects to database -pub fn connect_db() -> Result { - // FIXME: unwrap might not be the best here - let db_url = env::var("CRATESFYI_DATABASE_URL") - .expect("CRATESFYI_DATABASE_URL environment variable is not exists"); - Connection::connect(&db_url[..], TlsMode::None) +pub fn connect_db() -> Result { + let err = "CRATESFYI_DATABASE_URL environment variable is not set"; + let db_url = env::var("CRATESFYI_DATABASE_URL").map_err(|e| e.context(err))?; + Connection::connect(&db_url[..], TlsMode::None).map_err(Into::into) } pub(crate) fn create_pool() -> r2d2::Pool {