### Install Plane v0.14.0 Source: https://developers.plane.so/self-hosting/manage/upgrade-from-0.13.2-0.14.0 Execute the prepared setup script to install the new version of Plane. ```bash ./setup.sh install ``` -------------------------------- ### Example Endpoint: Get Projects Source: https://developers.plane.so/api-reference/introduction An example of how to retrieve all projects within a workspace using the API. ```HTTP GET https://api.plane.so/api/v1/workspaces/{workspace_slug}/projects/ ``` -------------------------------- ### Create New Directory and Navigate Source: https://developers.plane.so/self-hosting/manage/upgrade-from-0.13.2-0.14.0 Create a new directory for the v0.14-0 installation and navigate into it to ensure a clean setup. ```bash mkdir plane-selfhost cd plane-selfhost ``` -------------------------------- ### Download Plane Setup Script Source: https://developers.plane.so/self-hosting/manage/upgrade-plane Downloads the latest stable setup script for Community Edition installations. ```bash curl -fsSL -o setup.sh https://github.com/makeplane/plane/releases/latest/download/setup.sh ``` -------------------------------- ### Quick Setup Helm Installation Source: https://developers.plane.so/self-hosting/methods/kubernetes Deploy Plane Community Edition with default settings using Helm. This command sets up stateful deployments and ingress routes. ```bash helm install plane-app makeplane/plane-ce \ --create-namespace \ --namespace plane-ce \ --set planeVersion=stable \ --set ingress.appHost="plane.example.com" \ --set ingress.minioHost="plane-minio.example.com" \ --set ingress.ingressClass=nginx \ --set postgres.storageClass=longhorn \ --set redis.storageClass=longhorn \ --set minio.storageClass=longhorn \ --timeout 10m \ --wait \ --wait-for-jobs ``` -------------------------------- ### Download and Prepare Setup Script Source: https://developers.plane.so/self-hosting/methods/docker-compose Download the latest stable setup script and grant it execution permissions. ```bash curl -fsSL -o setup.sh https://github.com/makeplane/plane/releases/latest/download/setup.sh ``` ```bash chmod +x setup.sh ``` -------------------------------- ### Setup Script Menu Options Source: https://developers.plane.so/self-hosting/methods/docker-compose The interactive menu displayed when running the setup script. ```text Select a Action you want to perform: 1) Install (arm64) 2) Start 3) Stop 4) Restart 5) Upgrade 6) View Logs 7) Backup Data 8) Exit Action [2]: 1 ``` -------------------------------- ### Advanced Setup Helm Installation Source: https://developers.plane.so/self-hosting/methods/kubernetes Deploy Plane Community Edition using a custom `values.yaml` file for advanced configuration. This allows for more control over the installation parameters. ```bash helm install plane-app makeplane/plane-ce \ --create-namespace \ --namespace plane-ce \ -f values.yaml \ --timeout 10m \ --wait \ --wait-for-jobs ``` -------------------------------- ### Configure GitHub Enterprise Setup URL Source: https://developers.plane.so/self-hosting/govern/integrations/github Redirect URL for GitHub Enterprise after app installation. ```bash https://silo.plane.so/api/oauth/github-enterprise/auth/callback ``` ```bash https:///silo/api/oauth/github-enterprise/auth/callback ``` -------------------------------- ### View setup script menu Source: https://developers.plane.so/self-hosting/manage/prime-cli The interactive menu options displayed after running the setup script. ```bash Select a Action you want to perform: 1) Install 2) Start 3) Stop 4) Restart 5) Upgrade 6) View Logs 7) Backup Data 8) Exit ``` -------------------------------- ### Configure GitHub Cloud Setup URL Source: https://developers.plane.so/self-hosting/govern/integrations/github URL used to redirect users after GitHub app installation. ```bash https:///silo/api/github/auth/callback ``` -------------------------------- ### Install Plane Node.js SDK Source: https://developers.plane.so/dev-tools/build-plane-app/sdks Install the Node.js SDK using npm. ```bash npm install @makeplane/plane-node-sdk ``` -------------------------------- ### Install Docker Engine Source: https://developers.plane.so/self-hosting/methods/docker-compose Install the Docker engine on a Linux-based machine. ```bash curl -fsSL https://get.docker.com | sh - ``` -------------------------------- ### Install Plane Instance Source: https://developers.plane.so/self-hosting/methods/one-click Run 'plane-app --install' to reinstall the Plane application. This command is used after an uninstall or if a fresh installation is required. ```bash plane-app --install ``` -------------------------------- ### Install Plane Python SDK Source: https://developers.plane.so/dev-tools/build-plane-app/sdks Install the Python SDK using pip. ```bash pip install plane-sdk ``` -------------------------------- ### Start Plane Instance Source: https://developers.plane.so/self-hosting/methods/one-click Use the 'plane-app start' operator to initiate the Plane server. This is a basic operator for managing the Plane instance. ```bash plane-app start ``` -------------------------------- ### Start Application Server Source: https://developers.plane.so/dev-tools/build-plane-app/examples Starts the Flask application on port 3000. ```python if __name__ == "__main__": app.run(port=3000) ``` -------------------------------- ### Example Current Domain Output Source: https://developers.plane.so/self-hosting/govern/custom-domain This is an example of the output from checking the current domain configuration, showing variables that contain the domain. ```ini DOMAIN_NAME=localhost SITE_ADDRESS=http://localhost WEB_URL=http://localhost CORS_ALLOWED_ORIGINS=http://localhost,https://localhost ``` -------------------------------- ### Install Podman and Dependencies Source: https://developers.plane.so/self-hosting/methods/podman-quadlets Installs Podman, uidmap for user namespace mapping, netavark for networking, and passt for network connectivity. ```bash sudo apt install -y podman uidmap netavark passt ``` -------------------------------- ### Example destination registry configurations Source: https://developers.plane.so/self-hosting/methods/clone-docker-images Examples of how to set the DESTINATION_REGISTRY environment variable for various container registries. ```bash # Docker Hub export DESTINATION_REGISTRY="docker.io/yourcompany" # Google Container Registry export DESTINATION_REGISTRY="gcr.io/your-project" # Private registry export DESTINATION_REGISTRY="your-private-registry.com/plane" # AWS ECR export DESTINATION_REGISTRY="123456789012.dkr.ecr.us-east-1.amazonaws.com/plane" # Azure Container Registry export DESTINATION_REGISTRY="yourregistry.azurecr.io/plane" ``` -------------------------------- ### Example .env file updates for Community Edition Source: https://developers.plane.so/self-hosting/govern/custom-domain Example of how to update WEB_URL and CORS_ALLOWED_ORIGINS in the .env file for the Community Edition. ```dotenv WEB_URL=https://example.com CORS_ALLOWED_ORIGINS=https://example.com ``` -------------------------------- ### Start Plane Instance (Community Edition) Source: https://developers.plane.so/self-hosting/manage/backup-restore After restoring data for the Community Edition, use this command to start your Plane instance again. ```bash ./setup.sh start ``` -------------------------------- ### Install crane on Linux Source: https://developers.plane.so/self-hosting/methods/clone-docker-images Download, extract, and move the crane binary to your PATH on Linux. Verifies installation with `crane version`. ```bash # Download the latest release VERSION=$(curl -s https://api.github.com/repos/google/go-containerregistry/releases/latest | grep '"tag_name"' | cut -d'"' -f4) curl -sL "https://github.com/google/go-containerregistry/releases/download/${VERSION}/go-containerregistry_Linux_x86_64.tar.gz" | tar xz crane sudo mv crane /usr/local/bin/ # Verify installation crane version ``` -------------------------------- ### Quick download examples Source: https://developers.plane.so/self-hosting/methods/download-config Common commands for downloading and extracting standard and airgapped configurations. ```bash curl "https://prime.plane.so/api/v2/setup/?version=v2.4.0" -o plane.zip unzip plane.zip ``` ```bash curl "https://prime.plane.so/api/v2/setup/?version=v2.4.0&airgapped=true" -o plane.zip unzip plane.zip ``` ```bash curl "https://prime.plane.so/api/v2/setup/?version=v2.4.0&airgapped=true&platform=arm64" -o plane.zip unzip plane.zip ``` -------------------------------- ### Download setup.sh script Source: https://developers.plane.so/self-hosting/manage/community-to-airgapped Download the latest version of the setup script for backup operations. ```bash curl -fsSL https://github.com/makeplane/plane/releases/latest/download/setup.sh -o setup.sh ``` -------------------------------- ### User Search Base Examples Source: https://developers.plane.so/self-hosting/govern/ldap Examples of base DN paths used to define the starting point for user directory searches. ```text ou=users,dc=example,dc=com ou=employees,ou=people,dc=company,dc=com cn=users,dc=company,dc=local ``` -------------------------------- ### Download and Prepare Installation Script Source: https://developers.plane.so/self-hosting/manage/upgrade-from-0.13.2-0.14.0 Set the RELEASE environment variable and download the installation script, modifying it for the specified release. Make the script executable. ```bash export RELEASE=v0.14-dev curl -fsSL https://raw.githubusercontent.com/makeplane/plane/master/deploy/selfhost/install.sh | sed -e 's@BRANCH=${BRANCH:-master}@BRANCH='"$RELEASE"'@' -e 's@APP_RELEASE="stable"@APP_RELEASE='"$RELEASE"'@' > setup.sh chmod +x setup.sh ``` -------------------------------- ### Deploy Plane with Quick Setup Source: https://developers.plane.so/self-hosting/methods/install-methods-commercial/kubernetes Execute a default deployment using Helm with pre-configured storage and ingress settings. ```bash helm upgrade --install plane-app plane/plane-enterprise \ --create-namespace \ --namespace plane \ --set license.licenseDomain=${DOMAIN_NAME} \ --set license.licenseServer=https://prime.plane.so \ --set planeVersion=${PLANE_VERSION} \ --set ingress.enabled=true \ --set ingress.ingressClass=nginx \ --set env.storageClass=longhorn \ --timeout 10m \ --wait \ --wait-for-jobs ``` -------------------------------- ### Initialize a Project Source: https://developers.plane.so/dev-tools/plane-compose Commands to create a new project directory structure. ```bash plane init my-project cd my-project ``` ```bash plane init my-project --workspace myteam --project API ``` -------------------------------- ### Example Action JSON Source: https://developers.plane.so/dev-tools/agents/signals-content-payload JSON structure representing a starting action, including the action name and its parameters. ```json { "type": "action", "action": "searchDatabase", "parameters": { "query": "bug reports", "status": "open" } } ``` -------------------------------- ### Get Custom Property Option Response Source: https://developers.plane.so/api-reference/issue-types/options/overview Example of a successful response when retrieving a custom property option. ```APIDOC ## GET /api/custom-property-options/{id} ### Description Retrieves the details of a specific custom property option. ### Method GET ### Endpoint `/api/custom-property-options/{id}` ### Response #### Success Response (200) - **id** (uuid) - The unique identifier of the custom property option. - **created_at** (timestamp) - The timestamp when the option was created. - **updated_at** (timestamp) - The timestamp when the option was last updated. - **deleted_at** (null) - The timestamp when the option was deleted (if applicable). - **name** (string) - The name of the custom property option. - **sort_order** (float) - The order in which the option should be displayed. - **description** (string) - A description of the custom property option. - **logo_props** (object) - Properties related to the option's logo. - **is_active** (boolean) - Indicates if the option is currently active. - **is_default** (boolean) - Indicates if this is the default option. - **external_source** (string) - The external source of the option (if any). - **external_id** (string) - The external ID of the option (if any). - **created_by** (uuid) - The ID of the user who created the option. - **updated_by** (uuid) - The ID of the user who last updated the option. - **workspace** (uuid) - The workspace the option belongs to. - **project** (uuid) - The project the option belongs to. - **property** (uuid) - The ID of the custom property this option is associated with. - **parent** (null) - The parent option (if applicable). #### Response Example ```json { "id": "51a869d1-f612-4315-ac91-ffef3e96c20e", "created_at": "2024-10-23T07:44:42.883820Z", "updated_at": "2024-10-23T07:44:42.883855Z", "deleted_at": null, "name": "issue property option 3", "sort_order": 10000.0, "description": "issue property option 3 description", "logo_props": {}, "is_active": true, "is_default": false, "external_source": null, "external_id": null, "created_by": "9d6d1ecd-bf73-4169-80c8-7dee79b217f4", "updated_by": "9d6d1ecd-bf73-4169-80c8-7dee79b217f4", "workspace": "70b6599f-9313-4c0d-b5c0-406a13a05647", "project": "03a9bf56-84f4-4afe-b232-9400eb9b7b6b", "property": "f962febb-98bc-43ca-8bfb-8012e4d54dae", "parent": null } ``` ``` -------------------------------- ### Get Workspace Invitation (Python) Source: https://developers.plane.so/api-reference/workspace-invitations/get-workspace-invitation-detail This Python script uses the requests library to fetch a workspace invitation. Ensure you have the library installed (`pip install requests`). Replace placeholders with your actual API key and IDs. ```python import requests response = requests.get( "https://api.plane.so/api/v1/workspaces/my-workspace/invitations/invitation-uuid/", headers={"X-API-Key": "your-api-key"} ) print(response.json()) ``` -------------------------------- ### Select Upgrade Option in Setup Menu Source: https://developers.plane.so/self-hosting/manage/upgrade-plane Represents the interactive menu selection for upgrading the Community Edition instance. ```bash Select a Action you want to perform: 1) Install (x86_64) 2) Start 3) Stop 4) Restart 5) Upgrade 6) View Logs 7) Backup Data 8) Exit Action [2]: 5 ``` -------------------------------- ### Get Workspace Details Source: https://developers.plane.so/dev-tools/build-plane-app/choose-token-flow Retrieves details about the application installation, including workspace information. This is useful for obtaining the `workspace_detail.slug` needed for subsequent API calls. ```http GET https://api.plane.so/auth/o/app-installation/?id=APP_INSTALLATION_ID Authorization: Bearer YOUR_BOT_TOKEN ``` -------------------------------- ### Start Airgapped instance Source: https://developers.plane.so/self-hosting/manage/community-to-airgapped Navigate to the Airgapped instance folder and start the services using docker compose. Ensure you use the correct docker-compose file and environment file. ```bash cd sudo docker compose -f docker-compose.yml --env-file plane.env up -d ``` -------------------------------- ### List workspace wiki pages API request Source: https://developers.plane.so/api-reference/page/list-workspace-pages Examples of how to call the GET /api/v1/workspaces/{workspace_slug}/pages/ endpoint using different programming environments. ```bash curl -X GET \ "https://api.plane.so/api/v1/workspaces/my-workspace/pages/?type=public&search=welcome&per_page=20" \ -H "X-API-Key: $PLANE_API_KEY" \ # Or use -H "Authorization: Bearer $PLANE_OAUTH_TOKEN" ``` ```python import requests response = requests.get( "https://api.plane.so/api/v1/workspaces/my-workspace/pages/", headers={"X-API-Key": "your-api-key"}, params={"type": "public", "search": "welcome", "per_page": 20}, ) print(response.json()) ``` ```javascript const response = await fetch( "https://api.plane.so/api/v1/workspaces/my-workspace/pages/?type=public&search=welcome&per_page=20", { method: "GET", headers: { "X-API-Key": "your-api-key", }, } ); const data = await response.json(); ``` -------------------------------- ### Retrieve Cycles with JavaScript Source: https://developers.plane.so/api-reference/cycle/list-cycles Example using the fetch API in JavaScript to get cycles for a project. Remember to substitute 'your-api-key' with your valid API key. ```javascript const response = await fetch( "https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/cycles/?cursor=20:1:0&cycle_view=all", { method: "GET", headers: { "X-API-Key": "your-api-key", }, } ); const data = await response.json(); ``` -------------------------------- ### Backup Data (Community Edition Setup Script) Source: https://developers.plane.so/self-hosting/manage/backup-restore For the Community Edition, run the setup script and select option 7 from the menu to back up PostgreSQL, Redis, and upload data. Backup files are stored locally. ```bash ./setup.sh ``` -------------------------------- ### TypeScript: Express OAuth Setup and Callback Source: https://developers.plane.so/dev-tools/build-plane-app/examples Sets up an Express server to handle OAuth redirection to Plane and exchange the authorization code for a bot token. Stores installation details in memory. ```typescript import express from "express"; import axios from "axios"; import crypto from "crypto"; const app = express(); const CLIENT_ID = process.env.PLANE_CLIENT_ID!; const CLIENT_SECRET = process.env.PLANE_CLIENT_SECRET!; const REDIRECT_URI = process.env.PLANE_REDIRECT_URI!; const WEBHOOK_SECRET = process.env.PLANE_WEBHOOK_SECRET!; const PLANE_API_URL = process.env.PLANE_API_URL || "https://api.plane.so"; // In-memory storage (use a database in production) const installations = new Map< string, { botToken: string; workspaceSlug: string; appInstallationId: string; } >(); // Setup URL - redirect to Plane's consent screen app.get("/oauth/setup", (req, res) => { const params = new URLSearchParams({ client_id: CLIENT_ID, response_type: "code", redirect_uri: REDIRECT_URI, }); res.redirect(`${PLANE_API_URL}/auth/o/authorize-app/?${params}`); }); // OAuth callback - exchange app_installation_id for bot token app.get("/oauth/callback", async (req, res) => { const appInstallationId = req.query.app_installation_id as string; if (!appInstallationId) { return res.status(400).send("Missing app_installation_id"); } try { const basicAuth = Buffer.from(`${CLIENT_ID}:${CLIENT_SECRET}`).toString("base64"); // Exchange for bot token const tokenRes = await axios.post( `${PLANE_API_URL}/auth/o/token/`, new URLSearchParams({ grant_type: "client_credentials", app_installation_id: appInstallationId, }).toString(), { headers: { Authorization: `Basic ${basicAuth}`, "Content-Type": "application/x-www-form-urlencoded", }, } ); const botToken = tokenRes.data.access_token; // Get workspace details const installRes = await axios.get(`${PLANE_API_URL}/auth/o/app-installation/?id=${appInstallationId}`, { headers: { Authorization: `Bearer ${botToken}` }, }); const installation = installRes.data[0]; const workspaceId = installation.workspace; const workspaceSlug = installation.workspace_detail.slug; // Store credentials installations.set(workspaceId, { botToken, workspaceSlug, appInstallationId }); console.log(`Installed in workspace: ${workspaceSlug}`); res.send("Installation successful! You can close this window."); } catch (error) { console.error("OAuth error:", error); res.status(500).send("Installation failed"); } }); // Webhook handler app.post("/webhook", express.raw({ type: "application/json" }), (req, res) => { const signature = req.headers["x-plane-signature"] as string; const payload = req.body.toString(); // Verify signature const expected = crypto.createHmac("sha256", WEBHOOK_SECRET).update(payload).digest("hex"); if (!crypto.timingSafeEqual(Buffer.from(signature || ""), Buffer.from(expected))) { return res.status(403).send("Invalid signature"); } const event = JSON.parse(payload); console.log(`Received: ${event.event} ${event.action}`); // Get credentials for this workspace const creds = installations.get(event.workspace_id); if (creds) { // Process the event with creds.botToken } res.status(200).send("OK"); }); app.listen(3000, () => console.log("Server running on http://localhost:3000")); ``` -------------------------------- ### GET /api/v2/setup/ Source: https://developers.plane.so/self-hosting/methods/download-config Downloads a zip file containing Docker configuration files for a specified Plane release version. ```APIDOC ## GET /api/v2/setup/ ### Description Downloads the `docker-compose.yml` and `variables.env` files for a specific Plane release. This is a public endpoint and does not require authentication. ### Method GET ### Endpoint https://prime.plane.so/api/v2/setup/ ### Parameters #### Query Parameters - **version** (string) - Required - The release tag (e.g., v2.4.0). - **airgapped** (boolean) - Optional - Set to true for airgapped compose files. Defaults to false. - **platform** (string) - Optional - Target architecture: amd64 or arm64. Only applies when airgapped=true. Defaults to amd64. ### Response #### Success Response (200) - **file** (binary) - A zip archive containing the configuration files. #### Error Responses - **400** - Missing version parameter, invalid platform value, or missing server configuration. - **404** - Release tag not found or config files missing from release. - **500** - GitHub API failure. ``` -------------------------------- ### Restore Plane instance data Source: https://developers.plane.so/self-hosting/manage/migrate-plane Use this command on the new server to restore your Plane instance from a backup file. Follow the on-screen prompts for correct setup. This command is only for Docker installations using prime-cli. ```bash prime-cli restore ``` -------------------------------- ### Install Plane without sudo access Source: https://developers.plane.so/self-hosting/methods/podman-quadlets Installs Plane using the provided script, allowing you to specify the base installation directory. This is useful for custom installation locations. ```bash ./install.sh --domain your-domain.com --base-dir /your/custom/path ``` -------------------------------- ### Start Core Plane Dependencies Source: https://developers.plane.so/self-hosting/methods/podman-quadlets Starts the core dependency services for Plane, including database, Redis, RabbitMQ, and MinIO. Run these commands without sudo. ```bash systemctl --user start plane-{db,redis,mq,minio}.service ``` -------------------------------- ### Download and Prepare Restore Script (Community Edition) Source: https://developers.plane.so/self-hosting/manage/backup-restore Download the restore script using `curl` and make it executable. Save this script in the same directory as `setup.sh` for convenience. ```bash curl -fsSL -o restore.sh https://raw.githubusercontent.com/makeplane/plane/refs/heads/preview/deployments/cli/community/restore.sh chmod +x restore.sh ``` -------------------------------- ### Backup Plane Community Instance Source: https://developers.plane.so/self-hosting/manage/community-to-airgapped Execute the setup.sh script with the 'backup' argument to create a backup of your Plane Community Edition instance. The backup will be stored in the 'backup/' directory. ```bash ./setup.sh backup ``` -------------------------------- ### Install crane on macOS Source: https://developers.plane.so/self-hosting/methods/clone-docker-images Use Homebrew to install the crane tool on macOS. ```bash brew install crane ``` -------------------------------- ### Configure Workspace Source: https://developers.plane.so/dev-tools/plane-compose Example configuration for the plane.yaml file. ```yaml workspace: your-workspace-slug project: key: PROJ name: My Project defaults: type: task workflow: standard ``` -------------------------------- ### Install Plane Compose Source: https://developers.plane.so/dev-tools/plane-compose Commands to install the CLI tool globally or from source. ```bash pipx install plane-compose ``` ```bash git clone https://github.com/makeplane/compose.git cd compose pipx install -e . ``` ```bash pipx upgrade plane-compose ``` -------------------------------- ### Install Plane using Docker Compose Source: https://developers.plane.so/self-hosting/methods/install-methods-commercial/docker-compose Run this command to download and execute the Plane installation script. Follow the on-screen prompts for domain and configuration choices. ```bash curl -fsSL https://prime.plane.so/install/ | sh - ``` -------------------------------- ### Error Activity JSON Example Source: https://developers.plane.so/dev-tools/agents/signals-content-payload Example JSON structure for an error activity. ```json { "type": "error", "body": "I couldn't complete your request due to a connection issue with the external service. Please try again in a few minutes." } ``` -------------------------------- ### Start Plane Frontend Services Source: https://developers.plane.so/self-hosting/methods/podman-quadlets Starts the frontend services for Plane, including the web interface, space, admin panel, and proxy. Run these commands without sudo. ```bash systemctl --user start {web,space,admin,live,proxy}.service ``` -------------------------------- ### Example Success Response (200) Source: https://developers.plane.so/api-reference/issue-comment/overview An example of a successful response when retrieving a comment. ```APIDOC ## GET /api/comments/{comment_id} ### Description Retrieves a specific comment by its ID. ### Method GET ### Endpoint `/api/comments/{comment_id}` ### Response #### Success Response (200) - **id** (uuid) - Unique identifier for the comment - **created_at** (timestamp) - The timestamp when the comment was created - **updated_at** (timestamp) - The timestamp when the comment was last updated - **comment_stripped** (string) - Stripped string version of the comment - **comment_json** (object) - JSON object version of the comment - **comment_html** (string) - HTML string version of the comment - **attachments** (string[]) - Array of attachment URLs - **access** (string) - Visibility of the comment (INTERNAL or EXTERNAL) - **created_by** (uuid) - ID of the user who created the comment - **updated_by** (uuid) - ID of the user who updated the comment - **project** (uuid) - UUID of the project the comment belongs to - **workspace** (uuid) - UUID of the workspace the comment belongs to - **issue** (uuid) - UUID of the work item the comment is attached to - **actor** (uuid) - UUID of the user who commented ### Response Example ```json { "id": "f3e29f26-708d-40f0-9209-7e0de44abc49", "created_at": "2023-11-20T09:26:10.383129Z", "updated_at": "2023-11-20T09:26:10.383140Z", "comment_stripped": "Initialf ThoughtsaMy initial thoughts on this are very good", "comment_json": {}, "comment_html": "

