diff --git a/.github/ISSUE_TEMPLATE/ask-for-help.yaml b/.github/ISSUE_TEMPLATE/ask-for-help.yaml new file mode 100644 index 0000000..a818d87 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/ask-for-help.yaml @@ -0,0 +1,15 @@ +name: "❓ Ask for help" +description: "Please go to the Discussions tab" +body: + - type: markdown + attributes: + value: | + Please go to https://github.com/louislam/dockge/discussions + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "Please go to https://github.com/louislam/dockge/discussions, here is for bug report only" + description: "" + options: + - label: "I understand" + required: true diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 0000000..a5acf3d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,99 @@ +name: "🐛 Bug Report" +description: "Submit a bug report to help us improve" +#title: "[Bug] " +labels: [bug] +body: + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "⚠️ Please verify that this bug has NOT been reported before." + description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/dockge/issues?q=)" + options: + - label: "I checked and didn't find similar issue" + required: true + - type: checkboxes + attributes: + label: "🛡️ Security Policy" + description: Please review the security policy before reporting security related issues/bugs. + options: + - label: I agree to have read this project [Security Policy](https://github.com/louislam/dockge/security/policy) + required: true + - type: textarea + id: description + validations: + required: false + attributes: + label: "Description" + description: "You could also upload screenshots" + - type: textarea + id: steps-to-reproduce + validations: + required: true + attributes: + label: "👟 Reproduction steps" + description: "How do you trigger this bug? Please walk us through it step by step." + placeholder: "..." + - type: textarea + id: expected-behavior + validations: + required: true + attributes: + label: "👀 Expected behavior" + description: "What did you think would happen?" + placeholder: "..." + - type: textarea + id: actual-behavior + validations: + required: true + attributes: + label: "😓 Actual Behavior" + description: "What actually happen?" + placeholder: "..." + - type: input + id: dockge-version + attributes: + label: "Dockge Version" + description: "Which version of Dockge are you running? Please do NOT provide the docker tag such as latest or 1" + placeholder: "Ex. 1.1.1" + validations: + required: true + - type: input + id: operating-system + attributes: + label: "💻 Operating System and Arch" + description: "Which OS is your server/device running on?" + placeholder: "Ex. Ubuntu 20.04 x64 " + validations: + required: true + - type: input + id: browser-vendor + attributes: + label: "🌐 Browser" + description: "Which browser are you running on?" + placeholder: "Ex. Google Chrome 95.0.4638.69" + validations: + required: true + - type: input + id: docker-version + attributes: + label: "🐋 Docker Version" + description: "If running with Docker, which version are you running?" + placeholder: "Ex. Docker 20.10.9 / K8S / Podman" + validations: + required: false + - type: input + id: nodejs-version + attributes: + label: "🟩 NodeJS Version" + description: "If running with Node.js? which version are you running?" + placeholder: "Ex. 14.18.0" + validations: + required: false + - type: textarea + id: logs + attributes: + label: "📝 Relevant log output" + description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + render: shell + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100644 index 0000000..4a511b2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,15 @@ +name: 🚀 Feature Request +description: "Please go to the Discussions tab" +body: + - type: markdown + attributes: + value: | + Please go to https://github.com/louislam/dockge/discussions + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "Please go to https://github.com/louislam/dockge/discussions, here is for bug report only" + description: "" + options: + - label: "I understand" + required: true diff --git a/.github/ISSUE_TEMPLATE/security.md b/.github/ISSUE_TEMPLATE/security.md new file mode 100644 index 0000000..ab03b45 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/security.md @@ -0,0 +1,19 @@ +--- + +name: "Security Issue" +about: "Just for alerting @louislam, do not provide any details here" +title: "Security Issue" +ref: "main" +labels: + +- security + +--- + +DO NOT PROVIDE ANY DETAILS HERE. Please privately report to https://github.com/louislam/dockge/security/advisories/new. + + +Why need this issue? It is because GitHub Advisory do not send a notification to @louislam, it is a workaround to do so. + +Your GitHub Advisory URL: + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..c820f96 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,34 @@ +⚠️⚠️⚠️ Since we do not accept all types of pull requests and do not want to waste your time. Please be sure that you have read pull request rules: +https://github.com/louislam/dockge/blob/master/CONTRIBUTING.md + +Tick the checkbox if you understand [x]: +- [ ] I have read and understand the pull request rules. + +# Description + +Fixes #(issue) + +## Type of change + +Please delete any options that are not relevant. + +- Bug fix (non-breaking change which fixes an issue) +- User interface (UI) +- New feature (non-breaking change which adds functionality) +- Breaking change (fix or feature that would cause existing functionality to not work as expected) +- Other +- This change requires a documentation update + +## Checklist + +- [ ] My code follows the style guidelines of this project +- [ ] I ran ESLint and other linters for modified files +- [ ] I have performed a self-review of my own code and tested it +- [ ] I have commented my code, particularly in hard-to-understand areas + (including JSDoc for methods) +- [ ] My changes generate no new warnings +- [ ] My code needed automated testing. I have added them (this is optional task) + +## Screenshots (if any) + +Please do not use any external image service. Instead, just paste in or drag and drop the image here, and it will be uploaded automatically. diff --git a/.github/config/exclude.txt b/.github/config/exclude.txt new file mode 100644 index 0000000..2532588 --- /dev/null +++ b/.github/config/exclude.txt @@ -0,0 +1 @@ +# This is a .gitignore style file for 'GrantBirki/json-yaml-validate' Action workflow diff --git a/.github/workflows/close-incorrect-issue.yml b/.github/workflows/close-incorrect-issue.yml new file mode 100644 index 0000000..762bc96 --- /dev/null +++ b/.github/workflows/close-incorrect-issue.yml @@ -0,0 +1,25 @@ +name: Close Incorrect Issue + +on: + issues: + types: [opened] + +jobs: + close-incorrect-issue: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [ubuntu-latest] + node-version: [16] + + steps: + - uses: actions/checkout@v3 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + - run: npm ci + - run: node extra/close-incorrect-issue.js ${{ secrets.GITHUB_TOKEN }} ${{ github.event.issue.number }} ${{ github.event.issue.user.login }} diff --git a/.github/workflows/json-yaml-validate.yml b/.github/workflows/json-yaml-validate.yml new file mode 100644 index 0000000..365a1f1 --- /dev/null +++ b/.github/workflows/json-yaml-validate.yml @@ -0,0 +1,27 @@ +name: json-yaml-validate +on: + push: + branches: + - master + pull_request: + branches: + - master + - 2.0.X + workflow_dispatch: + +permissions: + contents: read + pull-requests: write # enable write permissions for pull request comments + +jobs: + json-yaml-validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: json-yaml-validate + id: json-yaml-validate + uses: GrantBirki/json-yaml-validate@v1.3.0 + with: + comment: "false" # enable comment mode + exclude_file: ".github/config/exclude.txt" # gitignore style file for exclusions diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..313a029 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,139 @@ +## Can I create a pull request for Dockge? + +Yes or no, it depends on what you will try to do. Since I don't want to waste your time, be sure to **create open a discussion, so we can have a discussion first**. Especially for a large pull request or you don't know if it will be merged or not. + +Here are some references: + +### ✅ Usually accepted: +- Bug fix +- Security fix +- Translation + +### ⚠️ Discussion required: +- Large pull requests +- New features + +### ❌ Won't be merged: +- Do not pass the auto-test +- Any breaking changes +- Duplicated pull requests +- Buggy +- UI/UX is not close to Dockge +- Modifications or deletions of existing logic without a valid reason. +- Adding functions that is completely out of scope +- Converting existing code into other programming languages +- Unnecessarily large code changes that are hard to review and cause conflicts with other PRs. + +The above cases may not cover all possible situations. + +I (@louislam) have the final say. If your pull request does not meet my expectations, I will reject it, no matter how much time you spend on it. Therefore, it is essential to have a discussion beforehand. + +I will assign your pull request to a [milestone](https://github.com/louislam/dockge/milestones), if I plan to review and merge it. + +Also, please don't rush or ask for an ETA, because I have to understand the pull request, make sure it is no breaking changes and stick to my vision of this project, especially for large pull requests. + +## Project Styles + +I personally do not like something that requires so many configurations before you can finally start the app. + +- Settings should be configurable in the frontend. Environment variables are discouraged, unless it is related to startup such as `DOCKGE_STACKS_DIR` +- Easy to use +- The web UI styling should be consistent and nice +- No native build dependency + +## Coding Styles + +- 4 spaces indentation +- Follow `.editorconfig` +- Follow ESLint +- Methods and functions should be documented with JSDoc + +## Name Conventions + +- Javascript/Typescript: camelCaseType +- SQLite: snake_case (Underscore) +- CSS/SCSS: kebab-case (Dash) + +## Tools + +- [`Node.js`](https://nodejs.org/) >= 20 +- [`pnpm`](https://pnpm.io/) +- [`git`](https://git-scm.com/) +- IDE that supports [`ESLint`](https://eslint.org/) and EditorConfig (I am using [`IntelliJ IDEA`](https://www.jetbrains.com/idea/)) +- A SQLite GUI tool (f.ex. [`SQLite Expert Personal`](https://www.sqliteexpert.com/download.html) or [`DBeaver Community`](https://dbeaver.io/download/)) + +## Install Dependencies for Development + +```bash +pnpm install +``` + +## Dev Server + +``` +pnpm run dev:frontend +pnpm run dev:backend +``` + +## Backend Dev Server + +It binds to `0.0.0.0:5001` by default. + +It is mainly a socket.io app + express.js. + +## Frontend Dev Server + +It binds to `0.0.0.0:5000` by default. The frontend dev server is used for development only. + +For production, it is not used. It will be compiled to `frontend-dist` directory instead. + +You can use Vue.js devtools Chrome extension for debugging. + +### Build the frontend + +```bash +pnpm run build +``` + +## Database Migration + +TODO + +## Dependencies + +Both frontend and backend share the same package.json. However, the frontend dependencies are eventually not used in the production environment, because it is usually also baked into dist files. So: + +- Frontend dependencies = "devDependencies" + - Examples: vue, chart.js +- Backend dependencies = "dependencies" + - Examples: socket.io, sqlite3 +- Development dependencies = "devDependencies" + - Examples: eslint, sass + +### Update Dependencies + +Should only be done by the maintainer. + +```bash +pnpm update +```` + +It should update the patch release version only. + +Patch release = the third digit ([Semantic Versioning](https://semver.org/)) + +If for security / bug / other reasons, a library must be updated, breaking changes need to be checked by the person proposing the change. + +## Translations + +Please add **all** the strings which are translatable to `src/lang/en.json` (If translation keys are omitted, they can not be translated). + +**Don't include any other languages in your initial Pull-Request** (even if this is your mother tongue), to avoid merge-conflicts between weblate and `master`. +The translations can then (after merging a PR into `master`) be translated by awesome people donating their language skills. + +If you want to help by translating Uptime Kuma into your language, please visit the [instructions on how to translate using weblate](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md). + +## Spelling & Grammar + +Feel free to correct the grammar in the documentation or code. +My mother language is not English and my grammar is not that great. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..a0a632a --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,12 @@ +# Security Policy + +## Reporting a Vulnerability + +1. Please report security issues to https://github.com/louislam/dockge/security/advisories/new. +1. Please also create an empty security issue to alert me, as GitHub Advisories do not send a notification, I probably will miss it without this. https://github.com/louislam/dockge/issues/new?assignees=&labels=help&template=security.md + +Do not use the public issue tracker or discuss it in public as it will cause more damage. + +## Do you accept other 3rd-party bug bounty platforms? + +At this moment, I DO NOT accept other bug bounty platforms, because I am not familiar with these platforms and someone has tried to send a phishing link to me by doing this already. To minimize my own risk, please report through GitHub Advisories only. I will ignore all 3rd-party bug bounty platforms emails. diff --git a/extra/close-incorrect-issue.js b/extra/close-incorrect-issue.js new file mode 100644 index 0000000..f781b06 --- /dev/null +++ b/extra/close-incorrect-issue.js @@ -0,0 +1,57 @@ +const github = require("@actions/github"); + +(async () => { + try { + const token = process.argv[2]; + const issueNumber = process.argv[3]; + const username = process.argv[4]; + + const client = github.getOctokit(token).rest; + + const issue = { + owner: "louislam", + repo: "dockge", + number: issueNumber, + }; + + const labels = ( + await client.issues.listLabelsOnIssue({ + owner: issue.owner, + repo: issue.repo, + issue_number: issue.number + }) + ).data.map(({ name }) => name); + + if (labels.length === 0) { + console.log("Bad format here"); + + await client.issues.addLabels({ + owner: issue.owner, + repo: issue.repo, + issue_number: issue.number, + labels: [ "invalid-format" ] + }); + + // Add the issue closing comment + await client.issues.createComment({ + owner: issue.owner, + repo: issue.repo, + issue_number: issue.number, + body: `@${username}: Hello! :wave:\n\nThis issue is being automatically closed because it does not follow the issue template. Please DO NOT open a blank issue.` + }); + + // Close the issue + await client.issues.update({ + owner: issue.owner, + repo: issue.repo, + issue_number: issue.number, + state: "closed" + }); + } else { + console.log("Pass!"); + } + } catch (e) { + console.log(e); + } + +})(); diff --git a/tsconfig.json b/tsconfig.json index e7e38fb..335a60d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,5 +8,5 @@ }, "include": [ "backend/**/*" - ], + ] }