diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..fc20bf9 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +# github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +# patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +# ko_fi: # Replace with a single Ko-fi username +# tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: realaravinth +issuehunt: # Replace with a single IssueHunt username +# otechie: # Replace with a single Otechie username +custom: ['https://batsense.net/donate'] diff --git a/.github/workflows/clippy-fmt.yml b/.github/workflows/clippy-fmt.yml new file mode 100644 index 0000000..d1debab --- /dev/null +++ b/.github/workflows/clippy-fmt.yml @@ -0,0 +1,64 @@ +name: Lint + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: + - master + - db-abstract + +jobs: + fmt: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: ⚡ Cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + - uses: actions/checkout@v2 + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + components: rustfmt + - name: Check with rustfmt + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check + + clippy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: ⚡ Cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + - uses: actions/checkout@v2 + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + components: clippy + override: true + + - name: Check with Clippy + uses: actions-rs/clippy-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: --workspace --tests --all-features diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 0000000..3b48d03 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,118 @@ +name: Coverage + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: + - master + - db-abstract + +jobs: + build_and_test: + strategy: + fail-fast: false + matrix: + version: + - stable + #- 1.51.0 + + name: ${{ matrix.version }} - x86_64-unknown-linux-gnu + runs-on: ubuntu-latest + + # services: + # postgres: + # image: postgres + # env: + # POSTGRES_PASSWORD: password + # POSTGRES_USER: postgres + # POSTGRES_DB: postgres + # options: >- + # --health-cmd pg_isready + # --health-interval 10s + # --health-timeout 5s + # --health-retries 5 + # ports: + # - 5432:5432 + + + # maria: + # image: mariadb + # env: + # MARIADB_USER: "maria" + # MARIADB_PASSWORD: "password" + # MARIADB_ROOT_PASSWORD: "password" + # MARIADB_DATABASE: "maria" + # options: >- + # --health-cmd="mysqladmin ping" + # --health-interval=10s + # --health-timeout=5s + # --health-retries=10 + # ports: + # - 3306:3306 + + + steps: + - uses: actions/checkout@v2 + - name: ⚡ Cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + + # - name: load env + # run: | + # source .env_sample \ + # && echo "POSTGRES_DATABASE_URL=$POSTGRES_DATABASE_URL" >> $GITHUB_ENV \ + # && echo "MARIA_DATABASE_URL=$MARIA_DATABASE_URL" >> $GITHUB_ENV + + + # - uses: actions/setup-node@v2 + # with: + # node-version: "16.x" + + - name: Install ${{ matrix.version }} + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.version }}-x86_64-unknown-linux-gnu + profile: minimal + override: true + + # - name: Build frontend + # run: make frontend + # + # - name: Run the frontend tests + # run: make frontend-test + # + # - name: Run migrations + # run: make migrate + # env: + # POSTGRES_DATABASE_URL: "${{ env.POSTGRES_DATABASE_URL }}" + # MARIA_DATABASE_URL: "${{ env.MARIA_DATABASE_URL }}" + # + # - name: build frontend + # run: make frontend + + - name: Generate coverage file + if: github.event_name == 'pull_request' + #if: (github.ref == 'refs/heads/master' || github.event_name == 'pull_request') + uses: actions-rs/tarpaulin@v0.1 + with: + args: "-t 1200" + env: + # POSTGRES_DATABASE_URL: "${{ env.POSTGRES_DATABASE_URL }}" + # MARIA_DATABASE_URL: "${{ env.MARIA_DATABASE_URL }}" + # GIT_HASH is dummy value. I guess build.rs is skipped in tarpaulin + # execution so this value is required for preventing meta tests from + # panicking + GIT_HASH: 8e77345f1597e40c2e266cb4e6dee74888918a61 + # CACHE_BUSTER_FILE_MAP: '{"map":{"./static/bundle/main.js":"./prod/bundle/main.1417115E59909BE0A01040A45A398ADB09D928DF89CCF038FA44B14850442096.js"},"base_dir":"./prod"}' + COMPILED_DATE: "2021-07-21" + + - name: Upload to Codecov + if: github.event_name == 'pull_request' + uses: codecov/codecov-action@v2 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 0000000..89691e2 --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,139 @@ +name: Build + +on: + schedule: + - cron: "0 9 * * *" + pull_request: + types: [opened, synchronize, reopened] + push: + branches: + - master + - "*" + - '!gh-pages' + +jobs: + build_and_test: + strategy: + fail-fast: false + matrix: + version: + - stable + + name: ${{ matrix.version }} - x86_64-unknown-linux-gnu + runs-on: ubuntu-latest + + services: + # postgres: + # image: postgres + # env: + # POSTGRES_PASSWORD: password + # POSTGRES_USER: postgres + # POSTGRES_DB: postgres + # options: >- + # --health-cmd pg_isready + # --health-interval 10s + # --health-timeout 5s + # --health-retries 5 + # ports: + # - 5432:5432 + # + # maria: + # image: mariadb + # env: + # MARIADB_USER: "maria" + # MARIADB_PASSWORD: "password" + # MARIADB_ROOT_PASSWORD: "password" + # MARIADB_DATABASE: "maria" + # options: >- + # --health-cmd="mysqladmin ping" + # --health-interval=10s + # --health-timeout=5s + # --health-retries=10 + # ports: + # - 3306:3306 + + steps: + - uses: actions/checkout@v2 + - name: ⚡ Cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + node_modules + ./docs/openapi/node_modules + target + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + # - name: load env + # run: | + # source .env_sample \ + # && echo "POSTGRES_DATABASE_URL=$POSTGRES_DATABASE_URL" >> $GITHUB_ENV \ + # && echo "MARIA_DATABASE_URL=$MARIA_DATABASE_URL" >> $GITHUB_ENV + + # - uses: actions/setup-node@v2 + # with: + # node-version: "16.x" + + - name: Install ${{ matrix.version }} + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.version }}-x86_64-unknown-linux-gnu + profile: minimal + override: true + + # - name: Run migrations + # run: make migrate + # env: + # POSTGRES_DATABASE_URL: "${{ env.POSTGRES_DATABASE_URL }}" + # MARIA_DATABASE_URL: "${{ env.MARIA_DATABASE_URL }}" + + - name: build + run: make + # env: + # POSTGRES_DATABASE_URL: "${{ env.POSTGRES_DATABASE_URL }}" + # MARIA_DATABASE_URL: "${{ env.MARIA_DATABASE_URL }}" + + # - name: build frontend + # run: make frontend + # + # - name: lint frontend + # run: yarn lint + + - name: run tests + run: make test + # env: + # POSTGRES_DATABASE_URL: "${{ env.POSTGRES_DATABASE_URL }}" + # MARIA_DATABASE_URL: "${{ env.MARIA_DATABASE_URL }}" + + - name: Login to DockerHub + if: (github.ref == 'refs/heads/master' || github.event_name == 'push') && github.repository == 'realaravinth/dummyserve' + uses: docker/login-action@v1 + with: + username: realaravinth + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: publish docker images + if: (github.ref == 'refs/heads/master' || github.event_name == 'push') && github.repository == 'realaravinth/dummyserve' + run: make docker-publish + + - name: publish bins + if: (github.ref == 'refs/heads/master' || github.event_name == 'push') && github.repository == 'realaravinth/dummyserve' + run: ./scripts/publish.sh master latest + + - name: generate documentation + if: matrix.version == 'stable' && (github.repository == 'realaravinth/dummyserve') + run: make doc + env: + POSTGRES_DATABASE_URL: "${{ env.POSTGRES_DATABASE_URL }}" + MARIA_DATABASE_URL: "${{ env.MARIA_DATABASE_URL }}" + GIT_HASH: 8e77345f1597e40c2e266cb4e6dee74888918a61 # dummy value + COMPILED_DATE: "2021-07-21" + + - name: Deploy to GitHub Pages + if: matrix.version == 'stable' && (github.ref == 'refs/heads/master' && github.repository == 'realaravinth/dummyserve') + uses: JamesIves/github-pages-deploy-action@3.7.1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH: gh-pages + FOLDER: target/doc diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9915ed0 --- /dev/null +++ b/Makefile @@ -0,0 +1,46 @@ +default: ## Build app in debug mode + cargo build + +check: ## Check for syntax errors on all workspaces + cargo check --workspace --tests --all-features + +clean: ## Delete build artifacts + @cargo clean + +coverage: migrate ## Generate code coverage report in HTML format + $(call cache_bust) + cargo tarpaulin -t 1200 --out Html + +doc: ## Generate documentation + #yarn doc + cargo doc --no-deps --workspace --all-features + +docker: ## Build Docker image + docker build -t realaravinth/dummyserve:master -t realaravinth/dummyserve:latest . + +docker-publish: docker ## Build and publish Docker image + docker push realaravinth/dummyserve:master + docker push realaravinth/dummyserve:latest + +env: ## Setup development environtment + cargo fetch + +lint: ## Lint codebase + cargo fmt -v --all -- --emit files + cargo clippy --workspace --tests --all-features + +release: ## Build app with release optimizations + cargo build --release + +run: ## Run app in debug mode + cargo run + + +test: ## Run all available tests + cargo test --no-fail-fast + +xml-test-coverage: ## Generate code coverage report in XML format + cargo tarpaulin -t 1200 --out Xml + +help: ## Prints help for targets with comments + @cat $(MAKEFILE_LIST) | grep -E '^[a-zA-Z_-]+:.*?## .*$$' | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'