From d9667e9803b3ec1f76e8e20dda1aa74bfe98b203 Mon Sep 17 00:00:00 2001 From: Kurt King Date: Fri, 30 Aug 2024 08:48:19 -0600 Subject: [PATCH 1/5] Migrate announcements plugin Signed-off-by: Kurt King --- workspaces/announcements/.changeset/README.md | 8 + .../announcements/.changeset/config.json | 11 + workspaces/announcements/.editorconfig | 19 + workspaces/announcements/.eslintrc.js | 3 + workspaces/announcements/.gitignore | 26 + workspaces/announcements/.tool-versions | 1 + workspaces/announcements/CONTRIBUTING.md | 98 + workspaces/announcements/README.md | 45 + workspaces/announcements/app-config.yaml | 28 + workspaces/announcements/backstage.json | 3 + .../docs/announcement-timeline.md | 21 + .../docs/images/announcement_banner.png | Bin 0 -> 39119 bytes .../docs/images/announcements_card.png | Bin 0 -> 33232 bytes .../docs/images/announcements_page.png | Bin 0 -> 91741 bytes .../docs/images/announcements_search.png | Bin 0 -> 153432 bytes workspaces/announcements/docs/index.md | 57 + .../docs/latest-announcement-banner.md | 25 + .../docs/latest-announcements-on-page.md | 24 + workspaces/announcements/docs/search.md | 114 + workspaces/announcements/docs/setup.md | 160 + workspaces/announcements/env.sample | 3 + workspaces/announcements/mkdocs.yml | 10 + workspaces/announcements/package.json | 61 + .../announcements-backend/.eslintrc.js | 1 + .../announcements-backend/CHANGELOG.md | 256 + .../plugins/announcements-backend/README.md | 67 + .../202210311212_announcements_schemas.js | 33 + .../202304071343_announcements_categories.js | 34 + .../db/seeds/01_categories.js | 24 + .../db/seeds/02_announcements.js | 478 + .../announcements-backend/dev/index.ts | 12 + .../plugins/announcements-backend/knexfile.js | 18 + .../announcements-backend/package.json | 87 + .../announcements-backend/src/index.ts | 11 + .../announcements-backend/src/plugin.ts | 32 + .../announcementsContextBuilder.test.ts | 43 + .../service/announcementsContextBuilder.ts | 38 + .../src/service/model.ts | 6 + .../persistence/AnnouncementsDatabase.test.ts | 316 + .../persistence/AnnouncementsDatabase.ts | 180 + .../persistence/CategoriesDatabase.test.ts | 65 + .../service/persistence/CategoriesDatabase.ts | 31 + .../persistence/persistenceContext.test.ts | 32 + .../service/persistence/persistenceContext.ts | 43 + .../src/service/router.test.ts | 95 + .../src/service/router.ts | 225 + .../src/service/standaloneServer.ts | 77 + .../announcements-backend/src/setupTests.ts | 1 + .../plugins/announcements-common/.eslintrc.js | 1 + .../plugins/announcements-common/CHANGELOG.md | 95 + .../plugins/announcements-common/README.md | 25 + .../plugins/announcements-common/package.json | 51 + .../plugins/announcements-common/src/index.ts | 2 + .../announcements-common/src/permissions.ts | 22 + .../plugins/announcements-common/src/types.ts | 26 + .../plugins/announcements-node/.eslintrc.js | 1 + .../plugins/announcements-node/CHANGELOG.md | 51 + .../plugins/announcements-node/README.md | 5 + .../plugins/announcements-node/package.json | 46 + .../src/AnnouncementsService.ts | 38 + .../src/DefaultAnnouncementsService.test.ts | 68 + .../src/DefaultAnnouncementsService.ts | 55 + .../plugins/announcements-node/src/index.ts | 2 + .../announcements-node/src/setupTests.ts | 1 + .../plugins/announcements-react/.eslintrc.js | 1 + .../plugins/announcements-react/CHANGELOG.md | 80 + .../plugins/announcements-react/README.md | 7 + .../plugins/announcements-react/package.json | 53 + .../src/apis/AnnouncementsApi.ts | 35 + .../announcements-react/src/apis/index.ts | 2 + .../announcements-react/src/apis/types.ts | 12 + .../announcements-react/src/hooks/index.ts | 2 + .../src/hooks/useAnnouncements.ts | 39 + .../src/hooks/useCategories.ts | 29 + .../plugins/announcements-react/src/index.ts | 12 + .../announcements-react/src/setupTests.ts | 1 + .../plugins/announcements/.eslintrc.js | 1 + .../plugins/announcements/CHANGELOG.md | 342 + .../plugins/announcements/README.md | 12 + .../dev/FakeCatalogEntityPage.tsx | 12 + .../plugins/announcements/dev/index.tsx | 104 + .../plugins/announcements/package.json | 101 + .../plugins/announcements/src/alpha.ts | 23 + .../plugins/announcements/src/alpha/apis.ts | 32 + .../src/alpha/entityCards.test.tsx | 77 + .../announcements/src/alpha/entityCards.tsx | 19 + .../plugins/announcements/src/alpha/index.ts | 4 + .../announcements/src/alpha/navItems.tsx | 17 + .../plugins/announcements/src/alpha/pages.tsx | 18 + .../plugins/announcements/src/api.ts | 168 + .../AnnouncementForm/AnnouncementForm.tsx | 104 + .../AnnouncementForm/CategoryInput.test.tsx | 132 + .../AnnouncementForm/CategoryInput.tsx | 115 + .../src/components/AnnouncementForm/index.ts | 1 + .../AnnouncementPage/AnnouncementPage.tsx | 111 + .../src/components/AnnouncementPage/index.ts | 1 + .../AnnouncementSearchResultListItem.tsx | 107 + .../AnnouncementSearchResultListItem/index.ts | 2 + .../AnnouncementsCard/AnnouncementsCard.tsx | 137 + .../src/components/AnnouncementsCard/index.ts | 1 + .../AnnouncementsPage.test.tsx | 118 + .../AnnouncementsPage/AnnouncementsPage.tsx | 348 + .../AnnouncementsPage/ContextMenu.tsx | 66 + .../DeleteAnnouncementDialog.tsx | 32 + .../src/components/AnnouncementsPage/index.ts | 1 + .../useDeleteAnnouncementDialogState.tsx | 42 + .../AnnouncementsTimeline.test.tsx | 83 + .../AnnouncementsTimeline.tsx | 121 + .../components/AnnouncementsTimeline/index.ts | 1 + .../CategoriesPage/CategoriesPage.tsx | 157 + .../CategoriesPage/DeleteCategoryDialog.tsx | 28 + .../src/components/CategoriesPage/index.ts | 1 + .../useDeleteCategoryDialogState.tsx | 42 + .../CreateAnnouncementPage.tsx | 76 + .../CreateAnnouncementPage/index.ts | 1 + .../EditAnnouncementPage.tsx | 61 + .../components/EditAnnouncementPage/index.ts | 1 + .../NewAnnouncementBanner.tsx | 154 + .../components/NewAnnouncementBanner/index.ts | 1 + .../NewCategoryDialog/NewCategoryDialog.tsx | 71 + .../src/components/NewCategoryDialog/index.ts | 1 + .../announcements/src/components/Router.tsx | 70 + .../announcements/src/components/index.ts | 1 + .../plugins/announcements/src/index.ts | 17 + .../plugins/announcements/src/plugin.test.ts | 7 + .../plugins/announcements/src/plugin.ts | 96 + .../plugins/announcements/src/routes.ts | 29 + .../plugins/announcements/src/setupTests.ts | 2 + .../plugins/announcements/tsconfig.json | 9 + .../.eslintrc.js | 1 + .../CHANGELOG.md | 66 + .../README.md | 3 + .../config.d.ts | 17 + .../package.json | 50 + .../AnnouncementCollatorFactory.test.ts | 84 + .../collators/AnnouncementCollatorFactory.ts | 79 + .../src/collators/index.ts | 11 + .../src/index.ts | 2 + .../src/module.ts | 55 + workspaces/announcements/tsconfig.json | 15 + workspaces/announcements/yarn.lock | 27577 ++++++++++++++++ 141 files changed, 34922 insertions(+) create mode 100644 workspaces/announcements/.changeset/README.md create mode 100644 workspaces/announcements/.changeset/config.json create mode 100644 workspaces/announcements/.editorconfig create mode 100644 workspaces/announcements/.eslintrc.js create mode 100644 workspaces/announcements/.gitignore create mode 100644 workspaces/announcements/.tool-versions create mode 100644 workspaces/announcements/CONTRIBUTING.md create mode 100644 workspaces/announcements/README.md create mode 100644 workspaces/announcements/app-config.yaml create mode 100644 workspaces/announcements/backstage.json create mode 100644 workspaces/announcements/docs/announcement-timeline.md create mode 100644 workspaces/announcements/docs/images/announcement_banner.png create mode 100644 workspaces/announcements/docs/images/announcements_card.png create mode 100644 workspaces/announcements/docs/images/announcements_page.png create mode 100644 workspaces/announcements/docs/images/announcements_search.png create mode 100644 workspaces/announcements/docs/index.md create mode 100644 workspaces/announcements/docs/latest-announcement-banner.md create mode 100644 workspaces/announcements/docs/latest-announcements-on-page.md create mode 100644 workspaces/announcements/docs/search.md create mode 100644 workspaces/announcements/docs/setup.md create mode 100644 workspaces/announcements/env.sample create mode 100644 workspaces/announcements/mkdocs.yml create mode 100644 workspaces/announcements/package.json create mode 100644 workspaces/announcements/plugins/announcements-backend/.eslintrc.js create mode 100644 workspaces/announcements/plugins/announcements-backend/CHANGELOG.md create mode 100644 workspaces/announcements/plugins/announcements-backend/README.md create mode 100644 workspaces/announcements/plugins/announcements-backend/db/migrations/202210311212_announcements_schemas.js create mode 100644 workspaces/announcements/plugins/announcements-backend/db/migrations/202304071343_announcements_categories.js create mode 100644 workspaces/announcements/plugins/announcements-backend/db/seeds/01_categories.js create mode 100644 workspaces/announcements/plugins/announcements-backend/db/seeds/02_announcements.js create mode 100644 workspaces/announcements/plugins/announcements-backend/dev/index.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/knexfile.js create mode 100644 workspaces/announcements/plugins/announcements-backend/package.json create mode 100644 workspaces/announcements/plugins/announcements-backend/src/index.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/plugin.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/announcementsContextBuilder.test.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/announcementsContextBuilder.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/model.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/persistence/AnnouncementsDatabase.test.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/persistence/AnnouncementsDatabase.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/persistence/CategoriesDatabase.test.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/persistence/CategoriesDatabase.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/persistence/persistenceContext.test.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/persistence/persistenceContext.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/router.test.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/router.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/service/standaloneServer.ts create mode 100644 workspaces/announcements/plugins/announcements-backend/src/setupTests.ts create mode 100644 workspaces/announcements/plugins/announcements-common/.eslintrc.js create mode 100644 workspaces/announcements/plugins/announcements-common/CHANGELOG.md create mode 100644 workspaces/announcements/plugins/announcements-common/README.md create mode 100644 workspaces/announcements/plugins/announcements-common/package.json create mode 100644 workspaces/announcements/plugins/announcements-common/src/index.ts create mode 100644 workspaces/announcements/plugins/announcements-common/src/permissions.ts create mode 100644 workspaces/announcements/plugins/announcements-common/src/types.ts create mode 100644 workspaces/announcements/plugins/announcements-node/.eslintrc.js create mode 100644 workspaces/announcements/plugins/announcements-node/CHANGELOG.md create mode 100644 workspaces/announcements/plugins/announcements-node/README.md create mode 100644 workspaces/announcements/plugins/announcements-node/package.json create mode 100644 workspaces/announcements/plugins/announcements-node/src/AnnouncementsService.ts create mode 100644 workspaces/announcements/plugins/announcements-node/src/DefaultAnnouncementsService.test.ts create mode 100644 workspaces/announcements/plugins/announcements-node/src/DefaultAnnouncementsService.ts create mode 100644 workspaces/announcements/plugins/announcements-node/src/index.ts create mode 100644 workspaces/announcements/plugins/announcements-node/src/setupTests.ts create mode 100644 workspaces/announcements/plugins/announcements-react/.eslintrc.js create mode 100644 workspaces/announcements/plugins/announcements-react/CHANGELOG.md create mode 100644 workspaces/announcements/plugins/announcements-react/README.md create mode 100644 workspaces/announcements/plugins/announcements-react/package.json create mode 100644 workspaces/announcements/plugins/announcements-react/src/apis/AnnouncementsApi.ts create mode 100644 workspaces/announcements/plugins/announcements-react/src/apis/index.ts create mode 100644 workspaces/announcements/plugins/announcements-react/src/apis/types.ts create mode 100644 workspaces/announcements/plugins/announcements-react/src/hooks/index.ts create mode 100644 workspaces/announcements/plugins/announcements-react/src/hooks/useAnnouncements.ts create mode 100644 workspaces/announcements/plugins/announcements-react/src/hooks/useCategories.ts create mode 100644 workspaces/announcements/plugins/announcements-react/src/index.ts create mode 100644 workspaces/announcements/plugins/announcements-react/src/setupTests.ts create mode 100644 workspaces/announcements/plugins/announcements/.eslintrc.js create mode 100644 workspaces/announcements/plugins/announcements/CHANGELOG.md create mode 100644 workspaces/announcements/plugins/announcements/README.md create mode 100644 workspaces/announcements/plugins/announcements/dev/FakeCatalogEntityPage.tsx create mode 100644 workspaces/announcements/plugins/announcements/dev/index.tsx create mode 100644 workspaces/announcements/plugins/announcements/package.json create mode 100644 workspaces/announcements/plugins/announcements/src/alpha.ts create mode 100644 workspaces/announcements/plugins/announcements/src/alpha/apis.ts create mode 100644 workspaces/announcements/plugins/announcements/src/alpha/entityCards.test.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/alpha/entityCards.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/alpha/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/alpha/navItems.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/alpha/pages.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/api.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/AnnouncementForm.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/CategoryInput.test.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/CategoryInput.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementPage/AnnouncementPage.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementPage/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementSearchResultListItem/AnnouncementSearchResultListItem.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementSearchResultListItem/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsCard/AnnouncementsCard.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsCard/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/AnnouncementsPage.test.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/AnnouncementsPage.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/ContextMenu.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/DeleteAnnouncementDialog.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/useDeleteAnnouncementDialogState.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/AnnouncementsTimeline.test.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/AnnouncementsTimeline.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/CategoriesPage/CategoriesPage.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/CategoriesPage/DeleteCategoryDialog.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/CategoriesPage/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/CategoriesPage/useDeleteCategoryDialogState.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/CreateAnnouncementPage/CreateAnnouncementPage.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/CreateAnnouncementPage/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/EditAnnouncementPage/EditAnnouncementPage.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/EditAnnouncementPage/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/NewAnnouncementBanner/NewAnnouncementBanner.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/NewAnnouncementBanner/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/NewCategoryDialog/NewCategoryDialog.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/NewCategoryDialog/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/components/Router.tsx create mode 100644 workspaces/announcements/plugins/announcements/src/components/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/index.ts create mode 100644 workspaces/announcements/plugins/announcements/src/plugin.test.ts create mode 100644 workspaces/announcements/plugins/announcements/src/plugin.ts create mode 100644 workspaces/announcements/plugins/announcements/src/routes.ts create mode 100644 workspaces/announcements/plugins/announcements/src/setupTests.ts create mode 100644 workspaces/announcements/plugins/announcements/tsconfig.json create mode 100644 workspaces/announcements/plugins/search-backend-module-announcements/.eslintrc.js create mode 100644 workspaces/announcements/plugins/search-backend-module-announcements/CHANGELOG.md create mode 100644 workspaces/announcements/plugins/search-backend-module-announcements/README.md create mode 100644 workspaces/announcements/plugins/search-backend-module-announcements/config.d.ts create mode 100644 workspaces/announcements/plugins/search-backend-module-announcements/package.json create mode 100644 workspaces/announcements/plugins/search-backend-module-announcements/src/collators/AnnouncementCollatorFactory.test.ts create mode 100644 workspaces/announcements/plugins/search-backend-module-announcements/src/collators/AnnouncementCollatorFactory.ts create mode 100644 workspaces/announcements/plugins/search-backend-module-announcements/src/collators/index.ts create mode 100644 workspaces/announcements/plugins/search-backend-module-announcements/src/index.ts create mode 100644 workspaces/announcements/plugins/search-backend-module-announcements/src/module.ts create mode 100644 workspaces/announcements/tsconfig.json create mode 100644 workspaces/announcements/yarn.lock diff --git a/workspaces/announcements/.changeset/README.md b/workspaces/announcements/.changeset/README.md new file mode 100644 index 000000000..e5b6d8d6a --- /dev/null +++ b/workspaces/announcements/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/workspaces/announcements/.changeset/config.json b/workspaces/announcements/.changeset/config.json new file mode 100644 index 000000000..17e0060b2 --- /dev/null +++ b/workspaces/announcements/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@2.2.0/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/workspaces/announcements/.editorconfig b/workspaces/announcements/.editorconfig new file mode 100644 index 000000000..f05a6db4d --- /dev/null +++ b/workspaces/announcements/.editorconfig @@ -0,0 +1,19 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 + +# 4 space indentation for JS stuff +[*.{js,json,ts,tsx}] +indent_style = space +indent_size = 2 + +# Tab indentation (no size specified) +[Makefile] +indent_style = tab diff --git a/workspaces/announcements/.eslintrc.js b/workspaces/announcements/.eslintrc.js new file mode 100644 index 000000000..e35135249 --- /dev/null +++ b/workspaces/announcements/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + root: true, +}; diff --git a/workspaces/announcements/.gitignore b/workspaces/announcements/.gitignore new file mode 100644 index 000000000..7382ca59a --- /dev/null +++ b/workspaces/announcements/.gitignore @@ -0,0 +1,26 @@ +node_modules + +# Tests +coverage + +# Ts generated output +dist-types +dist + +# Yarn 3 files +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +.env +.npmrc +**/*.tgz +.vscode +.idea + +local.sqlite +tmp/* diff --git a/workspaces/announcements/.tool-versions b/workspaces/announcements/.tool-versions new file mode 100644 index 000000000..f6efb75ce --- /dev/null +++ b/workspaces/announcements/.tool-versions @@ -0,0 +1 @@ +nodejs 18.17.1 diff --git a/workspaces/announcements/CONTRIBUTING.md b/workspaces/announcements/CONTRIBUTING.md new file mode 100644 index 000000000..e5e6d020b --- /dev/null +++ b/workspaces/announcements/CONTRIBUTING.md @@ -0,0 +1,98 @@ +# Contributing Guidelines + +`backstage-plugin-announcements` is [MIT licensed](LICENSE.md) and accepts contributions via +GitHub pull requests. This document outlines some of the conventions on +the development workflow, commit message formatting, contact points, and other +resources to make it easier to get your contribution accepted. + +Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given. ❤️ + +## Support Channels + +The official support channels, for both users and contributors, are: + +- GitHub [issues](https://github.com/procore-oss/backstage-plugin-announcements/issues) + +## How to Contribute + +Pull Requests (PRs) are the main and exclusive way to contribute to the project. + +## Local setup + +### Create a fork + +[Fork][fork], then clone the repository: + +```bash +git clone git@github.com:your_github_username/backstage-plugin-announcements.git +cd backstage-plugin-announcements +git remote add upstream https://github.com/procore-oss/backstage-plugin-announcements.git +git fetch upstream +``` + +### Install dependencies + +```bash +cp env.sample .env + +yarn install +``` + +### Run the plugins locally + +A standalone development version of both the frontend and backend plugins are included in this repository. +They can be started as follows: + +```bash +yarn dev # starts both the frontend and the backend in parallel +yarn start # starts the frontend only +yarn start-backend # starts the backend only +``` + +## Making Changes + +Start by creating a new branch for your changes: + +```bash +git checkout main +git fetch upstream +git rebase upstream/main +git checkout -b new-feature +``` + +Make your changes, then ensure that `yarn lint` and `yarn test` still pass. If you're satisfied with your changes, push them to your fork. + +```bash +git push origin new-feature +``` + +Then use the GitHub UI to open a pull request. + +Your changes are much more likely to be approved if you: + +- add tests for new functionality +- write a [good commit message][commit-message] +- maintain backward compatibility + +## Creating Changesets + +We use [changesets](https://github.com/atlassian/changesets) in order to prepare releases. To make the process of generating releases easy, please include changesets with your pull request. This will result in a every package affected by a change getting a proper version number and an entry in its `CHANGELOG.md. + +### When to use a changeset? + +Any time a patch, minor, or major change aligning to [Semantic Versioning](https://semver.org) is made to any published package in `plugins/`, a changeset should be used. +In general, changesets are not needed for the documentation, build utilities or similar. + +### How to create a changeset + +1. Run `yarn changeset` +2. Select which packages you want to include a changeset for +3. Select impact of change that you're introducing, using `minor` for breaking changes and `patch` otherwise. +4. Explain your changes in the generated changeset. See [examples of well written changesets](https://backstage.io/docs/getting-started/contributors#writing-changesets). +5. Add generated changeset to git +6. Push the commit with your changeset to the branch associated with your PR + +For more information, checkout [adding a changeset](https://github.com/atlassian/changesets/blob/master/docs/adding-a-changeset.md) documentation in the changesets repository. + +[fork]: https://github.com/procore-oss/backstage-plugin-announcements/fork +[commit-message]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html diff --git a/workspaces/announcements/README.md b/workspaces/announcements/README.md new file mode 100644 index 000000000..2054f6640 --- /dev/null +++ b/workspaces/announcements/README.md @@ -0,0 +1,45 @@ +# Announcements plugin for Backstage + +## Overview + +The Announcements plugin is a frontend, backend, and common plugin that manages and displays announcements within Backstage. + +This plugin provides: + +- a component to display the latest announcement as a banner, if there is one +- a component to display the latest announcements, for example on a homepage +- pages to list, view, create, edit and delete announcements +- integration with the [`@backstage/plugin-search`](https://github.com/backstage/backstage/tree/master/plugins/search) plugin +- integration with the [`@backstage/plugin-permission-backend`](https://github.com/backstage/backstage/tree/master/plugins/permission-backend) plugin + +## Installation + +Find [installation instructions](./docs/index.md#installation) in our documentation. + +## How does it look? + +### Latest announcement banner + +![Latest announcement banner](./docs/images/announcement_banner.png) + +### Announcements card + +![Announcements card](./docs/images/announcements_card.png) + +### Announcements page + +![Announcements page](./docs/images/announcements_page.png) + +### Announcements search + +![Announcements search results](./docs/images/announcements_search.png) + +## License + +This library is under the [MIT](LICENSE.md) license. + +## Special thanks & Disclaimer + +We want to thank K-Phoen for creating the announcement plugins found [here](https://github.com/K-Phoen/backstage-plugin-announcements). Their work has been invaluable in providing a foundation for our development efforts, and we are grateful for the time and effort they put into creating this plugin. + +In the spirit of Procore’s values of openness, our focus will be on meeting our internal needs, meaning we are making changes to the plugin that are incompatible with the original. We are happy to share it with the community and welcome all pull requests and issues. diff --git a/workspaces/announcements/app-config.yaml b/workspaces/announcements/app-config.yaml new file mode 100644 index 000000000..47e2f73a3 --- /dev/null +++ b/workspaces/announcements/app-config.yaml @@ -0,0 +1,28 @@ +app: + title: Announcements Dev App + baseUrl: http://localhost:3000 + +backend: + baseUrl: http://localhost:7007 + listen: + port: 7007 + database: + client: better-sqlite3 + connection: ':memory:' + cache: + store: memory + cors: + origin: http://localhost:3000 + methods: [GET, HEAD, PATCH, POST, PUT, DELETE] + credentials: true + csp: + connect-src: ["'self'", 'http:', 'https:'] + # Content-Security-Policy directives follow the Helmet format: https://helmetjs.github.io/#reference + # Default Helmet Content-Security-Policy values can be removed by setting the key to false + reading: + allow: + - host: localhost + +auth: + providers: + guest: {} diff --git a/workspaces/announcements/backstage.json b/workspaces/announcements/backstage.json new file mode 100644 index 000000000..25962c314 --- /dev/null +++ b/workspaces/announcements/backstage.json @@ -0,0 +1,3 @@ +{ + "version": "1.30.1" +} diff --git a/workspaces/announcements/docs/announcement-timeline.md b/workspaces/announcements/docs/announcement-timeline.md new file mode 100644 index 000000000..7780dc330 --- /dev/null +++ b/workspaces/announcements/docs/announcement-timeline.md @@ -0,0 +1,21 @@ +# Display announcements in a timeline + +Adding the `AnnouncementsTimeline` component to a page will display a raw timeline of the latest announcements. + +```ts +import { AnnouncementsTimeline } from '@procore-oss/backstage-plugin-announcements'; + +export const TimelineExampleCard = () => { + return ( + + + + + + + + + + ); +}; +``` diff --git a/workspaces/announcements/docs/images/announcement_banner.png b/workspaces/announcements/docs/images/announcement_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..4188e28dde6f91ca7ec99619ba625ac6254d4408 GIT binary patch literal 39119 zcmXtf1yEaU*KMG<7k4P`P`qeyZE<%f?oQC+?(SCHp}4!1LZN7IEfU=Ip7;CbGMOQe zKu&hHti9HHB9*_&pra6@fIuL0Iax_n5a?Ye2n0ijgaG^|H+Cx@_y*@HE~kzJeEA}M zivWHma+A__Q**R%^E7cW2U$8e+MBbwnz@*pJGfdox}Cl26#;=LL2{B}>Rve~-Qb_p zT7G9wH994Szse5&tmUn!_3e+0V3j#zTZV30Vk`biFc$v~chDF?p?}ce(B=fLrujyx zBPYALZ-Bk|V2G0>gET^i#w$T+-@4||2_;{>TJ@v*!qY1%Kbz=Q`6KCPt9r@RlUMGZ zNQs}nk8PEDbMMU)bVF&W+ou(g3Ktru<=nuGr2mVK9LASkdXxXcq?BxNc({a?uw}UB zY(C~-cn6zK0h>l8gyr##KneyH4k-wva{hMq78e%q)EgbNbo#mPlBynsZWkYOBeQ1)`O+JG`D!& zy_>v2l$0gqiBHAgZ(OAe^-r}@|Co-(BTa>a>Be>3Bd6A$22T$69R=ZE3L3abJCzV^ zyhT;$M$ud6+u7zKJa^B+c}E+|z)lN4iCe(Qg>RuewiX4&NDeyjWwaw2W__Qv+ z2Ttre)wnVZQK@~uM{dgw@!>IX)0r+Q#W_bK4sa)>NA|>n(hB01!Re$P74fkUCrTMjLAPmLcIX5U z*EY&?7HK>L`?g`p*)j;h=%2i4eJ;3V-Uh;YM+9>^jUL~h2Z0nVniz;s_7$W`m3~E> z64DBnPjHqtf)&lLob+3nd?&S;(l_H~NywZ@7ejYCI7~bpR)fx19q>nL2HN+XZv*PQ zQ>yazq{F(y)l>JBmH3$1^Bk+Lybum`qKnJ;R(y_yWD5Pe%9kd%;(_o;V>XQ6nsFCm-{DOTsSa-(=<&+<pg zo4zvE#z(7i4Ql52P(2}k^L81PaJ1huU>{us`l4dmYAj#dN^N0U=&F@y-_VHD>Pqt) z(@RoJQeI`tn~kOHQ?TpFeneMW%wyD!JFB=6x`*ruUBsES=HBM0!OV^Bp95GDnb%v%OPA`sJR$tm4{LDTH0>uiw*ao z1x<%l1_3X5@kx|o*e~JwDz%8tIPK0jxxuIG4wx1h(i(6}R1FXqOv4}1!}ZAMt@~MB zm5y`FJ#bS5S_rq`FqhVcXP->ZFPa?L6r&~Es-q+_tqBoZ5;?Un-34RVbh|8coH}i_ zS_C}`sV*mt6gcBWno(7M>E0VnN$BJB?i{kPjMk#=jtF-;>#5W7xd|8s4YcAFq9Z1f z*wB0A>m2kTtQi%1EmmUI>qEbO^h>B4`baYL!0`FAyh`CXisI<0*R=MO;VQofoczhVyoh|!$Tblw`V24c z*=@GQ_AuPRos(gVCⅇ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≀=y2g!#<7 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 literal 0 HcmV?d00001 diff --git a/workspaces/announcements/docs/images/announcements_page.png b/workspaces/announcements/docs/images/announcements_page.png new file mode 100644 index 0000000000000000000000000000000000000000..9f31c37ee8fc06e85bc51092dc18569639edcdda GIT binary patch literal 91741 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