diff --git a/.github/workflows/rust.yaml b/.github/workflows/rust.yaml index a77cf676..503ec371 100644 --- a/.github/workflows/rust.yaml +++ b/.github/workflows/rust.yaml @@ -32,7 +32,7 @@ jobs: uses: baptiste0928/cargo-install@v1 with: crate: cargo-nextest - locked: true + args: --locked - name: Run cargo build uses: actions-rs/cargo@v1 @@ -75,7 +75,7 @@ jobs: with: repository: stoatchat/javascript-client-api path: api - token: ${{ secrets.PAT }} + ssh-key: ${{ secrets.DEPLOY_KEY_JAVASCRIPT_CLIENT_API }} - name: Download OpenAPI specification if: github.event_name != 'pull_request' && github.ref_name == 'main' diff --git a/.github/workflows/triage_issue.yml b/.github/workflows/triage_issue.yml deleted file mode 100644 index b74d8bed..00000000 --- a/.github/workflows/triage_issue.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: Add Issue to Board - -on: - issues: - types: [opened] - -jobs: - track_issue: - runs-on: ubuntu-latest - steps: - - name: Get project data - env: - GITHUB_TOKEN: ${{ secrets.PAT }} - run: | - gh api graphql -f query=' - query { - organization(login: "stoatchat"){ - projectV2(number: 3) { - id - fields(first:20) { - nodes { - ... on ProjectV2SingleSelectField { - id - name - options { - id - name - } - } - } - } - } - } - }' > project_data.json - - echo 'PROJECT_ID='$(jq '.data.organization.projectV2.id' project_data.json) >> $GITHUB_ENV - echo 'STATUS_FIELD_ID='$(jq '.data.organization.projectV2.fields.nodes[] | select(.name== "Status") | .id' project_data.json) >> $GITHUB_ENV - echo 'TODO_OPTION_ID='$(jq '.data.organization.projectV2.fields.nodes[] | select(.name== "Status") | .options[] | select(.name=="Todo") |.id' project_data.json) >> $GITHUB_ENV - - - name: Add issue to project - env: - GITHUB_TOKEN: ${{ secrets.PAT }} - ISSUE_ID: ${{ github.event.issue.node_id }} - run: | - item_id="$( gh api graphql -f query=' - mutation($project:ID!, $issue:ID!) { - addProjectV2ItemById(input: {projectId: $project, contentId: $issue}) { - item { - id - } - } - }' -f project=$PROJECT_ID -f issue=$ISSUE_ID --jq '.data.addProjectV2ItemById.item.id')" - - echo 'ITEM_ID='$item_id >> $GITHUB_ENV diff --git a/.github/workflows/triage_pr.yml b/.github/workflows/triage_pr.yml deleted file mode 100644 index 64523ffe..00000000 --- a/.github/workflows/triage_pr.yml +++ /dev/null @@ -1,79 +0,0 @@ -name: Add PR to Board - -on: - pull_request_target: - types: [opened, synchronize, ready_for_review, review_requested] - -jobs: - track_pr: - runs-on: ubuntu-latest - steps: - - name: Get project data - env: - GITHUB_TOKEN: ${{ secrets.PAT }} - run: | - gh api graphql -f query=' - query { - organization(login: "stoatchat"){ - projectV2(number: 5) { - id - fields(first:20) { - nodes { - ... on ProjectV2SingleSelectField { - id - name - options { - id - name - } - } - } - } - } - } - }' > project_data.json - - echo 'PROJECT_ID='$(jq '.data.organization.projectV2.id' project_data.json) >> $GITHUB_ENV - echo 'STATUS_FIELD_ID='$(jq '.data.organization.projectV2.fields.nodes[] | select(.name== "Status") | .id' project_data.json) >> $GITHUB_ENV - echo 'INCOMING_OPTION_ID='$(jq '.data.organization.projectV2.fields.nodes[] | select(.name== "Status") | .options[] | select(.name=="🆕 Untriaged") |.id' project_data.json) >> $GITHUB_ENV - - - name: Add PR to project - env: - GITHUB_TOKEN: ${{ secrets.PAT }} - PR_ID: ${{ github.event.pull_request.node_id }} - run: | - item_id="$( gh api graphql -f query=' - mutation($project:ID!, $pr:ID!) { - addProjectV2ItemById(input: {projectId: $project, contentId: $pr}) { - item { - id - } - } - }' -f project=$PROJECT_ID -f pr=$PR_ID --jq '.data.addProjectV2ItemById.item.id')" - - echo 'ITEM_ID='$item_id >> $GITHUB_ENV - - - name: Set fields - env: - GITHUB_TOKEN: ${{ secrets.PAT }} - run: | - gh api graphql -f query=' - mutation ( - $project: ID! - $item: ID! - $status_field: ID! - $status_value: String! - ) { - set_status: updateProjectV2ItemFieldValue(input: { - projectId: $project - itemId: $item - fieldId: $status_field - value: { - singleSelectOptionId: $status_value - } - }) { - projectV2Item { - id - } - } - }' -f project=$PROJECT_ID -f item=$ITEM_ID -f status_field=$STATUS_FIELD_ID -f status_value=${{ env.INCOMING_OPTION_ID }} --silent diff --git a/.github/workflows/validate-pr-title.yml b/.github/workflows/validate-pr-title.yml new file mode 100644 index 00000000..b72cc236 --- /dev/null +++ b/.github/workflows/validate-pr-title.yml @@ -0,0 +1,20 @@ +name: "Lint PR" + +on: + pull_request_target: + types: + - opened + - reopened + - edited + - synchronize + +jobs: + main: + name: Validate PR title + runs-on: ubuntu-latest + permissions: + pull-requests: read + steps: + - uses: amannn/action-semantic-pull-request@v6 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/STYLE_GUIDE.md b/STYLE_GUIDE.md deleted file mode 100644 index 7999b388..00000000 --- a/STYLE_GUIDE.md +++ /dev/null @@ -1,73 +0,0 @@ -# Code Style Guide - -Beyond using Cargo format and Clippy, there are some specific code style guidelines laid out in this document for different parts of the project. - -## Writing Style - -- Shorten "identifier" to "Id" with that exact casing, i.e. Server Id. - -## `core/database` crate - -w.r.t. `model.rs` files - -- All struct definitions must be commented. - ```rust - /// Server - pub struct Server { - /// Name of the server - pub name: String, - ``` -- Struct definitions should not include derives unless necessary (if additional traits such as Hash are required) and instead use `auto_derived!` and `auto_derived_partial!`. - ```rust - auto_derived_partial!( - /// Server - pub struct Server { .. }, - "PartialServer" - ); - ``` -- `auto_derived!` macro accepts multiple entries and should be used as such: - - ```rust - auto_derived!( - /// Optional fields on server object - pub enum FieldsServer { .. } - - /// Optional fields on server object - pub enum FieldsRole { .. } - ); - ``` - -- If special serialisation conditions are required, such as checking if a boolean is false, use the existing definitions for these functions from the crate root: - ```rust - #[serde(skip_serializing_if = "crate::if_false", default)] - ``` -- `impl` blocks may be defined below the struct definitions and should be ordered in the same order of definition. Methods in the block must follow the same guidelines as traits where-in: methods are ordered in terms of CRUD, there are empty line breaks, and methods are commented. - -w.r.t. `ops` module for models - -- All traits must use a the name format `AbstractPlural` where Plural is the plural form of the collection. e.g. Servers -- Traits defined must follow these guidelines: - - - Methods are ordered in terms of CRUD, create-read-update-delete ordering. - - ```rust - #[async_trait] - pub trait AbstractServerMembers: Sync + Send { - /// Insert a new server member into the database - async fn insert_member(&self, member: &Member) -> Result<()>; - - /// Fetch a server member by their id - async fn fetch_member(&self, server_id: &str, user_id: &str) -> Result; - - /// Update information for a server member - async fn update_member(&self, .. ) -> Result<()>; - - /// Delete a server member by their id - async fn delete_member(&self, id: &MemberCompositeKey) -> Result<()>; - } - ``` - - - There should be an empty line break between each method declaration. - - All methods must have an appropriate comment. - -- When implementing the trait defined in `ops.rs` with each driver, the method declaration style should be the same for ease of searching: same ordering, same comments, same line breaks.