mirror of
https://github.com/actix/examples
synced 2024-11-23 14:31:07 +01:00
migrate ci to github actions (#367)
This commit is contained in:
parent
e3c6a1ec07
commit
d836b046c9
58
.github/workflows/clippy-fmt.yml
vendored
Normal file
58
.github/workflows/clippy-fmt.yml
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
name: lint
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize, reopened]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
fmt:
|
||||||
|
name: rustfmt check
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
components: rustfmt
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: rustfmt
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: fmt
|
||||||
|
args: --all -- --check
|
||||||
|
|
||||||
|
clippy:
|
||||||
|
name: clippy check
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: cache cargo artifacts
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cargo/registry
|
||||||
|
~/.cargo/git
|
||||||
|
./target/debug
|
||||||
|
key: cargo-clippy-${{ matrix.version }}-${{ hashFiles('**/Cargo.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
cargo-clippy-${{ matrix.version }}-
|
||||||
|
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
components: clippy
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: clippy
|
||||||
|
uses: actions-rs/clippy-check@v1
|
||||||
|
timeout-minutes: 30
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
args: --workspace --all-features --tests
|
60
.github/workflows/linux.yml
vendored
Normal file
60
.github/workflows/linux.yml
vendored
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
name: CI (Linux)
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize, reopened]
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_and_test:
|
||||||
|
name: ${{ matrix.version }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
version: ["stable", "nightly"]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: cache cargo artifacts
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cargo/registry
|
||||||
|
~/.cargo/git
|
||||||
|
./target/debug
|
||||||
|
key: cargo-linux-${{ matrix.version }}-${{ hashFiles('**/Cargo.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
cargo-linux-${{ matrix.version }}-
|
||||||
|
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: ${{ matrix.version }}
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: cargo check
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
timeout-minutes: 30
|
||||||
|
with:
|
||||||
|
command: check
|
||||||
|
args: --workspace --bins --examples --tests
|
||||||
|
|
||||||
|
- name: start redis
|
||||||
|
uses: supercharge/redis-github-action@1.1.0
|
||||||
|
with:
|
||||||
|
redis-version: 6
|
||||||
|
|
||||||
|
- name: cargo test
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
timeout-minutes: 30
|
||||||
|
env:
|
||||||
|
# included in example of redis, not clear its purpose
|
||||||
|
CI: true
|
||||||
|
with:
|
||||||
|
command: test
|
||||||
|
args: --workspace --all-features --no-fail-fast -- --nocapture
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,6 +5,7 @@
|
|||||||
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
|
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
|
||||||
# More information here http://doc.crates.io/guide.html#cargotoml-vs-cargolock
|
# More information here http://doc.crates.io/guide.html#cargotoml-vs-cargolock
|
||||||
**/Cargo.lock
|
**/Cargo.lock
|
||||||
|
!/Cargo.lock
|
||||||
|
|
||||||
# These are backup files generated by rustfmt
|
# These are backup files generated by rustfmt
|
||||||
**/*.rs.bk
|
**/*.rs.bk
|
||||||
|
54
.travis.yml
54
.travis.yml
@ -1,54 +0,0 @@
|
|||||||
language: rust
|
|
||||||
dist: xenial
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ppa:chris-lea/redis-server
|
|
||||||
packages:
|
|
||||||
- redis-server
|
|
||||||
|
|
||||||
services:
|
|
||||||
- redis-server
|
|
||||||
|
|
||||||
cache:
|
|
||||||
apt: true
|
|
||||||
directories:
|
|
||||||
- $HOME/.cargo
|
|
||||||
- $HOME/.rustup
|
|
||||||
|
|
||||||
before_cache:
|
|
||||||
- rm -rf $HOME/.cargo/registry
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- rust: stable
|
|
||||||
- rust: beta
|
|
||||||
- rust: nightly
|
|
||||||
allow_failures:
|
|
||||||
- rust: nightly
|
|
||||||
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
# - RUSTFLAGS="-C link-dead-code"
|
|
||||||
- OPENSSL_VERSION=openssl-1.1.1
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- sudo apt-get -qq update
|
|
||||||
- sudo apt-get -y install libssl-dev libelf-dev libdw-dev binutils-dev libiberty-dev
|
|
||||||
|
|
||||||
# Add clippy
|
|
||||||
before_script:
|
|
||||||
- |
|
|
||||||
if [[ "$TRAVIS_RUST_VERSION" == "nightly" ]]; then
|
|
||||||
rustup component add clippy --toolchain=nightly
|
|
||||||
fi
|
|
||||||
- export PATH=$PATH:~/.cargo/bin
|
|
||||||
|
|
||||||
script:
|
|
||||||
- cargo check --all
|
|
||||||
- cargo test --all --no-fail-fast
|
|
||||||
- |
|
|
||||||
if [[ "$TRAVIS_RUST_VERSION" == "nightly" ]]; then
|
|
||||||
cargo clippy
|
|
||||||
fi
|
|
6384
Cargo.lock
generated
Normal file
6384
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
8
codecov.yml
Normal file
8
codecov.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
coverage:
|
||||||
|
status:
|
||||||
|
project:
|
||||||
|
default:
|
||||||
|
threshold: 1% # make CI green
|
||||||
|
patch:
|
||||||
|
default:
|
||||||
|
threshold: 1% # make CI green
|
@ -24,11 +24,3 @@ async fn main() -> std::io::Result<()> {
|
|||||||
.run()
|
.run()
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
#[test]
|
|
||||||
fn sample_test() {
|
|
||||||
assert!(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -32,11 +32,11 @@ fn json_error_handler(err: error::JsonPayloadError, _req: &HttpRequest) -> error
|
|||||||
#[actix_web::main]
|
#[actix_web::main]
|
||||||
async fn main() -> std::io::Result<()> {
|
async fn main() -> std::io::Result<()> {
|
||||||
HttpServer::new(|| {
|
HttpServer::new(|| {
|
||||||
App::new()
|
App::new().service(greet).app_data(
|
||||||
.service(greet)
|
web::JsonConfig::default()
|
||||||
.app_data(web::JsonConfig::default()
|
// register error_handler for JSON extractors.
|
||||||
.error_handler(json_error_handler)
|
.error_handler(json_error_handler),
|
||||||
) // <- register error_handler for JSON extractors.
|
)
|
||||||
})
|
})
|
||||||
.bind("127.0.0.1:8088")?
|
.bind("127.0.0.1:8088")?
|
||||||
.run()
|
.run()
|
||||||
|
@ -108,7 +108,6 @@ mod test {
|
|||||||
App,
|
App,
|
||||||
};
|
};
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use time;
|
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_workflow() {
|
async fn test_workflow() {
|
||||||
@ -233,10 +232,7 @@ mod test {
|
|||||||
.into_iter()
|
.into_iter()
|
||||||
.find(|c| c.name() == "test-session")
|
.find(|c| c.name() == "test-session")
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(
|
assert_ne!(cookie_1.value(), cookie_2.value());
|
||||||
true,
|
|
||||||
cookie_1.value().to_string() != cookie_2.value().to_string()
|
|
||||||
);
|
|
||||||
|
|
||||||
let result_5 = resp_5.json::<IndexResponse>().await.unwrap();
|
let result_5 = resp_5.json::<IndexResponse>().await.unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
@ -294,7 +290,7 @@ mod test {
|
|||||||
counter: 0
|
counter: 0
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
assert!(cookie_3.value().to_string() != cookie_2.value().to_string());
|
assert_ne!(cookie_3.value(), cookie_2.value());
|
||||||
|
|
||||||
// Step 9: POST to logout, including session cookie #2
|
// Step 9: POST to logout, including session cookie #2
|
||||||
// - set-cookie actix-session will be in response with session cookie #2
|
// - set-cookie actix-session will be in response with session cookie #2
|
||||||
@ -333,6 +329,6 @@ mod test {
|
|||||||
.into_iter()
|
.into_iter()
|
||||||
.find(|c| c.name() == "test-session")
|
.find(|c| c.name() == "test-session")
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(cookie_5.value().to_string() != cookie_2.value().to_string());
|
assert_ne!(cookie_5.value(), cookie_2.value());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ impl Broadcaster {
|
|||||||
fn spawn_ping(me: Data<Mutex<Self>>) {
|
fn spawn_ping(me: Data<Mutex<Self>>) {
|
||||||
actix_web::rt::spawn(async move {
|
actix_web::rt::spawn(async move {
|
||||||
let mut task = interval_at(Instant::now(), Duration::from_secs(10));
|
let mut task = interval_at(Instant::now(), Duration::from_secs(10));
|
||||||
while let Some(_) = task.next().await {
|
while task.next().await.is_some() {
|
||||||
me.lock().unwrap().remove_stale_clients();
|
me.lock().unwrap().remove_stale_clients();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -119,7 +119,7 @@ impl Handler<Connect> for ChatServer {
|
|||||||
// auto join session to Main room
|
// auto join session to Main room
|
||||||
self.rooms
|
self.rooms
|
||||||
.entry("Main".to_owned())
|
.entry("Main".to_owned())
|
||||||
.or_insert(HashSet::new())
|
.or_insert_with(HashSet::new)
|
||||||
.insert(id);
|
.insert(id);
|
||||||
|
|
||||||
// send id back
|
// send id back
|
||||||
@ -198,7 +198,7 @@ impl Handler<Join> for ChatServer {
|
|||||||
|
|
||||||
self.rooms
|
self.rooms
|
||||||
.entry(name.clone())
|
.entry(name.clone())
|
||||||
.or_insert(HashSet::new())
|
.or_insert_with(HashSet::new)
|
||||||
.insert(id);
|
.insert(id);
|
||||||
|
|
||||||
self.send_message(&name, "Someone connected", id);
|
self.send_message(&name, "Someone connected", id);
|
||||||
|
Loading…
Reference in New Issue
Block a user