diff --git a/.github/workflows/plugins-deploy-api-doc.yml b/.github/workflows/plugins-deploy-api-doc.yml index f8451e9816..aaa1339c9e 100644 --- a/.github/workflows/plugins-deploy-api-doc.yml +++ b/.github/workflows/plugins-deploy-api-doc.yml @@ -7,11 +7,11 @@ on: - staging - main paths: - - "plugins/libs/plugin-types/index.d.ts" - - "plugins/libs/plugin-types/REAME.md" - - "plugins/tools/typedoc.css" - - "plugins/CHANGELOG.md" - - "plugins/wrangler-penpot-plugins-api-doc.toml" + - 'plugins/libs/plugin-types/index.d.ts' + - 'plugins/libs/plugin-types/REAME.md' + - 'plugins/tools/typedoc.css' + - 'plugins/CHANGELOG.md' + - 'plugins/wrangler-penpot-plugins-api-doc.toml' workflow_dispatch: inputs: gh_ref: @@ -86,12 +86,24 @@ jobs: run: | REF="${{ steps.vars.outputs.gh_ref }}" case "$REF" in - main) echo "WORKER_NAME=penpot-plugins-api-doc-pro" >> $GITHUB_ENV ;; - staging) echo "WORKER_NAME=penpot-plugins-api-doc-pre" >> $GITHUB_ENV ;; - develop) echo "WORKER_NAME=penpot-plugins-api-doc-hourly" >> $GITHUB_ENV ;; + main) + echo "WORKER_NAME=penpot-plugins-api-doc-pro" >> $GITHUB_ENV + echo "WORKER_URI=doc.plugins.penpot.app" >> $GITHUB_ENV ;; + staging) + echo "WORKER_NAME=penpot-plugins-api-doc-pre" >> $GITHUB_ENV + echo "WORKER_URI=doc.plugins.penpot.dev" >> $GITHUB_ENV ;; + develop) + echo "WORKER_NAME=penpot-plugins-api-doc-hourly" >> $GITHUB_ENV + echo "WORKER_URI=doc.plugins.hourly.penpot.dev" >> $GITHUB_ENV ;; *) echo "Unsupported branch ${REF}" && exit 1 ;; esac + - name: Set the custom url + working-directory: plugins + shell: bash + run: | + sed -i "s/WORKER_URI/${{ env.WORKER_URI }}/g" wrangler-penpot-plugins-api-doc.toml + - name: Deploy to Cloudflare Workers uses: cloudflare/wrangler-action@v3 with: diff --git a/.github/workflows/plugins-deploy-styles-doc.yml b/.github/workflows/plugins-deploy-styles-doc.yml new file mode 100644 index 0000000000..0ab376cb6e --- /dev/null +++ b/.github/workflows/plugins-deploy-styles-doc.yml @@ -0,0 +1,123 @@ +name: Plugins/styles-doc deployer + +on: + push: + branches: + - develop + - staging + - main + paths: + - 'plugins/apps/example-styles/**' + - 'plugins/libs/plugins-styles/**' + - 'plugins/wrangler-penpot-plugins-styles-doc.toml' + workflow_dispatch: + inputs: + gh_ref: + description: 'Name of the branch' + type: choice + required: true + default: 'develop' + options: + - develop + - staging + - main + +permissions: + contents: read + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Extract some useful variables + id: vars + run: | + echo "gh_ref=${{ inputs.gh_ref || github.ref_name }}" >> $GITHUB_OUTPUT + + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ steps.vars.outputs.gh_ref }} + + # START: Setup Node and PNPM enabling cache + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version-file: .nvmrc + + - name: Enable PNPM + working-directory: ./plugins + shell: bash + run: | + corepack enable; + corepack install; + + - name: Get pnpm store path + id: pnpm-store + working-directory: ./plugins + shell: bash + run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT + + - name: Cache pnpm store + uses: actions/cache@v4 + with: + path: ${{ steps.pnpm-store.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-${{ hashFiles('plugins/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm- + # END: Setup Node and PNPM enabling cache + + - name: Install deps + working-directory: ./plugins + shell: bash + run: | + pnpm install --no-frozen-lockfile; + pnpm add -D -w wrangler@latest; + + - name: Build styles + working-directory: plugins + shell: bash + run: npx nx run example-styles:build + + - name: Select Worker name + run: | + REF="${{ steps.vars.outputs.gh_ref }}" + case "$REF" in + main) + echo "WORKER_NAME=penpot-plugins-styles-doc-pro" >> $GITHUB_ENV + echo "WORKER_URI=styles-doc.plugins.penpot.app" >> $GITHUB_ENV ;; + staging) + echo "WORKER_NAME=penpot-plugins-styles-doc-pre" >> $GITHUB_ENV + echo "WORKER_URI=styles-doc.plugins.penpot.dev" >> $GITHUB_ENV ;; + develop) + echo "WORKER_NAME=penpot-plugins-styles-doc-hourly" >> $GITHUB_ENV + echo "WORKER_URI=styles-doc.plugins.hourly.penpot.dev" >> $GITHUB_ENV ;; + *) echo "Unsupported branch ${REF}" && exit 1 ;; + esac + + - name: Set the custom url + working-directory: plugins + shell: bash + run: | + sed -i "s/WORKER_URI/${{ env.WORKER_URI }}/g" wrangler-penpot-plugins-styles-doc.toml + + - name: Deploy to Cloudflare Workers + uses: cloudflare/wrangler-action@v3 + with: + workingDirectory: plugins + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: deploy --config wrangler-penpot-plugins-styles-doc.toml --name ${{ env.WORKER_NAME }} + + - name: Notify Mattermost + if: failure() + uses: mattermost/action-mattermost-notify@master + with: + MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }} + MATTERMOST_CHANNEL: bot-alerts-cicd + TEXT: | + ❌ 🧩💅 *[PENPOT PLUGINS] Error deploying Styles documentation.* + 📄 Triggered from ref: `${{ inputs.gh_ref }}` + 🔗 Run: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + @infra diff --git a/docs/plugins/api.md b/docs/plugins/api.md index 9abf6a9fa7..d1cd0bf4c3 100644 --- a/docs/plugins/api.md +++ b/docs/plugins/api.md @@ -6,4 +6,4 @@ desc: Create, deploy, and use the Penpot plugin API with our comprehensive docum # Penpot plugins API -We've got all the documentation you need for the API right here. +We've got all the documentation you need for the API right here. diff --git a/docs/plugins/beta-changelog.md b/docs/plugins/beta-changelog.md index 1f58235752..fb8a656f97 100644 --- a/docs/plugins/beta-changelog.md +++ b/docs/plugins/beta-changelog.md @@ -9,13 +9,13 @@ desc: See the Penpot plugin API changelog for version 1.0! Find breaking changes ### boom Epics and highlights - This marks the release of version 1.0, and from this point forward, we’ll do our best to avoid making any more breaking changes (or make deprecations backward compatible). - We’ve redone the documentation. You can check the API here: -[https://penpot-plugins-api-doc.pages.dev/](https://penpot-plugins-api-doc.pages.dev/) +[https://doc.plugins.penpot.app/](https://doc.plugins.penpot.app/) - New samples repository with lots of samples to use the API: [https://github.com/penpot/penpot-plugins-samples](https://github.com/penpot/penpot-plugins-samples) ### boom Breaking changes & Deprecations -- Changed types names to remove the Penpot prefix. So for example: PenpotShape becomes Shape; PenpotFile becomes File, and so on. Check the [API documentation](https://penpot-plugins-api-doc.pages.dev/) for more details. +- Changed types names to remove the Penpot prefix. So for example: PenpotShape becomes Shape; PenpotFile becomes File, and so on. Check the [API documentation](https://doc.plugins.penpot.app/) for more details. - Changes on the penpot.on and penpot.off methods. Previously you had to send the original callback to the off method in order to remove an event listener. Now, penpot.on will return an *id* that you can pass to the penpot.off method in order to remove the listener. diff --git a/docs/plugins/create-a-plugin.md b/docs/plugins/create-a-plugin.md index 80c4a08df6..42fc096dbe 100644 --- a/docs/plugins/create-a-plugin.md +++ b/docs/plugins/create-a-plugin.md @@ -49,7 +49,7 @@ There are two libraries that can help you with your plugin's development. They a ### Plugin styles -@penpot/plugin-styles contains styles to help build the UI for Penpot plugins. To check the styles go to Plugin styles. +@penpot/plugin-styles contains styles to help build the UI for Penpot plugins. To check the styles go to Plugin styles. ```bash npm install @penpot/plugin-styles @@ -139,7 +139,7 @@ parent.postMessage(responseMessage, targetOrigin); By using these message-based events, any data retrieved through the Penpot API can be communicated to and from your plugin interface seamlessly. -For more detailed information, refer to the [Penpot Plugins API Documentation](https://penpot-plugins-api-doc.pages.dev/). +For more detailed information, refer to the [Penpot Plugins API Documentation](https://doc.plugins.penpot.app/). ## 2.5. Step 5. Build the plugin file diff --git a/docs/plugins/examples-templates.md b/docs/plugins/examples-templates.md index 1836b132c2..d50e49e460 100644 --- a/docs/plugins/examples-templates.md +++ b/docs/plugins/examples-templates.md @@ -86,7 +86,7 @@ penpot.library.local.createTypography(); Penpot has dark and light modes, and you can easily add this to your plugin so your interface adapts to both themes. When you add theme support, your plugin will automatically sync with Penpot's interface settings, so the user experience is consistent no matter which mode is selected. This makes your plugin look better and also ensures it stays in line with Penpot's overall design. -Just a heads-up: if you use the plugin-styles library, many elements will automatically adapt to dark or light mode without any extra effort from you. However, if you need to customize specific elements, be sure to use the selectors provided in the styles.css of the example. +Just a heads-up: if you use the plugin-styles library, many elements will automatically adapt to dark or light mode without any extra effort from you. However, if you need to customize specific elements, be sure to use the selectors provided in the styles.css of the example. Theme example diff --git a/docs/plugins/faq.md b/docs/plugins/faq.md index 4050358597..0d761bde10 100644 --- a/docs/plugins/faq.md +++ b/docs/plugins/faq.md @@ -40,7 +40,7 @@ The plugin PenpotFlow or PenpotInteraction interfaces. +Absolutely! You can definitely create flows and interactions in the same elements as in the interface, like frames, shapes, and groups. Just check out the API documentation for the methods: createFlow, addInteraction, or removeInteraction. And if you need more help, you can always check out the Flow or Interaction interfaces. ### Are there any security or quality criteria I should be aware of? @@ -48,7 +48,8 @@ There are no set requirements. However, we can recommend the use of https:\/\/create-palette-penpot-plugin.pages.dev/assets/manifest.json or check the code here +No, it’s completely optional, in fact, we have an example of a plugin without UI. Try the plugin using this url to install it: https:\/\/create-palette.plugins.penpot.app/assets/manifest.json or check the code here + ### Can I create components? @@ -58,7 +59,7 @@ Yes, it is possible to create components using: createComponent(shapes: Shape[]): LibraryComponent; ``` -Take a look at the Penpot Library methods in the API documentation or this simple example. +Take a look at the Penpot Library methods in the API documentation or this simple example. ### Is there a place where I can share my plugin? diff --git a/docs/plugins/getting-started.md b/docs/plugins/getting-started.md index 9765e737b0..abfbc508b1 100644 --- a/docs/plugins/getting-started.md +++ b/docs/plugins/getting-started.md @@ -69,12 +69,13 @@ You need to provide the plugin's manifest URL for the installation. If there are | Name | URL | | ------------- | ------------------------------------------------------------------- | -| Lorem Ipsum | https://lorem-ipsum-penpot-plugin.pages.dev/assets/manifest.json | -| Contrast | https://contrast-penpot-plugin.pages.dev/assets/manifest.json | -| Feather icons | https://icons-penpot-plugin.pages.dev/assets/manifest.json | -| Tables | https://table-penpot-plugin.pages.dev/assets/manifest.json | -| Color palette | https://create-palette-penpot-plugin.pages.dev/assets/manifest.json | -| Rename layers | https://rename-layers-penpot-plugin.pages.dev/assets/manifest.json | +| Color palette | https://create-palette.plugins.penpot.app/assets/manifest.json | +| Contrast | https://contrast.plugins.penpot.app/assets/manifest.json | +| Feather icons | https://icons.plugins.penpot.app/assets/manifest.json | +| Lorem ipsum | https://lorem-ipsum.plugins.penpot.app/assets/manifest.json | +| Rename layers | https://rename-layers.plugins.penpot.app/assets/manifest.json | +| Tables | https://table.plugins.penpot.app/assets/manifest.json | + ## 1.4. Plugin's basics diff --git a/plugins/CONTRIBUTING.md b/plugins/CONTRIBUTING.md index e4440cf083..10b243cd19 100644 --- a/plugins/CONTRIBUTING.md +++ b/plugins/CONTRIBUTING.md @@ -7,7 +7,7 @@ different parts of the platform, please refer to `docs/` directory. ## Reporting Bugs -We are using [GitHub Issues](https://github.com/penpot/penpot-plugins/issues) +We are using [GitHub Issues](https://github.com/penpot/penpot/issues) for our public bugs. We keep a close eye on this and try to make it clear when we have an internal fix in progress. Before filing a new task, try to make sure your problem doesn't already exist. diff --git a/plugins/apps/colors-to-tokens-plugin/project.json b/plugins/apps/colors-to-tokens-plugin/project.json index 01ad02bbe6..87e3fb83d4 100644 --- a/plugins/apps/colors-to-tokens-plugin/project.json +++ b/plugins/apps/colors-to-tokens-plugin/project.json @@ -16,6 +16,7 @@ "polyfills": ["zone.js"], "tsConfig": "apps/colors-to-tokens-plugin/tsconfig.app.json", "assets": [ + "apps/colors-to-tokens-plugin/src/_headers", "apps/colors-to-tokens-plugin/src/favicon.ico", "apps/colors-to-tokens-plugin/src/assets" ], diff --git a/plugins/apps/colors-to-tokens-plugin/src/_headers b/plugins/apps/colors-to-tokens-plugin/src/_headers new file mode 100644 index 0000000000..cdb4e7ed20 --- /dev/null +++ b/plugins/apps/colors-to-tokens-plugin/src/_headers @@ -0,0 +1,4 @@ +/* +Access-Control-Allow-Origin: * +Access-Control-Allow-Methods: GET, POST, OPTIONS +Access-Control-Allow-Headers: Content-Type diff --git a/plugins/apps/contrast-plugin/project.json b/plugins/apps/contrast-plugin/project.json index 6de0d44104..69f9c92766 100644 --- a/plugins/apps/contrast-plugin/project.json +++ b/plugins/apps/contrast-plugin/project.json @@ -16,6 +16,7 @@ "polyfills": ["zone.js"], "tsConfig": "apps/contrast-plugin/tsconfig.app.json", "assets": [ + "apps/contrast-plugin/src/_headers", "apps/contrast-plugin/src/favicon.ico", "apps/contrast-plugin/src/assets" ], diff --git a/plugins/apps/contrast-plugin/src/_headers b/plugins/apps/contrast-plugin/src/_headers new file mode 100644 index 0000000000..cdb4e7ed20 --- /dev/null +++ b/plugins/apps/contrast-plugin/src/_headers @@ -0,0 +1,4 @@ +/* +Access-Control-Allow-Origin: * +Access-Control-Allow-Methods: GET, POST, OPTIONS +Access-Control-Allow-Headers: Content-Type diff --git a/plugins/apps/create-palette-plugin/public/_headers b/plugins/apps/create-palette-plugin/public/_headers new file mode 100644 index 0000000000..cdb4e7ed20 --- /dev/null +++ b/plugins/apps/create-palette-plugin/public/_headers @@ -0,0 +1,4 @@ +/* +Access-Control-Allow-Origin: * +Access-Control-Allow-Methods: GET, POST, OPTIONS +Access-Control-Allow-Headers: Content-Type diff --git a/plugins/apps/icons-plugin/project.json b/plugins/apps/icons-plugin/project.json index 6540a148e1..90f01a50c2 100644 --- a/plugins/apps/icons-plugin/project.json +++ b/plugins/apps/icons-plugin/project.json @@ -16,6 +16,7 @@ "polyfills": ["zone.js"], "tsConfig": "apps/icons-plugin/tsconfig.app.json", "assets": [ + "apps/icons-plugin/src/_headers", "apps/icons-plugin/src/favicon.ico", "apps/icons-plugin/src/assets" ], diff --git a/plugins/apps/icons-plugin/src/_headers b/plugins/apps/icons-plugin/src/_headers new file mode 100644 index 0000000000..cdb4e7ed20 --- /dev/null +++ b/plugins/apps/icons-plugin/src/_headers @@ -0,0 +1,4 @@ +/* +Access-Control-Allow-Origin: * +Access-Control-Allow-Methods: GET, POST, OPTIONS +Access-Control-Allow-Headers: Content-Type diff --git a/plugins/apps/lorem-ipsum-plugin/project.json b/plugins/apps/lorem-ipsum-plugin/project.json index db66c3677b..1747fcf6e8 100644 --- a/plugins/apps/lorem-ipsum-plugin/project.json +++ b/plugins/apps/lorem-ipsum-plugin/project.json @@ -16,6 +16,7 @@ "polyfills": ["zone.js"], "tsConfig": "apps/lorem-ipsum-plugin/tsconfig.app.json", "assets": [ + "apps/lorem-ipsum-plugin/src/_headers", "apps/lorem-ipsum-plugin/src/favicon.ico", "apps/lorem-ipsum-plugin/src/assets" ], diff --git a/plugins/apps/lorem-ipsum-plugin/src/_headers b/plugins/apps/lorem-ipsum-plugin/src/_headers new file mode 100644 index 0000000000..cdb4e7ed20 --- /dev/null +++ b/plugins/apps/lorem-ipsum-plugin/src/_headers @@ -0,0 +1,4 @@ +/* +Access-Control-Allow-Origin: * +Access-Control-Allow-Methods: GET, POST, OPTIONS +Access-Control-Allow-Headers: Content-Type diff --git a/plugins/apps/rename-layers-plugin/project.json b/plugins/apps/rename-layers-plugin/project.json index 9a4e67c5be..71c314986a 100644 --- a/plugins/apps/rename-layers-plugin/project.json +++ b/plugins/apps/rename-layers-plugin/project.json @@ -16,6 +16,7 @@ "polyfills": ["zone.js"], "tsConfig": "apps/rename-layers-plugin/tsconfig.app.json", "assets": [ + "apps/rename-layers-plugin/src/_headers", "apps/rename-layers-plugin/src/favicon.ico", "apps/rename-layers-plugin/src/assets" ], diff --git a/plugins/apps/rename-layers-plugin/src/_headers b/plugins/apps/rename-layers-plugin/src/_headers new file mode 100644 index 0000000000..cdb4e7ed20 --- /dev/null +++ b/plugins/apps/rename-layers-plugin/src/_headers @@ -0,0 +1,4 @@ +/* +Access-Control-Allow-Origin: * +Access-Control-Allow-Methods: GET, POST, OPTIONS +Access-Control-Allow-Headers: Content-Type diff --git a/plugins/apps/table-plugin/project.json b/plugins/apps/table-plugin/project.json index 9ac5758270..e3cc6fc45e 100644 --- a/plugins/apps/table-plugin/project.json +++ b/plugins/apps/table-plugin/project.json @@ -16,6 +16,7 @@ "polyfills": ["zone.js"], "tsConfig": "apps/table-plugin/tsconfig.app.json", "assets": [ + "apps/table-plugin/src/_headers", "apps/table-plugin/src/favicon.ico", "apps/table-plugin/src/assets" ], diff --git a/plugins/apps/table-plugin/src/_headers b/plugins/apps/table-plugin/src/_headers new file mode 100644 index 0000000000..cdb4e7ed20 --- /dev/null +++ b/plugins/apps/table-plugin/src/_headers @@ -0,0 +1,4 @@ +/* +Access-Control-Allow-Origin: * +Access-Control-Allow-Methods: GET, POST, OPTIONS +Access-Control-Allow-Headers: Content-Type diff --git a/plugins/docs/api-docs.md b/plugins/docs/api-docs.md index a8cf00b157..dd38659fc9 100644 --- a/plugins/docs/api-docs.md +++ b/plugins/docs/api-docs.md @@ -19,7 +19,7 @@ the latest changes from the `main` branch. This will trigger the deployment at Cloudfare if the `libs/plugin-types/index.d.ts` or the `tools/typedoc.css` files have been updated. -Take a look at the [Penpot plugins API](https://penpot-plugins-api-doc.pages.dev/) to see what's new. +Take a look at the [Penpot plugins API](https://doc.plugins.penpot.app/) to see what's new. #### Styles diff --git a/plugins/libs/plugins-styles/README.md b/plugins/libs/plugins-styles/README.md index 6739a9c393..9291f21cfe 100644 --- a/plugins/libs/plugins-styles/README.md +++ b/plugins/libs/plugins-styles/README.md @@ -20,7 +20,7 @@ Import the CSS file into your project: For detailed examples and to see how to use the styles and components, visit the documentation at: -[Penpot Plugin Styles Documentation](https://penpot-plugins-styles.pages.dev) +[Penpot Plugin Styles Documentation](https://styles-doc.plugins.penpot.app) #### Icons diff --git a/plugins/wrangler-penpot-plugins-api-doc.toml b/plugins/wrangler-penpot-plugins-api-doc.toml index e9535be2d8..b09adf8b1a 100644 --- a/plugins/wrangler-penpot-plugins-api-doc.toml +++ b/plugins/wrangler-penpot-plugins-api-doc.toml @@ -2,3 +2,7 @@ name = "penpot-plugins-api-doc" compatibility_date = "2025-01-01" assets = { directory = "dist/doc" } + +[[routes]] +pattern = "WORKER_URI" +custom_domain = true diff --git a/plugins/wrangler-penpot-plugins-styles-doc.toml b/plugins/wrangler-penpot-plugins-styles-doc.toml new file mode 100644 index 0000000000..7aa86eb469 --- /dev/null +++ b/plugins/wrangler-penpot-plugins-styles-doc.toml @@ -0,0 +1,8 @@ +name = "penpot-plugins-style-doc" +compatibility_date = "2025-01-01" + +assets = { directory = "dist/apps/example-styles" } + +[[routes]] +pattern = "WORKER_URI" +custom_domain = true