dev: promote stage release to production (#155)

* refractor: removed modules from user.context

* refractor: removed cycles from user context

* refractor: removed state from user context

* feat: implement channel protocol for tracking issue-activites

* refactor: remove blocking code and add todo

* refactor: refactor the consumer with function modules

* feat: add columns for identifiers for easier redirection

* style: minor padding, coloring and consistency changes

* feat: track blocker issues

* feat: track issue after creation

* feat: add runworker in procfile

* refractor: moved all context provider to _app for more clarity

* dev: added our icons

* refractor: removed issues from user context

* refactor: rename db names to plural and remove admin register file

* refactor: integrate permission layer in endpoints

* feat: create product email html templates

* refractor: changed to getServerSide from getInitialProps, removed unused component imports and minor refractoring

* feat: remirror added

* feat: workspace member user details endpoint

* fix: resolved build issue

* refactor:  remove www

* feat: workspace details on user endpoint

* feat: added authorization in project settings

refractor: improved code readability

* fix: removed hard-coded workspace slug value, and added workspace in user interface

* refactor: invitation workflow for already existing users

* feat: modified remirror, fix: issue details sidebar

* fix: merge conflicts

* fix: merge conflicts

* fix: added missing dependencies

* refactor: remove user dependency from invitations

* refactor: issue description context is updated with manager

* dev: redis instance rewrite for ssl settings and remove REDIS_TLS env variable

* chore: upgrade python package requirements

* dev: added new migrations for changes

* dev: ssl config for django channels redis connection

* chore: upgrade channels requirements

* refactor: better function for connecting with redis ssl django channels

* chore: cleanup on manifest file

* revert: user endpoint changes

* build: setup asgi

* refactor: update invitation endpoint to do bulk operations

* style: cycles page, custom listbox, issue details page

* refractor: removed folder that were moved to workspaceSlug

* dev: uvicorn in requirements

* Update index.tsx

* refactor: get workspace slug on user endpoint

* fix: workspace slug redirections and slug value in user context

* fix: user context bugs, drag and drop in cycles and modules

* fix: merge conflicts

* fix: user context and create issue modal

* refactor: add extra columns for json and html description and script for back migrating old issues

* refactor: move all 500 errors to 400

* refractor: removed active project, active workspace, projects, and workspaces from user context

* refractor: change from /home to /, added home page redirection logic

added explict GET method on fetch request, and fixed invitation page not fetching all invitations

* fix: passing project id in command palette

* style: home page, feat: image in remirror

* fix: bugs

* chore: remove test_runner workflow from github actions

* dev: update Procfile worker count and python runtime upgrade

* refactor: update response from 404 to 403

* feat: filtering using both name and issue identifier in command palette

showing my issues instead of project issue in command palette, hiding again according to route in command palette

* fix: mutation on different CRUD operations

* fix: redirection in my issues pages

* feat: added authorization in workspace settings, moved command palette to app-layout

* feat: endpoint and column to store my issue props

* style: authorization new design,

fix: made whole button on authorization page clickable, lib/auth on unsuccessful api call redirecting to error page

* feat: return project details on modules and cycles

* fix: create cycle and state coming below issue modal, showing loader for rich text editor

refractor: changed from sprint to cycle in issue type

* fix: issue delete mustation

and some code refractor

* fix: mutation bugs, remirror bugs, style: consistent droopdowns and buttons

* feat: user role in model

* dev: added new migrations

* fix: add url for workspace availability check

* feat: onboarding screens

* fix: update url for workspace name check and add authentication layer and
fix invitation endpoint

* refactor: bulk invitations message

* refactor: response on workspace invitarions

* refactor: update identifier endpoint

* refactor: invitations endpoint

* feat: onboarding logic and validations

* fix: email striep

* dev: added workspace space member unique_together

* chore: back populate neccesary data for description field

* feat: emoji-picker gets close on select, public will be default option in create project

* fix: update error in project creation

* fix: mutation error on issue count in kanban view

some minor code refractoring

* fix: module bugs

* fix: issue activities and issue comments mutation handled at issue detail

* fix: error message for creating updates without permissions

* fix: showing no user left to invite in project invite

fix: - mutation in project settings control, style: - showing loader in project settings controller, - showing request pending for user that hasn't accepted invitation

* refactor: file asset upload directory

* fix: update last workspace id on user invitation accept

* style: onboarding screens

* style: cycles, issue activity

* feat: add json and html column in issue comments

* fix: submitting create issue modal on enter click, project not getting deselected

* feat: file size validator

* fix: emoji picker not closing on all emoji select

* feat: added validation in identifier such that it only accept uppercase text

* dev: commenting is now richer

* fix: shortcuts not getting opened in settings layouts

* style: showing sidebar on unauthorized pages

* fix: error code on exception

* fix: add issue button is working on my issues pages

* feat: new way of assets

* fix: updated activity content for description field

* fix: mutation on project settings control

style: blocker and blocked changed to outline button

* fix: description activity logging

* refactor: check for workspace slug on workspace creation

* fix: typo on workspace url check

* fix: workspace name uniqueness

* fix: remove workspace from read only field

* fix: file upload endpoint, workspace slug check

* chore: drop unique_together constraint for name and workspace

* chore: settings files cleanup and use PubSub backend on django channels

* chore: change in channels backend

* refactor: issue activity api to combine comments

* fix: instance created at key

* fix: result list

* style: create project, cycle modal, view dropdown

* feat: merged issue activities and issue comments into a single section

* fix: remirror dynamic update of issue description

* fix: removed commented code

* fix: issue acitivties mutation

* fix: empty comments cant be submitted

* fix: workspace avatar has been updated while loading

* refactor: update docker-compose to run redis and database in heroku and docker environment

* refactor: removesingle docker file configuration

* refactor: update take off script to run in asgi

* docs: added workspace, quickstart documentation

* fix: reading editor values on focus out

* refactor: cleanup environment variables and create .env.example

* refactor: add extra variables in example env

* fix: warning and erros on console

lazy loading images with low priority, added validation on onboarding for user to either join or create workspace, on onboarding user can't click button while form is getting submitted, profile page going into loading state when updated, refractor: made some state local, removed unnecessary console logs and comments, changed some variable and function name to make more sence

* feat: env examples

* fix: workspace member does not exist

* fi: remove pagination from issue list api

* refactor: remove env example from root

* feat: documentation for projects on plane

* feat: create code of conduct and contributing guidelines

* fix: update docker setup to check handle redis

* revert: bring back pagination to avoid breaking

* feat: made image uploader modal, used it in profile page and workspace page,

delete project from project settings page, join project modal in project list page

* feat: create workspace page, style: made ui consistent

* style: updated onboarding and create workspace page design

* style: responsive sidebar

* fix: updated ui imports
This commit is contained in:
Vamsi Kurama 2023-01-10 23:55:47 +05:30 committed by GitHub
parent a960ddedf7
commit bef166a65f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
395 changed files with 20119 additions and 18322 deletions

View file

@ -188,27 +188,21 @@ export const navigation = [
title: 'Guides',
links: [
{ title: 'Introduction', href: '/' },
{ title: 'Get Started', href: '/get-started' },
{ title: 'Quick Start', href: '/quick-start' },
{ title: 'Self Hosting', href: '/self-hosting' },
{ title: 'Plane Basics', href: '/plane-basics' },
// { title: 'Quickstart', href: '/quickstart' },
// { title: 'SDKs', href: '/sdks' },
// { title: 'Authentication', href: '/authentication' },
// { title: 'Pagination', href: '/pagination' },
// { title: 'Errors', href: '/errors' },
// { title: 'Webhooks', href: '/webhooks' },
{ title: 'Architecture', href: '/architecture' },
],
},
{
title: 'Plane App',
links: [
{ title: 'Workspace', href: '/workspace' },
{ title: 'Project', href: '/projects' },
{ title: 'Issues', href: '/issues' },
{ title: 'Cycles', href: '/cycles' },
{ title: 'Modules', href: '/modules' },
],
},
// {
// title: 'Resources',
// links: [
// { title: 'Contacts', href: '/contacts' },
// { title: 'Conversations', href: '/conversations' },
// { title: 'Messages', href: '/messages' },
// { title: 'Groups', href: '/groups' },
// { title: 'Attachments', href: '/attachments' },
// ],
// },
]
export function Navigation(props) {

View file

@ -10,8 +10,8 @@ import { UsersIcon } from '@/components/icons/UsersIcon'
const resources = [
{
href: '/get-started',
name: 'Get Started',
href: '/quick-start',
name: 'Quick Start',
description:
'Learn how to use Plane and follow the best practices of taking-off.',
icon: UserIcon,
@ -26,8 +26,7 @@ const resources = [
{
href: '/self-host',
name: 'Self-host Plane',
description:
'Run Plane on your computer or development machine.',
description: 'Run Plane on your computer or development machine.',
icon: ChatBubbleIcon,
pattern: {
y: -6,
@ -54,8 +53,7 @@ const resources = [
{
href: '/',
name: 'Community',
description:
'Hang out with truly exceptional devs & designers on Discord.',
description: 'Hang out with truly exceptional devs & designers on Discord.',
icon: UsersIcon,
pattern: {
y: 22,

View file

@ -1,6 +1,7 @@
import { Guides } from '@/components/Guides'
import { Resources } from '@/components/Resources'
import { HeroPattern } from '@/components/HeroPattern'
import { Heading } from '@/components/Heading'
export const description =
'Learn everything there is to know about the Protocol API and integrate Protocol into your product.'
@ -25,6 +26,12 @@ This is where the learning begins and the veterans return for their references.
/>
</div>
<Heading level={2} id="what-is-plane">
What is Plane?
</Heading>
Plane is an open-source project planning tool that is designed to help individuals and teams streamline their issues, sprints, and product roadmaps. It is easy to use and can be accessed by anyone, making it an ideal choice for a wide range of projects and organizations.
<Resources />
## Contributing

View file

@ -0,0 +1,131 @@
import { Heading } from '@/components/Heading'
# Project setup
<p>
Projects let you manage teams and tasks within your Workspace. After creating
your [Workspace](/workspace), you will need to create a new project.
</p>
<Note>
Before inviting a user to a project, you'll need to invite them to the
workspace. Then, you can choose to add them to the project from the list of
users on the workspace.
</Note>
<Heading level={2} id="project-attributes">
Key project attributes
</Heading>
Every project comes with two key attributes that make it easier to plan and set permissions for users on the workspace.
1. **`Identifier`**: The project identifier is attached to every issue in the project to make it easier to track and differentiate each issue across projects and the workspace.
<Note>
You can always choose to update your identifier. This will only replace the ID
string on the issue, but not the number next to it. Note that identifiers can
only contain uppercase text and no special characters or numbers.
</Note>
These options can be found under the `General` tab inside `Project>Settings` ⬇️
`<project-name>/projects/<id>/settings`.
2. **`Network`**: To restrict other users on the workspace, you can set the network of the project to either Private or Secret. When made public, all users on the workspace can choose to join the project. When set to secret, admins need to invite workspace members to join the project.
<Heading level={2} id="project-controls">
Project controls
</Heading>
When working on multiple projects, you can set project controls to make it
easier. These controls include a project lead and default issue assignee.
- **Project lead**: The project lead will help you identify and connect with the project leader to make it easier for you to assign tasks or communicate.
- **Default issue assignee**: Everything inside a project is broken down into [issues](/issues). If you want every issue to be assigned, you can choose to set a default assignee for times when an issue is created without any assignees
These options can be found under the `Control` tab inside `Project>Settings` ⬇️
`<project-name>/projects/<id>/settings/control`.
<Heading level={2} id="project-controls">
Project members
</Heading>
When the project is set to the `Public` network under project controls, it is open to all members on the workspace. When set to `Secret` network, workspace members must be invited to the project to gain access.
For every member that is invited to the project, you can control their roles
just [like on the workspace](workspace/#workspace-roles). All roles (Admin, Member, Guest, Viewer) are
supported.
These options can be found under the `Members` tab inside `Project>Settings` ⬇️
`<project-name>/projects/<id>/settings/members`.
<Heading level={2} id="project-states">
Project states
</Heading>
To organize issues based on the principles of project management, we allow you
to create custom states in the default grouped states. This will make it
easier to use project views and filtering.
Default states:
- Backlog
- Unstarted
- Started
- Completed
- Cancelled
Inside these default states, you can create as many states as you like based
on the type of default state. In the future, we plan to allow users to create
or customize the default state based on their requirements. Please [raise a
feature request](https://github.com/makeplane/plane/issues) on our issues, if you would like to see this soon.
These options can be found under the `States` tab inside `Project>Settings` ⬇️
`<project-name>/projects/<id>/settings/states`.
<Heading level={2} id="project-labels">
Project labels
</Heading>
Similar to states, labels on projects help you filter or differentiate issues
within your project. You can create and control as many issue labels as
needed.
<Note>Labels can also be created from the issue detail page.</Note>
These options can be found under the `Labels` tab inside `Project>Settings` ⬇️
`<project-name>/projects/<id>/settings/labels`.
<Heading level={2} id="delete-a-project">
Delete a project
</Heading>
We restrict the delete access to project admin, _we plan to extend this feature to workspace owners as well_.
These options can be found under the `General` tab inside `Project>Settings` ⬇️
`<project-name>/projects/<id>/settings/general`.
<Note>
If a project is deleted, all of its content, issues, cycles, and modules will
also be deleted. Currently, Plane does not offer a automatic backup service on
cloud or self-hosted versions, but it is planned on our roadmap.
</Note>
<Heading level={2} id="project-shortcuts">
Project shortcuts
</Heading>
1. Create a new project: `CTRL/CMD + P`
<Heading level={2} id="delete-a-workspace">
Project plans
</Heading>
- **Cloud**: All-plans, no suggestion, no limits.
- **Self-hosted**: No plans, no suggestion, no limits.

View file

@ -2,13 +2,33 @@
This section of the Plane docs helps you get comfortable with the product and find your way around more effectively.
## Workspaces
<Note>
If you are using the self-hosted version of Plane and want to install it on a
local or cloud machine, follow the instructions [here](/self-hosting).
</Note>
## Onboarding and Invitation
If you have signed up for the first time, the first step in Plane is to create a new workspace. If you are a freelancer or a solo-player, you can skip the invitation part and be directly redirected to the workspace to start working on your issues. If you are part of a team, you will need to invite your team members to the workspace before you can begin.
<Note>
During the onboarding process, the invited users will be assigned a **Viewer**
role by default. You can adjust the permissions of invited users for your
project in the workspace or project settings page based on your specific
requirements.
</Note>
## The Dashboard (AKA, Home)
After signing up or signing in to a workspace, you will be redirected to the active project home page. This is where you will see all of the issues that are assigned and pending for you.
## Creating Workspaces
Think of each workspace in Plane as a home for your content. Inside, workspace, you can creare projects as an individual, or invite collaborators to share a workspace as a team - it's up to you!
> When you sign up for the first time, we'll prompt you to create a new workspace. If you're invited to join, you can directly join the workspace without creating a new one.
## Projects
## Creating Projects
Projects let you manage teams and tasks within your Workspace. After creating your Workspace, you will need to create a new project.
@ -19,7 +39,7 @@ Projects let you manage teams and tasks within your Workspace. After creating yo
page or by **Workspace > Member Settings** page.
</Note>
## Issues
## Creating Issues
In Plane, an issue is a task or piece of work. It could be small, like _Update the primary color to blue_, or large, like _Building GitHub integration on plane_. It all depends on how you and your team decide to break down your work into issues.
@ -40,7 +60,7 @@ Inside an issue, you can add as many details as you like to get your work done.
3. **Sub-issues**: You can create a `sub-issue` for an issue to either split the issue into smaller chunks, or assign parts of the issue to different people. If you find that a `sub-issue` is holding up the resolution of an issue, you can convert it to an issue so that it can be worked on separately.
4. **Issue Discussion**: Think, comment or join the conversation by sharing your thoughts under Issue discussion.
4. **Issue comments**: Think, comment or join the conversation by sharing your thoughts under Issue comments.
5. **Issue activity**: Track what's happening to your issue with activities. Everything is saved, so you can look back and see what happened. Real-time coming soon!
@ -52,13 +72,20 @@ You can organize project issues into views, which let you see your work through
- You can quickly and easily organize the issues on your board by grouping them or ordering them within views.
- You can toggle the visibility of issue sub-properties within views, at any time, based on your preferences.
## Plan better with Cycles
## Creating Cycles
Cycles, (AKA Sprints) is a custom time period in which a team works to complete items on their backlog. At the end of the sprint, the team will usually have finished building and implementing a new version of their product.
- You can move existing issues to a new or existing cycle, or create a new issue directly.
- Bulk operations are supported--you can add or update multiple issues to cycles at once.
---
## Creating Modules (Early Preview)
Modules are smaller, focused projects that help you group and organize issues within a specific time frame. They allow you to break down your work into manageable chunks and track progress towards specific goals or objectives. You can create as many modules as you need within your workspace, and customize each one with its own set of issues, milestones, and team members.
[Coming soon]
- A Gantt chart is offered to help you stay on top of timelines and deliver modules more efficiently.
- Modules allow you to add documents and links within them, providing a convenient way to share resources with others within the module.
Have questions? Ask the [Plane](https://discord.com/invite/29tPNhaV) Community.

View file

@ -0,0 +1,95 @@
import { Heading } from '@/components/Heading'
# Workspace setup
Workspaces in Plane are where you can access all of your content, including issues, cycles, and modules. Everything is organized within a workspace. To help you understand, you can think of a workspace as similar to a server on Discord or an organization on Slack, where you can bring your entire team together to work.
<Heading level={2} id="creating-a-workspace">
Creating workspace
</Heading>
If you are a first-time user who has signed up for Plane, you will create a new workspace for your team during the onboarding process.
<Note>
On Plane cloud and self-hosted versions, the workspace URLs (also known as
slugs) must be unique. We allow users to have the same organization names, but
the URLs must still be unique to ensure a better experience.
</Note>
If you are a team member or contributor and are invited to a workspace, you do
not need to have your own workspace. Instead, after accepting the invitation,
you will be redirected directly to the workspace you were invited to.
<Heading level={2} id="workspace-roles">
Workspace roles
</Heading>
Every user on a workspace has a specific role associated with them, which
determines their permissions and what actions they are allowed to take within
the workspace. This helps to ensure that users only have access to the
resources and functions that they need in order to complete their work.
These roles can be configured when inviting a user to a workspace from the
workspace invite page, or later from the workspace settings page. _Note that
when you invite a user during the onboarding process, they will be assigned
the default role of 'Viewer'_.
**Available roles**
- **Owner** - The owner of the workspace is the supreme administrator and has all permissions set to `true` within the workspace.
- **Administrator** - Workspace administrators have similar privileges to the owner, but they are not able to delete the workspace.
- **Member** - Workspace members are essentially team members within the organization, and they have the ability to read, write, edit, and delete entities inside projects, cycles, and modules within the workspace. It is important to note that workspace members are not able to create new projects, cycles, or modules
- **Guest** - External members of organizations can be invited as guests, which grants them the ability to view all content to which they have been invited. However, they do not have permissions to write, update, or delete entities inside workspace.
<Note>
Users should first join the workspace, in ordered to be invited to public and
secret projects. View [projects](/projects) docs for more.
</Note>
<Heading level={2} id="workspace-inivitation">
Inviting user to a workspace
</Heading>
You can easily invite members of your organization with differnt roles onto a workspace.
On cloud, here's how you can invite a user to your workspace,
1. When you are onboarded, you will see a screen that allows you to invite your team members to the workspace. By default, we set the role to `View` only. This is because we perform a bulk operation to get your team up and running.
2. If you've missed step one, you can manage all your members under `/<workspace-name>/settings/members` page.
3. To invite team members, use the Add Member option. When an invitation is sent, the invitee will receive an email to accept the invitation.
4. To update workspace member permissions, use the collapsable menu, next to the member.
<Note>
Self-hosted users should configure an email service in order to send
invitations. Follow [this](/self-hosting) document to learn how to set up
self-hosted instances.
</Note>
<Heading level={2} id="switch-workspaces">
Switching between workspaces
</Heading>
When working with multiple organizations or teams, you can switch between them
using the workspace menu on the left sidebar. Here, you can find all the
workspaces you've created or joined and switch between them anytime, as long
as they are linked to your email. In the future, we plan to allow logging into
multiple workspaces with different emails and improve the overall experience.
<Heading level={2} id="delete-a-workspace">
Delete a workspace
</Heading>
Only workspace owners have the ability to delete a workspace, these options can be found under the workspace settings.
<Note>
If a workspace is deleted, all of its content, issues, cycles, and modules
will also be deleted. Currently, Plane does not offer a automatic backup
service on cloud or self-hosted versions, but it is planned on our roadmap.
</Note>
<Heading level={2} id="delete-a-workspace">
Workspace plan
</Heading>
- **Cloud**: All-plans, no suggestion, no limits.
- **Self-hosted**: No plans, no suggestion, no limits.