add github actions (#4)
* add github actions * fix clippy * skip check * get rid of collect * fix tests * run ignored tests
This commit is contained in:
parent
4f50385c96
commit
12f6944e59
8 changed files with 159 additions and 32 deletions
7
.github/dependabot.yml
vendored
7
.github/dependabot.yml
vendored
|
@ -8,3 +8,10 @@ updates:
|
||||||
time: "03:37" # UTC
|
time: "03:37" # UTC
|
||||||
commit-message:
|
commit-message:
|
||||||
prefix: "chore(cargo):"
|
prefix: "chore(cargo):"
|
||||||
|
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
|
commit-message:
|
||||||
|
prefix: "ci(actions):"
|
||||||
|
|
93
.github/workflows/rust.yml
vendored
Normal file
93
.github/workflows/rust.yml
vendored
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
name: Test and Build Rust
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
schedule:
|
||||||
|
# Check if it works with current dependencies (weekly on Wednesday 2:32 UTC)
|
||||||
|
- cron: '32 2 * * 3'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
name: Test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Label used to access the service container
|
||||||
|
postgres:
|
||||||
|
# Docker Hub image
|
||||||
|
image: postgres
|
||||||
|
# Provide the password for postgres
|
||||||
|
env:
|
||||||
|
POSTGRES_PASSWORD: postgres
|
||||||
|
POSTGRES_USER: postgres
|
||||||
|
# Set health checks to wait until postgres has started
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
|
||||||
|
options: >-
|
||||||
|
--health-cmd pg_isready
|
||||||
|
--health-interval 10s
|
||||||
|
--health-timeout 5s
|
||||||
|
--health-retries 5
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup Rust
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
components: clippy
|
||||||
|
override: true
|
||||||
|
profile: minimal
|
||||||
|
toolchain: nightly
|
||||||
|
|
||||||
|
- name: Run clippy
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: clippy
|
||||||
|
args: --verbose --all-targets --all-features -- -D warnings
|
||||||
|
|
||||||
|
- name: Install diesel-cli
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: install
|
||||||
|
args: diesel_cli --no-default-features --features "postgres"
|
||||||
|
|
||||||
|
- name: Setup db
|
||||||
|
run: diesel setup
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: test
|
||||||
|
args: --verbose --all-features
|
||||||
|
|
||||||
|
- name: Run dirty tests
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: test
|
||||||
|
args: --verbose --all-features --ignored
|
||||||
|
|
||||||
|
release:
|
||||||
|
name: Release x86_64-unknown-linux-gnu
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: test
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup Rust
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
override: true
|
||||||
|
profile: minimal
|
||||||
|
target: x86_64-unknown-linux-gnu
|
||||||
|
toolchain: nightly
|
||||||
|
|
||||||
|
- name: Build release
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: build
|
||||||
|
args: --release --verbose --all-features --target x86_64-unknown-linux-gnu
|
26
.github/workflows/style.yml
vendored
Normal file
26
.github/workflows/style.yml
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
name: Rust Code Formatting
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
rustfmt:
|
||||||
|
name: Rustfmt
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup Rust
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
profile: minimal
|
||||||
|
components: rustfmt
|
||||||
|
|
||||||
|
- name: Check format
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: fmt
|
||||||
|
args: -- --check --verbose
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
- Simplify usage by re-exporting serde traits - [#3](https://github.com/ayrat555/fang/pull/2)
|
- Simplify usage by re-exporting serde traits - [#3](https://github.com/ayrat555/fang/pull/3)
|
||||||
|
|
||||||
## 0.3.0 (2021-07-04)
|
## 0.3.0 (2021-07-04)
|
||||||
|
|
||||||
|
|
|
@ -152,25 +152,19 @@ impl Executor {
|
||||||
Ok(task) => self.storage.finish_task(&task).unwrap(),
|
Ok(task) => self.storage.finish_task(&task).unwrap(),
|
||||||
Err((task, error)) => self.storage.fail_task(&task, error).unwrap(),
|
Err((task, error)) => self.storage.fail_task(&task, error).unwrap(),
|
||||||
};
|
};
|
||||||
|
|
||||||
()
|
|
||||||
}
|
}
|
||||||
RetentionMode::RemoveAll => {
|
RetentionMode::RemoveAll => {
|
||||||
match result {
|
match result {
|
||||||
Ok(task) => self.storage.remove_task(task.id).unwrap(),
|
Ok(task) => self.storage.remove_task(task.id).unwrap(),
|
||||||
Err((task, _error)) => self.storage.remove_task(task.id).unwrap(),
|
Err((task, _error)) => self.storage.remove_task(task.id).unwrap(),
|
||||||
};
|
};
|
||||||
|
|
||||||
()
|
|
||||||
}
|
}
|
||||||
RetentionMode::RemoveFinished => match result {
|
RetentionMode::RemoveFinished => match result {
|
||||||
Ok(task) => {
|
Ok(task) => {
|
||||||
self.storage.remove_task(task.id).unwrap();
|
self.storage.remove_task(task.id).unwrap();
|
||||||
()
|
|
||||||
}
|
}
|
||||||
Err((task, error)) => {
|
Err((task, error)) => {
|
||||||
self.storage.fail_task(&task, error).unwrap();
|
self.storage.fail_task(&task, error).unwrap();
|
||||||
()
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -395,10 +389,10 @@ mod executor_tests {
|
||||||
let found_task = executor.storage.find_task_by_id(task.id).unwrap();
|
let found_task = executor.storage.find_task_by_id(task.id).unwrap();
|
||||||
|
|
||||||
assert_eq!(FangTaskState::Failed, found_task.state);
|
assert_eq!(FangTaskState::Failed, found_task.state);
|
||||||
assert_eq!(
|
assert!(found_task
|
||||||
"panicked during task execution Any".to_string(),
|
.error_message
|
||||||
found_task.error_message.unwrap()
|
.unwrap()
|
||||||
);
|
.contains("panicked during task execution Any"));
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
#![allow(clippy::nonstandard_macro_braces)]
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate diesel;
|
extern crate diesel;
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,12 @@ pub struct Postgres {
|
||||||
pub connection: PgConnection,
|
pub connection: PgConnection,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Default for Postgres {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Postgres {
|
impl Postgres {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let connection = Self::pg_connection(None);
|
let connection = Self::pg_connection(None);
|
||||||
|
@ -155,7 +161,7 @@ impl Postgres {
|
||||||
.ok()
|
.ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fetch_task_of_type(&self, task_type: &String) -> Option<Task> {
|
fn fetch_task_of_type(&self, task_type: &str) -> Option<Task> {
|
||||||
fang_tasks::table
|
fang_tasks::table
|
||||||
.order(fang_tasks::created_at.asc())
|
.order(fang_tasks::created_at.asc())
|
||||||
.limit(1)
|
.limit(1)
|
||||||
|
|
|
@ -22,6 +22,12 @@ pub struct WorkerParams {
|
||||||
pub task_type: Option<String>,
|
pub task_type: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Default for WorkerParams {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl WorkerParams {
|
impl WorkerParams {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
@ -67,7 +73,7 @@ impl WorkerPool {
|
||||||
.worker_params
|
.worker_params
|
||||||
.task_type
|
.task_type
|
||||||
.clone()
|
.clone()
|
||||||
.unwrap_or("".to_string());
|
.unwrap_or_else(|| "".to_string());
|
||||||
let name = format!("worker_{}{}", worker_type, idx);
|
let name = format!("worker_{}{}", worker_type, idx);
|
||||||
WorkerThread::spawn_in_pool(self.worker_params.clone(), name, 0)
|
WorkerThread::spawn_in_pool(self.worker_params.clone(), name, 0)
|
||||||
}
|
}
|
||||||
|
@ -200,26 +206,19 @@ mod job_pool_tests {
|
||||||
|
|
||||||
assert!(tasks.len() > 40);
|
assert!(tasks.len() > 40);
|
||||||
|
|
||||||
let test_worker1_jobs: Vec<Task> = tasks
|
let test_worker1_jobs = tasks.clone().into_iter().filter(|job| {
|
||||||
.clone()
|
serde_json::to_string(&job.metadata)
|
||||||
.into_iter()
|
.unwrap()
|
||||||
.filter(|job| {
|
.contains("worker_1")
|
||||||
serde_json::to_string(&job.metadata)
|
});
|
||||||
.unwrap()
|
|
||||||
.contains("worker_1")
|
|
||||||
})
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
let test_worker2_jobs: Vec<Task> = tasks
|
let test_worker2_jobs = tasks.into_iter().filter(|job| {
|
||||||
.into_iter()
|
serde_json::to_string(&job.metadata)
|
||||||
.filter(|job| {
|
.unwrap()
|
||||||
serde_json::to_string(&job.metadata)
|
.contains("worker_2")
|
||||||
.unwrap()
|
});
|
||||||
.contains("worker_2")
|
|
||||||
})
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
assert!(test_worker1_jobs.len() > 20);
|
assert!(test_worker1_jobs.count() > 20);
|
||||||
assert!(test_worker2_jobs.len() > 20);
|
assert!(test_worker2_jobs.count() > 20);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue