Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
5748f57
chore(deps): bump dompurify from 3.2.3 to 3.2.4
dependabot[bot] Feb 18, 2025
09320a2
chore: merge master into develop after 2.0.dev325 version tagging
admin-cloudforet Feb 25, 2025
0c46878
chore: merge master into develop after 2.0.dev326 version tagging
admin-cloudforet Feb 25, 2025
a3b3be4
chore: merge master into develop after 2.0.dev327 version tagging
admin-cloudforet Feb 25, 2025
2a67f57
chore(workflow): improve random reviewer assignment logic (#5647)
WANZARGEN Feb 25, 2025
a081ada
chore: merge master into develop after 2.0.dev328 version tagging
admin-cloudforet Feb 25, 2025
a991c87
chore: edit api query key name
piggggggggy Feb 24, 2025
505f32f
chore: merge master into develop after 2.0.dev329 version tagging
admin-cloudforet Feb 27, 2025
9df428a
feat(use-api-query-key): refactor use-api-query-key composable
piggggggggy Feb 27, 2025
bd5d8cc
feat(api-doc): create api-doc generating cli
piggggggggy Feb 27, 2025
c359634
feat(api-composable): apply changed use-query-key hook
piggggggggy Feb 27, 2025
420a6af
chore: merge master into develop after 2.0.dev330 version tagging
admin-cloudforet Feb 27, 2025
b81dda9
Merge pull request #5668 from cloudforet-io/feature-vue-query-enhance…
piggggggggy Mar 4, 2025
e26b7fb
chore(query-key): solve query key bug (typo)
piggggggggy Mar 4, 2025
c516621
chore(ci): update Slack webhook URL in Make Helm Chart
mzc-eeheg Mar 4, 2025
0ea6ccd
feat(opsflow): fix v1 minor bugs and refactor to use vue query for ta…
WANZARGEN Mar 5, 2025
c2df6d7
ci(workflow): add develop branch to pull request review trigger
WANZARGEN Mar 5, 2025
7994c3e
fix(opsflow): update task-related API composables to use new useAPIQu…
WANZARGEN Mar 5, 2025
a1bc401
chore(widget): improve type safety and import handling
WANZARGEN Mar 5, 2025
627105d
Merge pull request #5675 from WANZARGEN/develop
WANZARGEN Mar 5, 2025
451211d
feat: add spec of `PCard`header color
seungyeoneeee Mar 5, 2025
393a2ed
Merge pull request #5650 from cloudforet-io/dependabot/npm_and_yarn/d…
WANZARGEN Mar 6, 2025
8618d10
Potential fix for code scanning alert no. 30: Incomplete string escap…
WANZARGEN Mar 6, 2025
dfbc076
Merge pull request #5676 from seungyeoneeee/feature-card-update
seungyeoneeee Mar 6, 2025
df74746
fix(ci): add optional chaining to prevent null user login errors in P…
WANZARGEN Mar 6, 2025
e434f61
Merge pull request #5678 from WANZARGEN/develop
WANZARGEN Mar 6, 2025
323cdc6
fix(route-constant): separate route-constant
piggggggggy Mar 6, 2025
e97ffbc
fix(route-constant): apply new admin route-constant
piggggggggy Mar 6, 2025
772e746
Merge pull request #5681 from cloudforet-io/feature-enhancement-route…
piggggggggy Mar 6, 2025
f1e475e
refactor: remove 'v1' at project files
skdud4659 Mar 6, 2025
1aa0745
Merge pull request #5682 from skdud4659/feature/_project
skdud4659 Mar 6, 2025
496a5ab
refactor(alert-manager): apply changed router
piggggggggy Mar 6, 2025
cae3b6d
refactor(alert-manager-v2): apply changed router
piggggggggy Mar 6, 2025
20a79fb
refactor(asset-inventory): apply changed router
piggggggggy Mar 6, 2025
86761cd
refactor(workspace-home): apply changed router
piggggggggy Mar 6, 2025
430d7f0
refactor(project): apply changed router
piggggggggy Mar 6, 2025
6eabb0b
refactor(ops-flow): apply changed router
piggggggggy Mar 6, 2025
ccc8770
refactor(iam/info): apply changed router
piggggggggy Mar 6, 2025
0898401
refactor(dashboard): apply changed router
piggggggggy Mar 6, 2025
17431da
refactor(cost-explorer): apply changed router
piggggggggy Mar 6, 2025
7693873
feat(router): improve router redirection method
piggggggggy Mar 6, 2025
aa31877
feat(reference-router): refactor reference router helper
piggggggggy Mar 6, 2025
45102d1
refactor(others): apply changed router
piggggggggy Mar 6, 2025
85ecb0a
chore(widget): solve dependency cycle (#5684)
piggggggggy Mar 6, 2025
a8022a5
Merge pull request #5683 from cloudforet-io/feature-router-enhancement
piggggggggy Mar 6, 2025
ebfc935
chore(deps): bump axios from 1.7.4 to 1.8.2
dependabot[bot] Mar 12, 2025
d72c6d7
Merge pull request #5688 from cloudforet-io/dependabot/npm_and_yarn/a…
WANZARGEN Mar 12, 2025
463436c
refactor(api-client): move package schema and API verb interfaces for…
WANZARGEN Mar 6, 2025
13fe627
feat(api-doc): add comprehensive identity service API documentation
WANZARGEN Mar 6, 2025
c66abe8
feat(api-client): add composable for package API in identity service
WANZARGEN Mar 6, 2025
85d8b0b
refactor(opsflow): replace package store with default package query c…
WANZARGEN Mar 6, 2025
f4082d1
refactor: replace data stores with vue query (#5689)
WANZARGEN Mar 13, 2025
141a225
Merge pull request #5690 from cloudforet-io/feature-opsflow-v1-improv…
WANZARGEN Mar 13, 2025
6f2f204
chore: remove pull request review state labeler workflow
WANZARGEN Mar 13, 2025
1a0325d
Merge pull request #5691 from WANZARGEN/develop
WANZARGEN Mar 13, 2025
b25b2ff
Merge pull request #5677 from cloudforet-io/feature-security
WANZARGEN Mar 13, 2025
2271540
refactor: update import paths to use api-clients for identity schemas
WANZARGEN Mar 14, 2025
b9ea609
refactor: migrate user and domain config types to api-clients
WANZARGEN Mar 14, 2025
e8bd007
refactor: simplify API composables by removing async wrappers for act…
WANZARGEN Mar 14, 2025
481baaf
feat: add composables for identity API endpoints and workspace user m…
WANZARGEN Mar 14, 2025
dc777e0
feat: add composables for shared, domain, user, and public config APIs
WANZARGEN Mar 14, 2025
e5803d1
Merge pull request #5698 from WANZARGEN/develop
WANZARGEN Mar 14, 2025
63ca6b3
chore: add ts-check to lint process and fixed type errors on mirinae …
WANZARGEN Mar 17, 2025
fc95d5f
refactor(asset-inventory): merge version v1, v2 folders
skdud4659 Mar 18, 2025
2c38f45
refactor(alert-manager): merge version v1, v2 folders
skdud4659 Mar 18, 2025
ba94d3b
fix: fixed redirect bug
skdud4659 Mar 18, 2025
ba13fdd
Merge pull request #5701 from skdud4659/feature/refactor
skdud4659 Mar 18, 2025
766b016
fix: fixed build bug
skdud4659 Mar 18, 2025
4f20d58
Merge pull request #5702 from skdud4659/feature/fix
skdud4659 Mar 18, 2025
4b358e1
feat: add v2 dir on project for and refactor for version branching (#…
WANZARGEN Mar 19, 2025
54026e8
chore: changed schema mode name
skdud4659 Mar 19, 2025
1afc168
Merge pull request #5704 from skdud4659/feature/schema
skdud4659 Mar 20, 2025
3a40764
feat: add composables for identity API clients
WANZARGEN Mar 20, 2025
0818ec9
fix(mirinae): update placeholder prop type to support translation to …
WANZARGEN Mar 20, 2025
177efa1
Merge pull request #5705 from WANZARGEN/feature-project-landing
WANZARGEN Mar 20, 2025
ac4314d
feat: apply new global config (route, menu, API) (#5709)
skdud4659 Mar 24, 2025
e5ec9fb
feat: change to schema-based (#5710)
skdud4659 Mar 24, 2025
c16fb1d
refactor: changed file name and position (#5711)
skdud4659 Mar 24, 2025
50f430f
feat: apply ui based on version (#5712)
skdud4659 Mar 24, 2025
77d4903
chore(deps-dev): bump vite from 4.5.6 to 4.5.10
dependabot[bot] Mar 25, 2025
d06c37e
feat: hide content of disabled services (#5714)
skdud4659 Mar 26, 2025
796568b
feat: apply opsFlow tab at cloud service (#5715)
skdud4659 Mar 26, 2025
5a4f6b7
Merge pull request #5713 from cloudforet-io/dependabot/npm_and_yarn/v…
WANZARGEN Mar 26, 2025
aac331b
Merge pull request #5719 from cloudforet-io/feature-global-config
skdud4659 Mar 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/dispatch_make_helm_chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
types: [make_helm_chart]

env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_GITHUB_HELM_CHART_WEBHOOK_URL }}

jobs:
helm_cloudforet:
Expand Down Expand Up @@ -75,4 +75,4 @@ jobs:
with:
status: ${{job.status}}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
author_name: Github Action Slack
author_name: Github Action Slack
16 changes: 8 additions & 8 deletions .github/workflows/pull_request_random_reviewer_assignment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ jobs:
runs-on: ubuntu-latest

env:
GROUP1: '["WANZARGEN", "sulmoJ", "skdud4659", "piggggggggy"]'
GROUP2: '["kkdy21", "seungyeoneeee", "Hansoo-mzc"]'
REVIEWERS: '["WANZARGEN", "seungyeoneeee", "skdud4659", "piggggggggy"]'

steps:
- uses: actions/checkout@v3
Expand All @@ -30,12 +29,13 @@ jobs:
uses: actions/github-script@v6
with:
script: |
const group1 = JSON.parse(process.env.GROUP1).filter(user => user !== context.payload.pull_request.user.login);
const group2 = JSON.parse(process.env.GROUP2).filter(user => user !== context.payload.pull_request.user.login);
console.log('group1:', group1, 'group2:', group2);
const reviewers = JSON.parse(process.env.REVIEWERS).filter(user => user !== context.payload.pull_request.user?.login);
console.log('available reviewers:', reviewers);

const randomReviewer1 = group1[Math.floor(Math.random() * group1.length)];
const randomReviewer2 = group2[Math.floor(Math.random() * group2.length)];
// Shuffle array and pick first two reviewers
const shuffled = reviewers.sort(() => 0.5 - Math.random());
const randomReviewer1 = shuffled[0];
const randomReviewer2 = shuffled[1];
console.log('randomReviewer1:', randomReviewer1, 'randomReviewer2:', randomReviewer2);

core.setOutput('randomReviewer1', randomReviewer1);
Expand Down Expand Up @@ -68,7 +68,7 @@ jobs:
uses: actions/github-script@v6
with:
script: |
const prAuthor = context.payload.pull_request.user.login;
const prAuthor = context.payload.pull_request.user?.login;
const org = context.repo.owner;
const prNumber = context.payload.pull_request.number;

Expand Down
1 change: 1 addition & 0 deletions .github/workflows/pull_request_review.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ on:
- '**/*.env'
branches:
- master
- develop
- feature-*
workflow_dispatch:

Expand Down
107 changes: 0 additions & 107 deletions .github/workflows/pull_request_review_state_labeler.yaml

This file was deleted.

2 changes: 1 addition & 1 deletion apps/web-storybook/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
"author": "",
"license": "ISC",
"devDependencies": {
"@cloudforet/mirinae": "*",
"@cloudforet/core-lib": "*",
"@cloudforet/language-pack": "*",
"@cloudforet/mirinae": "*",
"@cloudforet/utils": "*",
"eslint-config-custom": "*",
"mirinae-foundation": "*",
Expand Down
78 changes: 78 additions & 0 deletions apps/web/cli/api-doc-gen.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import fs from 'fs';
import path from 'path';

const API_DIR = './src/api-clients';
const OUTPUT_PATH = './src/api-clients/_common/constants/api-doc.ts';


const generateAPIDocumentation = (basePath) => {
const result = {};

const traverse = (dirPath) => {
const parts = dirPath.split(path.sep).slice(-5);
if (parts.length !== 5) return;
if (parts[3] !== 'api-verbs' || parts[1] === '_common') return;

const [serviceName, resourceName, , , verb] = parts;

if (!result[serviceName]) result[serviceName] = {};
if (!result[serviceName][resourceName]) result[serviceName][resourceName] = [];

result[serviceName][resourceName].push(verb.replace('.ts', ''));
};

const walk = (currentPath) => {
const files = fs.readdirSync(currentPath);

files.forEach((file) => {
const fullPath = path.join(currentPath, file);

const stat = fs.statSync(fullPath);

if (stat.isDirectory()) {
walk(fullPath);
} else if (file.endsWith('.ts')) {
traverse(fullPath);
}
});
};

walk(basePath);
return result;
};

const API_DOC = generateAPIDocumentation(API_DIR);

const tsContent = `/**
* 🚀 AUTO-GENERATED API DOCUMENTATION
*
* This file is **automatically generated** by the API documentation script.
* **DO NOT** modify this file manually, as changes will be overwritten.
*
* ## Purpose:
* - Provides a structured mapping of API endpoints based on the directory structure.
* - Used for **query key generation**, **caching strategies**, and **API reference**.
* - Helps maintain consistency and prevents hardcoded API keys.
*
* ## How It Works:
* - The script scans the \`api-clients/{service-name}/{resource-name}/schema/api-verbs/\` directory.
* - Extracts \`{service-name}\`, \`{resource-name}\`, and \`{verb}.ts\` files.
* - Generates a structured **API_DOC** constant.
*
* ## Regenerate:
* If you need to update this file, run:
*
* \`\`\`sh
* npm run api-doc
* \`\`\`
*
* 🚨 Any manual modifications will be lost on regeneration!
*/

export const API_DOC = ${JSON.stringify(API_DOC, null, 4)} as const;
export type APIDoc = typeof API_DOC;
`;
fs.writeFileSync(OUTPUT_PATH, tsContent);


console.log('✅ API Keys generated successfully!');
16 changes: 8 additions & 8 deletions apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@
"test:coverage": "vitest run --coverage",
"eslint": "eslint --max-warnings=0 --ext .js,.vue,.ts .",
"stylelint": "stylelint \"src/**/*.{css,vue,pcss,scss}\"",
"lint": "npm run eslint && npm run stylelint",
"ts-check": "tsc -p tsconfig.json --noEmit",
"lint": "npm run eslint && npm run ts-check && npm run stylelint",
"eslint:fix": "eslint --fix --ext .js,.vue,.ts .",
"stylelint:fix": "stylelint --fix \"src/**/*.{css,vue,pcss,scss}\"",
"format": "npm run eslint:fix && npm run stylelint:fix",
"postcss": "node build/reset-css.js"
"postcss": "node build/reset-css.js",
"api-doc": "node ./cli/api-doc-gen.js && npx eslint ./src/api-clients/_common/constants/api-doc.ts --fix"
},
"main": "dist/cloudforet-component.common.js",
"dependencies": {
Expand Down Expand Up @@ -45,15 +47,15 @@
"@vueuse/integrations": "^11.1.0",
"@vvo/tzdb": "^6.4.1",
"animated-number-vue": "^1.0.0",
"axios": "^1.7.4",
"axios": "^1.8.2",
"axios-auth-refresh": "^3.2.2",
"bytes": "^3.1.2",
"cashify": "^2.5.0",
"color": "^3.1.2",
"currency.js": "^2.0.4",
"dayjs": "^1.11.7",
"diff-match-patch": "^1.0.5",
"dompurify": "^3.2.3",
"dompurify": "^3.2.4",
"echarts": "^5.5.0",
"ejs": "^3.1.10",
"hangul-js": "^0.2.6",
Expand Down Expand Up @@ -101,8 +103,6 @@
"@types/uuid": "^8.3.0",
"@vitejs/plugin-vue2": "^2.2.0",
"@vitest/coverage-c8": "^0.24.3",
"@vitest/coverage-istanbul": "^0.34.5",
"@vitest/ui": "^0.26.3",
"@vue/test-utils": "^1.3.3",
"axios-mock-adapter": "^1.17.0",
"dotenv": "^16.0.3",
Expand All @@ -112,10 +112,10 @@
"postcss-config-custom": "*",
"rollup-plugin-visualizer": "^5.9.0",
"tsconfig": "*",
"vite": "^4.5.6",
"vite": "^4.5.10",
"vite-plugin-stylelint": "^3.3.3",
"vite-plugin-vue-type-imports": "^0.2.4",
"vitest": "^0.34.5",
"vitest": "^3.0.8",
"vue-template-compiler": "2.7.16"
},
"browserslist": [
Expand Down
54 changes: 54 additions & 0 deletions apps/web/src/api-clients/_common/composables/use-api-query-key.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { computed, reactive } from 'vue';

import type {
ResourceName, ServiceName, Verb,
} from '@/api-clients/_common/types/query-key-type';

import { useAppContextStore } from '@/store/app-context/app-context-store';
import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';

/**
* Generates a computed query key for API requests, incorporating global parameters.
*
* @param service - The service name, representing the API service scope (e.g., 'dashboard').
* @param resource - The resource name, specifying the target API resource (e.g., 'public-data-table').
* @param verb - The API action verb, defining the type of request (e.g., 'get', 'list', 'update').
* @param additionalGlobalParams - Optional additional global parameters (e.g., workspace ID, admin mode).
* @returns A computed reference to the query key array, structured as `[service, resource, verb, { globalParams }]`.
*
* ### Example Usage:
* ```ts
* const queryKey = useAPIQueryKey('dashboard', 'public-data-table', 'get');
* ```
* The generated query key ensures:
* - **Type safety**: Prevents invalid API calls by enforcing a valid `service/resource/verb` combination.
* - **Auto-completion**: Provides intelligent suggestions based on predefined API structure.
* - **Cache management**: Enables precise cache invalidation and data synchronization.
*/

interface GlobalQueryParams {
workspaceId?: string;
isAdminMode?: boolean;
}
export const useAPIQueryKey = <S extends ServiceName, R extends ResourceName<S>, V extends Verb<S, R>>(
service: S,
resource: R,
verb: V,
additionalGlobalParams?: Partial<GlobalQueryParams>,
) => {
const appContextStore = useAppContextStore();
const userWorkspaceStore = useUserWorkspaceStore();

const _state = reactive({
currentWorkdpaceId: computed<string|undefined>(() => userWorkspaceStore.getters.currentWorkspaceId),
isAdminMode: computed<boolean>(() => appContextStore.getters.isAdminMode),
});

const globalQueryParams = reactive<GlobalQueryParams>({
workspaceId: _state.currentWorkdpaceId,
isAdminMode: _state.isAdminMode,
...additionalGlobalParams,
});

return computed(() => [service, resource, verb, { ...globalQueryParams }]);
};
Loading
Loading