summaryrefslogtreecommitdiffstats
path: root/.github/workflows/main.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/main.yml')
-rw-r--r--.github/workflows/main.yml96
1 files changed, 96 insertions, 0 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..80c2290
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,96 @@
+name: Main
+
+on: push
+
+jobs:
+ codestyle:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set up Rust
+ uses: hecrj/setup-rust-action@v1
+ with:
+ components: rustfmt
+ rust-version: nightly
+ - uses: actions/checkout@v1
+ - run: cargo fmt --all -- --check
+
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set up Rust
+ uses: hecrj/setup-rust-action@v1
+ with:
+ components: clippy
+ - uses: actions/checkout@v1
+ - run: cargo clippy --all-targets -- -D clippy::all
+
+ compile:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set up Rust
+ uses: hecrj/setup-rust-action@v1
+ - uses: actions/checkout@master
+ - run: cargo check --all
+
+ test:
+ needs: [codestyle, lint, compile]
+ strategy:
+ matrix:
+ rust: [stable, beta, nightly]
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Setup Rust
+ uses: hecrj/setup-rust-action@v1
+ with:
+ rust-version: ${{ matrix.rust }}
+ - name: Checkout
+ uses: actions/checkout@v1
+ - name: Test
+ run: cargo test
+ - name: Coverage
+ if: matrix.rust == 'stable'
+ run: |
+ # tarpaulin knows how to extract data from ci
+ # ci services and GitHub actions is not one of them
+ # work around that by masquerading as travis
+ # https://github.com/xd009642/coveralls-api/blob/6da4ccd7c6eaf1df04cfd1e560362de70fa80605/src/lib.rs#L247-L262
+ export TRAVIS_JOB_ID=${GITHUB_SHA}
+ export TRAVIS_PULL_REQUEST=false
+ export TRAVIS_BRANCH=${GITHUB_REF##*/}
+ cargo install cargo-tarpaulin
+ cargo tarpaulin --ciserver travis-ci --coveralls $TRAVIS_JOB_ID
+
+ publish-docs:
+ if: github.ref == 'refs/heads/master'
+ runs-on: ubuntu-latest
+ needs: [test]
+ steps:
+ - name: Set up Rust
+ uses: hecrj/setup-rust-action@v1
+ - uses: actions/checkout@v1
+ - name: Generate Docs
+ shell: bash
+ run: |
+ cargo doc --no-deps
+ echo "<meta http-equiv=refresh content=0;url=`echo ${{ github.repository }} | cut -d / -f 2 | tr '-' '_'`/index.html>" > target/doc/index.html
+ - name: Publish
+ uses: docker://peaceiris/gh-pages:v2.3.1
+ env:
+ PUBLISH_BRANCH: gh-pages
+ PUBLISH_DIR: ./target/doc
+ PERSONAL_TOKEN: ${{ secrets.GH_PAGES_TOKEN }}
+ with:
+ emptyCommits: true
+
+ publish-crate:
+ if: startsWith(github.ref, 'refs/tags/')
+ runs-on: ubuntu-latest
+ needs: [test]
+ steps:
+ - name: Set up Rust
+ uses: hecrj/setup-rust-action@v1
+ - uses: actions/checkout@v1
+ - name: Publish
+ shell: bash
+ run: cargo publish --token ${{ secrets.CRATES_TOKEN }} \ No newline at end of file