Initialf Thoughts

a

My initial thoughts on this are very good

", "attachments": [], "access": "INTERNAL", "created_by": "16c61a3a-512a-48ac-b0be-b6b46fe6f430", "updated_by": "16c61a3a-512a-48ac-b0be-b6b46fe6f430", "project": "4af68566-94a4-4eb3-94aa-50dc9427067b", "workspace": "cd4ab5a2-1a5f-4516-a6c6-8da1a9fa5be4", "issue": "e1c25c66-5bb8-465e-a818-92a483423443", "actor": "16c61a3a-512a-48ac-b0be-b6b46fe6f430" } ``` ``` -------------------------------- ### Example values.yaml Configuration for Plane Source: https://developers.plane.so/self-hosting/methods/kubernetes This is an example configuration snippet for the values.yaml file used in advanced Plane deployments. Ensure required environment variables like planeVersion, license.licenseDomain, and ingress settings are correctly set. ```yaml planeVersion: v2.4.0 license.licenseDomain: license.licenseServer: https://prime.plane.so ingress.enabled: ingress.ingressClass: env.storageClass: ``` -------------------------------- ### List Modules in a Project (JavaScript) Source: https://developers.plane.so/api-reference/module/list-modules This JavaScript example shows how to retrieve a list of modules using the `fetch` API. It configures the request method, URL, and necessary headers, including API key authentication. Adapt the placeholders for your environment. ```javascript const response = await fetch( "https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/modules/?cursor=20:1:0&expand=assignees", { method: "GET", headers: { "X-API-Key": "your-api-key", }, } ); const data = await response.json(); ``` -------------------------------- ### Example Success Response Source: https://developers.plane.so/api-reference/issue-types/properties/overview An example of a successful response when retrieving or creating a custom property. ```APIDOC ## Response Example (200 OK) ```json { "id": "f962febb-98bc-43ca-8bfb-8012e4d54dae", "created_at": "2024-10-23T07:38:58.231897Z", "updated_at": "2024-10-23T07:38:58.231920Z", "deleted_at": null, "name": "first-issue-property", "display_name": "first issue property", "description": "first issue property", "logo_props": {}, "sort_order": 75535.0, "property_type": "OPTION", "relation_type": null, "is_required": false, "default_value": [], "settings": {}, "is_active": false, "is_multi": false, "validation_rules": {}, "external_source": null, "external_id": null, "created_by": "9d6d1ecd-bf73-4169-80c8-7dee79b217f4", "updated_by": "9d6d1ecd-bf73-4169-80c8-7dee79b217f4", "workspace": "70b6599f-9313-4c0d-b5c0-406a13a05647", "project": "03a9bf56-84f4-4afe-b232-9400eb9b7b6b", "issue_type": "1800681a-a749-487b-9003-3279031fea35" } ``` ``` -------------------------------- ### Configure Infrastructure Services Source: https://developers.plane.so/self-hosting/methods/airgapped-edition-kubernetes Set up local or external database and infrastructure services like Redis, Postgres, RabbitMQ, and MinIO. ```yaml services: # Database and infrastructure images redis: local_setup: true # Set to false if using external service image: valkey/valkey:7.2.11-alpine postgres: local_setup: true # Set to false if using external service image: postgres:15.7-alpine rabbitmq: local_setup: true # Set to false if using external service image: rabbitmq:3.13.6-management-alpine external_rabbitmq_url: "" # Required only if using remote RabbitMQ minio: local_setup: true # Set to false if using external service image: minio/minio:latest image_mc: minio/mc:latest ``` -------------------------------- ### Customer Success Response Example Source: https://developers.plane.so/api-reference/customer/overview An example of a successful response when retrieving customer data. ```APIDOC ## Customer Success Response Example ### Description This is an example of a successful JSON response (HTTP 200 OK) when retrieving customer information. ### Response #### Success Response (200) - **id** (uuid) - Unique identifier for the customer. - **created_at** (timestamp) - The timestamp when the customer was created. - **updated_at** (timestamp) - The timestamp when the customer was last updated. - **name** (string) - Name of the customer. - **email** (string) - Email address of the customer. - **workspace** (uuid) - Workspace UUID which is automatically saved. ### Response Example ```json { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "created_at": "2023-11-19T11:56:55.176802Z", "updated_at": "2023-11-19T11:56:55.176809Z", "name": "Acme Corporation", "email": "contact@acme.com", "workspace": "cd4ab5a2-1a5f-4516-a6c6-8da1a9fa5be4" } ``` ``` -------------------------------- ### Create manual backup directories Source: https://developers.plane.so/self-hosting/upgrade-from-community Prepares the local file structure for manual data extraction. ```bash mkdir -p ~/ce-backups/db mkdir -p ~/ce-backups/minio/uploads cd ~/ce-backups ``` -------------------------------- ### Prompt Webhook Example Source: https://developers.plane.so/dev-tools/agents/signals-content-payload Example JSON structure for a prompt activity received via webhook. ```json { "type": "prompt", "body": "Can you check the status of our deployment pipeline?" } ``` -------------------------------- ### Python: Flask Setup and Environment Variables Source: https://developers.plane.so/dev-tools/build-plane-app/examples Initializes a Flask application and sets up environment variables for Plane API integration. This is a boilerplate for further implementation. ```python import os import hmac import hashlib import base64 import requests as http_requests from flask import Flask, request, redirect from urllib.parse import urlencode app = Flask(__name__) CLIENT_ID = os.getenv("PLANE_CLIENT_ID") CLIENT_SECRET = os.getenv("PLANE_CLIENT_SECRET") REDIRECT_URI = os.getenv("PLANE_REDIRECT_URI") WEBHOOK_SECRET = os.getenv("PLANE_WEBHOOK_SECRET") PLANE_API_URL = os.getenv("PLANE_API_URL", "https://api.plane.so") ```