testio-tailwind 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.circleci/config.yml +217 -0
- package/.dockerignore +4 -0
- package/.eleventy.js +57 -57
- package/Dockerfile +27 -0
- package/LICENSE +21 -21
- package/README.md +43 -43
- package/icon-classes-extractor.js +29 -29
- package/index.html +399 -478
- package/package.json +66 -66
- package/src/_data/navigation.json +44 -44
- package/src/_data/site.js +12 -12
- package/src/_includes/card_popover.haml +7 -7
- package/src/_includes/example-header-customer.pug +99 -99
- package/src/_includes/example-header-manager.njk +53 -53
- package/src/_includes/example-header-tester.njk +99 -99
- package/src/_includes/example-header.njk +50 -50
- package/src/_includes/page-with-sidebar-nocode.njk +46 -46
- package/src/_includes/page-with-sidebar.njk +46 -46
- package/src/_includes/page.njk +38 -38
- package/src/_layouts/base.njk +83 -83
- package/src/_layouts/email-template.njk +90 -90
- package/src/_layouts/page-example-customer.njk +74 -74
- package/src/_layouts/page-example-manager.njk +74 -74
- package/src/_layouts/page-example-tester.njk +75 -75
- package/src/_layouts/page-example.njk +83 -83
- package/src/assets/images/Cirro-App-Defaultimage.svg +25 -25
- package/src/assets/images/arrow-down.svg +13 -13
- package/src/assets/images/arrow-left.svg +13 -13
- package/src/assets/images/arrow-right.svg +13 -13
- package/src/assets/images/arrow-thick-left.svg +13 -13
- package/src/assets/images/arrow-thick-right.svg +13 -13
- package/src/assets/images/arrow-up.svg +13 -13
- package/src/assets/images/at-sign.svg +12 -12
- package/src/assets/images/attachment-fallbackimage.svg +19 -19
- package/src/assets/images/attachment.svg +8 -8
- package/src/assets/images/bell-smile-xl.svg +18 -18
- package/src/assets/images/blocked.svg +7 -7
- package/src/assets/images/bug-chat-xl.svg +15 -15
- package/src/assets/images/bug-deceased-xl.svg +15 -15
- package/src/assets/images/bug-reproduction.svg +14 -14
- package/src/assets/images/bug-sad-xl.svg +13 -13
- package/src/assets/images/bug-search-xl.svg +18 -18
- package/src/assets/images/bug-sleeping-xl.svg +14 -14
- package/src/assets/images/bug-smile-xl.svg +9 -9
- package/src/assets/images/calendar.svg +15 -15
- package/src/assets/images/caret-down-centered.svg +6 -6
- package/src/assets/images/caret-down.svg +11 -11
- package/src/assets/images/caret-left-centered.svg +6 -6
- package/src/assets/images/caret-left.svg +6 -6
- package/src/assets/images/caret-right-centered.svg +6 -6
- package/src/assets/images/caret-right.svg +6 -6
- package/src/assets/images/caret-up-centered.svg +6 -6
- package/src/assets/images/caret-up.svg +11 -11
- package/src/assets/images/check-circle-filled-white.svg +9 -9
- package/src/assets/images/check-circle-filled.svg +12 -12
- package/src/assets/images/check-circle.svg +7 -7
- package/src/assets/images/check-selectable-items.svg +11 -11
- package/src/assets/images/check-thick-outline.svg +11 -11
- package/src/assets/images/check-thick.svg +6 -6
- package/src/assets/images/check.svg +17 -17
- package/src/assets/images/checkbox-background-black.svg +6 -6
- package/src/assets/images/checkbox-background-sm.svg +12 -12
- package/src/assets/images/checkbox-background-white.svg +6 -6
- package/src/assets/images/checkbox-background.svg +6 -6
- package/src/assets/images/checkbox-sm-checked.svg +11 -11
- package/src/assets/images/circle-empty-white.svg +6 -6
- package/src/assets/images/circle-sm-filled.svg +6 -6
- package/src/assets/images/clock.svg +12 -12
- package/src/assets/images/cross-circle-filled.svg +6 -6
- package/src/assets/images/cross-circle.svg +7 -7
- package/src/assets/images/cross-thick.svg +15 -15
- package/src/assets/images/cross.svg +7 -7
- package/src/assets/images/exclamation-circle-filled.svg +11 -11
- package/src/assets/images/exclamation-circle.svg +12 -12
- package/src/assets/images/feature-check.svg +9 -9
- package/src/assets/images/feature-cross.svg +10 -10
- package/src/assets/images/feature-draft.svg +14 -14
- package/src/assets/images/feature.svg +8 -8
- package/src/assets/images/file-image-plus-lg.svg +19 -19
- package/src/assets/images/file-image-plus-xl.svg +20 -20
- package/src/assets/images/format-bold.svg +11 -11
- package/src/assets/images/format-code.svg +12 -12
- package/src/assets/images/format-heading.svg +11 -11
- package/src/assets/images/format-indent-decrease.svg +11 -11
- package/src/assets/images/format-indent-increase.svg +11 -11
- package/src/assets/images/format-italic.svg +11 -11
- package/src/assets/images/format-link.svg +11 -11
- package/src/assets/images/format-list-bulleted.svg +17 -17
- package/src/assets/images/format-list-numbered.svg +17 -17
- package/src/assets/images/format-mark.svg +13 -13
- package/src/assets/images/format-quote.svg +17 -17
- package/src/assets/images/format-strikethrough.svg +11 -11
- package/src/assets/images/forward.svg +11 -11
- package/src/assets/images/google_signin.svg +22 -22
- package/src/assets/images/info-circle-cirro.svg +21 -21
- package/src/assets/images/info-circle-ux.svg +21 -21
- package/src/assets/images/lock.svg +15 -15
- package/src/assets/images/logo-mobile-cloud.svg +12 -12
- package/src/assets/images/logo-testio/testio_horizontal_black.svg +14 -14
- package/src/assets/images/logo-testio/testio_horizontal_icon_black.svg +25 -25
- package/src/assets/images/logo-testio/testio_horizontal_icon_purple_black.svg +27 -27
- package/src/assets/images/logo-testio/testio_horizontal_icon_purple_white.svg +25 -25
- package/src/assets/images/logo-testio/testio_horizontal_icon_white.svg +25 -25
- package/src/assets/images/logo-testio/testio_horizontal_purple_black.svg +9 -9
- package/src/assets/images/logo-testio/testio_horizontal_purple_white.svg +14 -14
- package/src/assets/images/logo-testio/testio_horizontal_purpleteal_black.svg +21 -21
- package/src/assets/images/logo-testio/testio_horizontal_purpleteal_white.svg +19 -19
- package/src/assets/images/logo-testio/testio_horizontal_teal_black.svg +14 -14
- package/src/assets/images/logo-testio/testio_horizontal_teal_white.svg +14 -14
- package/src/assets/images/logo-testio/testio_horizontal_tealpurple_black.svg +21 -21
- package/src/assets/images/logo-testio/testio_horizontal_tealpurple_white.svg +21 -21
- package/src/assets/images/logo-testio/testio_horizontal_white.svg +14 -14
- package/src/assets/images/logo-testio/testio_symbol_black_round.svg +11 -11
- package/src/assets/images/logo-testio/testio_symbol_purple.svg +15 -15
- package/src/assets/images/logo-testio/testio_symbol_purpleteal_round.svg +18 -18
- package/src/assets/images/logo-testio/testio_symbol_purpleteal_square.svg +18 -18
- package/src/assets/images/logo-testio/testio_symbol_teal.svg +15 -15
- package/src/assets/images/logo-testio/testio_symbol_tealpurple_round.svg +18 -18
- package/src/assets/images/logo-testio/testio_symbol_tealpurple_square.svg +18 -18
- package/src/assets/images/logo-testio/testio_symbol_white_round.svg +11 -11
- package/src/assets/images/logo-testio/testio_typo_black.svg +11 -11
- package/src/assets/images/logo-testio/testio_typo_white.svg +11 -11
- package/src/assets/images/logo-testio/testio_vertical_purpleteal_black.svg +19 -19
- package/src/assets/images/logo-testio/testio_vertical_purpleteal_white.svg +19 -19
- package/src/assets/images/logo-testio/testio_vertical_tealpurple_black.svg +19 -19
- package/src/assets/images/logo-testio/testio_vertical_tealpurple_white.svg +19 -19
- package/src/assets/images/message-feedback.svg +10 -10
- package/src/assets/images/message-question-filled.svg +6 -6
- package/src/assets/images/message-question.svg +8 -8
- package/src/assets/images/message.svg +11 -11
- package/src/assets/images/question-circle.svg +24 -24
- package/src/assets/images/radio-checked-black.svg +5 -5
- package/src/assets/images/redo.svg +7 -7
- package/src/assets/images/remove.svg +6 -6
- package/src/assets/images/search.svg +11 -11
- package/src/assets/images/seat.svg +14 -14
- package/src/assets/images/section.svg +8 -8
- package/src/assets/images/sendmessage.svg +15 -15
- package/src/assets/images/speaker.svg +10 -10
- package/src/assets/images/test-archived.svg +12 -12
- package/src/assets/images/test-automation.svg +8 -8
- package/src/assets/images/test-check.svg +9 -9
- package/src/assets/images/test-ended.svg +9 -9
- package/src/assets/images/test-failed.svg +10 -10
- package/src/assets/images/test-initialized.svg +10 -10
- package/src/assets/images/test-locked.svg +15 -15
- package/src/assets/images/test-plus.svg +11 -11
- package/src/assets/images/test-promoted.svg +9 -9
- package/src/assets/images/test-running.svg +9 -9
- package/src/assets/images/test-stopped.svg +17 -17
- package/src/assets/images/test.svg +8 -8
- package/src/assets/images/testcase.svg +10 -10
- package/src/assets/images/triangle-centered-down.svg +12 -12
- package/src/assets/images/triangle-centered-left.svg +12 -12
- package/src/assets/images/triangle-centered-right.svg +12 -12
- package/src/assets/images/triangle-centered-up.svg +12 -12
- package/src/assets/images/triangle-down.svg +5 -5
- package/src/assets/images/triangle-up.svg +5 -5
- package/src/assets/images/undo.svg +7 -7
- package/src/assets/images/verify-exclamation.svg +11 -11
- package/src/assets/scripts/app.js +150 -150
- package/src/assets/scripts/modules/colors.js +10 -10
- package/src/assets/scripts/modules/echarts_area.js +94 -94
- package/src/assets/scripts/modules/echarts_donut.js +85 -85
- package/src/assets/scripts/modules/echarts_exampledata.js +105 -105
- package/src/assets/scripts/modules/echarts_exampleseries.js +146 -146
- package/src/assets/scripts/modules/echarts_gauge.js +74 -74
- package/src/assets/scripts/modules/echarts_horizontal.js +80 -80
- package/src/assets/scripts/modules/echarts_legend.js +12 -12
- package/src/assets/scripts/modules/echarts_vertical.js +80 -80
- package/src/assets/stylesheets/app.css +77 -77
- package/src/assets/stylesheets/components/actionbar.css +41 -41
- package/src/assets/stylesheets/components/alerts.css +50 -50
- package/src/assets/stylesheets/components/banner_card.css +56 -56
- package/src/assets/stylesheets/components/buttons.css +192 -192
- package/src/assets/stylesheets/components/cards.css +148 -148
- package/src/assets/stylesheets/components/chat.css +265 -265
- package/src/assets/stylesheets/components/checkboxes_radiobuttons.css +173 -173
- package/src/assets/stylesheets/components/customer/customer_header.css +97 -97
- package/src/assets/stylesheets/components/customer/customer_productcards.css +212 -212
- package/src/assets/stylesheets/components/customer/customer_sidebar.css +76 -76
- package/src/assets/stylesheets/components/devices.css +77 -77
- package/src/assets/stylesheets/components/drawer.css +99 -99
- package/src/assets/stylesheets/components/dropdown.css +92 -92
- package/src/assets/stylesheets/components/emptystate_message.css +41 -41
- package/src/assets/stylesheets/components/form_card.css +20 -20
- package/src/assets/stylesheets/components/form_grid.css +11 -11
- package/src/assets/stylesheets/components/forms.css +106 -106
- package/src/assets/stylesheets/components/header.css +220 -220
- package/src/assets/stylesheets/components/iconfont.css +3303 -3303
- package/src/assets/stylesheets/components/icons.css +142 -142
- package/src/assets/stylesheets/components/images.css +27 -27
- package/src/assets/stylesheets/components/layout.css +37 -82
- package/src/assets/stylesheets/components/list_item.css +285 -285
- package/src/assets/stylesheets/components/lists.css +67 -67
- package/src/assets/stylesheets/components/loading_spinner.css +104 -104
- package/src/assets/stylesheets/components/manager/manager_header.css +50 -50
- package/src/assets/stylesheets/components/manager/manager_sidebar.css +76 -76
- package/src/assets/stylesheets/components/markdown_trix_styles.css +200 -200
- package/src/assets/stylesheets/components/metasidebar.css +56 -56
- package/src/assets/stylesheets/components/metrics.css +12 -12
- package/src/assets/stylesheets/components/modals.css +105 -105
- package/src/assets/stylesheets/components/notifications.css +154 -154
- package/src/assets/stylesheets/components/popover.css +120 -120
- package/src/assets/stylesheets/components/progress.css +69 -69
- package/src/assets/stylesheets/components/radio_tabs.css +59 -59
- package/src/assets/stylesheets/components/reset.css +26 -26
- package/src/assets/stylesheets/components/resultmodule.css +132 -132
- package/src/assets/stylesheets/components/search.css +110 -110
- package/src/assets/stylesheets/components/sections.css +97 -96
- package/src/assets/stylesheets/components/select.css +50 -50
- package/src/assets/stylesheets/components/select2.css +252 -252
- package/src/assets/stylesheets/components/selectable_token.css +223 -223
- package/src/assets/stylesheets/components/sidebar.css +480 -480
- package/src/assets/stylesheets/components/splitview.css +307 -307
- package/src/assets/stylesheets/components/tables.css +108 -108
- package/src/assets/stylesheets/components/tabs.css +121 -121
- package/src/assets/stylesheets/components/tags.css +28 -28
- package/src/assets/stylesheets/components/task_issue_item.css +78 -78
- package/src/assets/stylesheets/components/test_header.css +167 -167
- package/src/assets/stylesheets/components/test_item.css +89 -89
- package/src/assets/stylesheets/components/tester/tester_cards.css +143 -143
- package/src/assets/stylesheets/components/tester/tester_header.css +37 -37
- package/src/assets/stylesheets/components/tester/tester_sidebar.css +92 -92
- package/src/assets/stylesheets/components/toggleswitch.css +118 -118
- package/src/assets/stylesheets/components/tom_select.css +186 -186
- package/src/assets/stylesheets/components/trix_editor.css +174 -174
- package/src/assets/stylesheets/components/typography.css +81 -81
- package/src/assets/stylesheets/components/uploads.css +194 -194
- package/src/assets/stylesheets/components/user_item.css +57 -57
- package/src/assets/stylesheets/designsystem-styles.css +81 -81
- package/src/assets/stylesheets/postcss.config.js +16 -16
- package/src/assets/stylesheets/tailwind.config.js +331 -331
- package/src/humans.txt.njk +10 -10
- package/src/index.pug +16 -16
- package/src/pages/buttons/block.haml +39 -39
- package/src/pages/buttons/buttons-lg.haml +20 -20
- package/src/pages/buttons/buttons-sm.haml +41 -41
- package/src/pages/buttons/buttons-xl.haml +23 -23
- package/src/pages/buttons/buttons.haml +58 -58
- package/src/pages/buttons/buttons_input.haml +39 -39
- package/src/pages/buttons/dropdown-menu.haml +73 -73
- package/src/pages/buttons/index.njk +7 -7
- package/src/pages/buttons/info_popover.haml +32 -32
- package/src/pages/buttons/link-with-icon.haml +13 -13
- package/src/pages/buttons/square-buttons.haml +55 -55
- package/src/pages/charts/area.haml +215 -215
- package/src/pages/charts/bar_horizontal.haml +335 -335
- package/src/pages/charts/bar_vertical.haml +391 -391
- package/src/pages/charts/donut.haml +269 -269
- package/src/pages/charts/gauge.haml +214 -214
- package/src/pages/charts/index.njk +6 -6
- package/src/pages/ci.pug +8 -8
- package/src/pages/colors.pug +147 -147
- package/src/pages/components/alerts.haml +31 -31
- package/src/pages/components/banner_cards.haml +45 -45
- package/src/pages/components/cards.haml +111 -111
- package/src/pages/components/cards_customer.haml +487 -487
- package/src/pages/components/cards_fixedwidth.haml +135 -135
- package/src/pages/components/cards_iconheader.haml +57 -57
- package/src/pages/components/cards_tester.haml +159 -159
- package/src/pages/components/chat_window.haml +240 -240
- package/src/pages/components/comments_bug_preview.haml +29 -29
- package/src/pages/components/comments_chatmessages.haml +229 -229
- package/src/pages/components/descriptionlist.haml +47 -47
- package/src/pages/components/devices.haml +115 -115
- package/src/pages/components/drawer.haml +49 -49
- package/src/pages/components/drawer_filter.haml +76 -76
- package/src/pages/components/emptystate.haml +15 -15
- package/src/pages/components/index.njk +6 -6
- package/src/pages/components/issue-item.haml +18 -18
- package/src/pages/components/listitem_with_footer.haml +208 -208
- package/src/pages/components/listitems.haml +136 -136
- package/src/pages/components/listitems_badge.haml +36 -36
- package/src/pages/components/listitems_collapsable.haml +117 -117
- package/src/pages/components/listitems_nested.haml +50 -50
- package/src/pages/components/listitems_selectable.haml +59 -59
- package/src/pages/components/listitems_white.haml +82 -82
- package/src/pages/components/loading_spinner.haml +11 -11
- package/src/pages/components/metasidebar.haml +13 -13
- package/src/pages/components/modal_details.haml +68 -68
- package/src/pages/components/notification_center.haml +48 -48
- package/src/pages/components/notifications.haml +42 -42
- package/src/pages/components/profilethumb.haml +27 -27
- package/src/pages/components/progress.haml +23 -23
- package/src/pages/components/resultmodule.haml +150 -150
- package/src/pages/components/resultmodule_testcase.haml +125 -125
- package/src/pages/components/section_collapsable.haml +24 -24
- package/src/pages/components/splitview_item.haml +111 -111
- package/src/pages/components/splitview_item_collapsable.haml +65 -65
- package/src/pages/components/tables.haml +57 -57
- package/src/pages/components/tables_linked.haml +29 -29
- package/src/pages/components/tags.haml +12 -12
- package/src/pages/components/task_item.haml +33 -33
- package/src/pages/components/test_item.haml +119 -119
- package/src/pages/components/tester_levels.haml +70 -70
- package/src/pages/components/user_item.haml +49 -49
- package/src/pages/examples/layout-actionbar.haml +267 -267
- package/src/pages/examples/layout-basic.haml +28 -28
- package/src/pages/examples/layout-chat.haml +327 -327
- package/src/pages/examples/layout-customer.haml +189 -189
- package/src/pages/examples/layout-form-sidebar-actionbar-metasidebar.haml +312 -312
- package/src/pages/examples/layout-manager.haml +98 -98
- package/src/pages/examples/layout-metasidebar.haml +269 -269
- package/src/pages/examples/layout-sidebar-actionbar-metasidebar.haml +308 -308
- package/src/pages/examples/layout-sidebar-actionbar.haml +308 -308
- package/src/pages/examples/layout-sidebar.haml +296 -296
- package/src/pages/examples/layout-tester.haml +105 -105
- package/src/pages/examples/splitview-testcases.haml +477 -477
- package/src/pages/examples/splitview.haml +389 -389
- package/src/pages/forms/checkboxes.haml +64 -64
- package/src/pages/forms/checkboxes_devices.haml +45 -45
- package/src/pages/forms/form-addon.haml +16 -16
- package/src/pages/forms/form-card.haml +36 -36
- package/src/pages/forms/form-grid.haml +16 -16
- package/src/pages/forms/form_grid_narrow.haml +18 -18
- package/src/pages/forms/forms.haml +22 -22
- package/src/pages/forms/index.njk +6 -6
- package/src/pages/forms/radiobuttons.haml +50 -50
- package/src/pages/forms/rating_scale.haml +62 -62
- package/src/pages/forms/search.haml +71 -71
- package/src/pages/forms/select2.haml +72 -72
- package/src/pages/forms/select_native.haml +74 -74
- package/src/pages/forms/selectable_token.haml +49 -49
- package/src/pages/forms/selectable_token_browsers.haml +66 -66
- package/src/pages/forms/selectable_token_lg.haml +49 -49
- package/src/pages/forms/selectable_token_xl.haml +49 -49
- package/src/pages/forms/textarea.haml +24 -24
- package/src/pages/forms/toggle-buttons.haml +94 -94
- package/src/pages/forms/toggle-switch.haml +31 -31
- package/src/pages/forms/tomselect.haml +76 -76
- package/src/pages/forms/trix_editor.pug +10 -10
- package/src/pages/forms/uploads.pug +101 -101
- package/src/pages/icons/bug-icons.haml +75 -75
- package/src/pages/icons/index.njk +83 -83
- package/src/pages/icons/marketingicons.haml +15 -15
- package/src/pages/icons/status-icons.haml +38 -38
- package/src/pages/layout/app_layout.haml +27 -27
- package/src/pages/layout/index.njk +6 -6
- package/src/pages/layout/max_width.haml +49 -49
- package/src/pages/layout/spacing.haml +30 -30
- package/src/pages/navigation/header-manager.haml +73 -73
- package/src/pages/navigation/header-tester.haml +100 -100
- package/src/pages/navigation/header.haml +76 -76
- package/src/pages/navigation/header_customer.haml +77 -77
- package/src/pages/navigation/header_tester_epam.haml +108 -108
- package/src/pages/navigation/index.njk +7 -7
- package/src/pages/navigation/product_dropdown.haml +65 -65
- package/src/pages/navigation/radio_tabs.haml +22 -22
- package/src/pages/navigation/sidebar-manager.haml +46 -46
- package/src/pages/navigation/sidebar-tester-elements.haml +105 -105
- package/src/pages/navigation/sidebar-tester-seatlimitation.haml +108 -108
- package/src/pages/navigation/sidebar-tester.haml +75 -75
- package/src/pages/navigation/sidebar.haml +46 -46
- package/src/pages/navigation/sidebar_collapsables.haml +136 -136
- package/src/pages/navigation/sidebar_customer.haml +146 -146
- package/src/pages/navigation/tabnavigation.haml +12 -12
- package/src/pages/navigation/tabnavigation_actions.haml +21 -21
- package/src/pages/navigation/tabnavigation_pills.haml +12 -12
- package/src/pages/navigation/test-header-tester.haml +177 -177
- package/src/pages/typography/index.njk +7 -7
- package/src/pages/typography/link_with_icon.haml +12 -12
- package/src/pages/typography/linked_icon.haml +10 -10
- package/src/pages/typography/markdown.md +112 -112
- package/src/pages/typography/section_header.haml +25 -25
- package/src/pages/typography/section_header_actions.haml +59 -59
- package/src/pages/typography/text_with_icon.haml +12 -12
- package/src/pages/typography/trix_styles.haml +127 -127
- package/src/pages/typography/typography.haml +51 -51
- package/src/sitemap.xml.njk +13 -13
- package/src/static/app.compiled.css +159 -197
- package/src/static/app.compiled.css.map +1 -1
- package/src/static/browserconfig.xml +9 -9
- package/src/static/site.webmanifest +3 -3
- package/utils/collections.js +29 -29
- package/utils/filters.js +11 -11
- package/utils/markdown.js +9 -9
- package/utils/shortcodes.js +6 -6
- package/utils/transforms.js +19 -19
- package/webpack.config.js +24 -24
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
version: 2.1
|
|
2
|
+
|
|
3
|
+
orbs:
|
|
4
|
+
gcp-cli: circleci/gcp-cli@3.3.0
|
|
5
|
+
|
|
6
|
+
executors:
|
|
7
|
+
cci-base:
|
|
8
|
+
docker:
|
|
9
|
+
- image: cimg/base:stable
|
|
10
|
+
cci-node:
|
|
11
|
+
docker:
|
|
12
|
+
- image: cimg/node:21.6.2
|
|
13
|
+
cci-deploy:
|
|
14
|
+
docker:
|
|
15
|
+
- image: cimg/deploy:2025.01
|
|
16
|
+
|
|
17
|
+
commands:
|
|
18
|
+
gcp-oidc-authenticate:
|
|
19
|
+
description: "Create GCP credentials file from CircleCI OIDC token and use it to authenticate to our GCP project"
|
|
20
|
+
steps:
|
|
21
|
+
- run:
|
|
22
|
+
name: Create GCP credentials file from OIDC token and use it for authentication
|
|
23
|
+
command: |
|
|
24
|
+
echo $CIRCLE_OIDC_TOKEN > ${HOME}/oidc_token.json # store OIDC token in a file
|
|
25
|
+
gcloud iam workload-identity-pools create-cred-config \
|
|
26
|
+
"projects/${GCP_PROJECT_ID}/locations/global/workloadIdentityPools/${GCP_WIP_ID}/providers/${GCP_WIP_PROVIDER_ID}" \
|
|
27
|
+
--credential-source-file=${HOME}/oidc_token.json \
|
|
28
|
+
--service-account="${GCP_SERVICE_ACCOUNT_EMAIL}" \
|
|
29
|
+
--output-file=${HOME}/gcp_cred_config.json
|
|
30
|
+
gcloud auth login --brief --cred-file ${HOME}/gcp_cred_config.json
|
|
31
|
+
echo "export GOOGLE_APPLICATION_CREDENTIALS=${HOME}/gcp_cred_config.json" >> $BASH_ENV # configure ADC
|
|
32
|
+
|
|
33
|
+
jobs:
|
|
34
|
+
build:
|
|
35
|
+
executor: cci-base
|
|
36
|
+
environment:
|
|
37
|
+
IMAGE: eu.gcr.io/oi-tset/tw-designsystem
|
|
38
|
+
steps:
|
|
39
|
+
- checkout
|
|
40
|
+
- gcp-cli/install
|
|
41
|
+
- gcp-oidc-authenticate
|
|
42
|
+
- setup_remote_docker:
|
|
43
|
+
docker_layer_caching: true
|
|
44
|
+
- run:
|
|
45
|
+
name: Setup access to the registry
|
|
46
|
+
command: gcloud auth configure-docker eu.gcr.io,europe-west3-docker.pkg.dev --quiet
|
|
47
|
+
- run:
|
|
48
|
+
name: Build application image
|
|
49
|
+
command: docker build -t $IMAGE:$CIRCLE_SHA1 .
|
|
50
|
+
- run:
|
|
51
|
+
name: Push image to the registry
|
|
52
|
+
command: docker push $IMAGE:$CIRCLE_SHA1
|
|
53
|
+
|
|
54
|
+
test:
|
|
55
|
+
executor: cci-node
|
|
56
|
+
steps:
|
|
57
|
+
- checkout
|
|
58
|
+
- restore_cache:
|
|
59
|
+
keys:
|
|
60
|
+
- v1-dependencies-{{ checksum "package.json" }}
|
|
61
|
+
- v1-dependencies-
|
|
62
|
+
- run: npm install
|
|
63
|
+
- save_cache:
|
|
64
|
+
key: v1-dependencies-{{ checksum "package.json" }}
|
|
65
|
+
paths:
|
|
66
|
+
- node_modules
|
|
67
|
+
|
|
68
|
+
publish:
|
|
69
|
+
executor: cci-node
|
|
70
|
+
working_directory: ~/repo
|
|
71
|
+
steps:
|
|
72
|
+
- checkout
|
|
73
|
+
- gcp-cli/install
|
|
74
|
+
- gcp-oidc-authenticate
|
|
75
|
+
- run:
|
|
76
|
+
name: Fetch npmjs publishing token and auth with the registry
|
|
77
|
+
command: |
|
|
78
|
+
export npm_TOKEN=$(gcloud secrets versions access latest --secret="npmjs-publish-token" --project=oi-tset --quiet) && \
|
|
79
|
+
echo "//registry.npmjs.org/:_authToken=$npm_TOKEN" > ~/repo/.npmrc
|
|
80
|
+
- run:
|
|
81
|
+
name: Publish NPM package
|
|
82
|
+
command: |
|
|
83
|
+
PACKAGE_VERSION=$(node -p -e "require('./package.json').version")
|
|
84
|
+
PACKAGE_NAME=$(node -p -e "require('./package.json').name")
|
|
85
|
+
FOUND_VERSION=$(npm view "$PACKAGE_NAME" version)
|
|
86
|
+
if [ "$PACKAGE_VERSION" == "$FOUND_VERSION" ]; then
|
|
87
|
+
echo "Cannot publish over the previously published version: $FOUND_VERSION."
|
|
88
|
+
exit 0
|
|
89
|
+
fi
|
|
90
|
+
npm publish
|
|
91
|
+
|
|
92
|
+
deploy:
|
|
93
|
+
executor: cci-deploy
|
|
94
|
+
environment:
|
|
95
|
+
HELM_CHART: tw-designsystem
|
|
96
|
+
GKE_CLUSTER: private-cluster
|
|
97
|
+
IMAGE: eu.gcr.io/oi-tset/tw-designsystem
|
|
98
|
+
steps:
|
|
99
|
+
- checkout
|
|
100
|
+
- gcp-cli/install
|
|
101
|
+
- gcp-oidc-authenticate
|
|
102
|
+
- run:
|
|
103
|
+
name: Copy deploy script
|
|
104
|
+
command: gsutil cp gs://helm_repo/scripts/deploy_from_helm_repo.sh .
|
|
105
|
+
- run:
|
|
106
|
+
name: Install required plugin
|
|
107
|
+
command: gcloud components install gke-gcloud-auth-plugin --quiet
|
|
108
|
+
- run:
|
|
109
|
+
name: Helm upgrade
|
|
110
|
+
command: bash ./deploy_from_helm_repo.sh
|
|
111
|
+
no_output_timeout: 25m
|
|
112
|
+
- run:
|
|
113
|
+
name: Add tag to the image in registry
|
|
114
|
+
command: gcloud container images add-tag $IMAGE:$CIRCLE_SHA1 $IMAGE:$CIRCLE_BRANCH --quiet
|
|
115
|
+
|
|
116
|
+
defectdojo:
|
|
117
|
+
executor: cci-base
|
|
118
|
+
environment:
|
|
119
|
+
IMAGE: eu.gcr.io/oi-tset/tw-designsystem
|
|
120
|
+
DEFECTDOJO_URL: defectdojo.testcloud.io
|
|
121
|
+
DEFECTDOJO_PRODUCT: Tailwind Designsystem
|
|
122
|
+
DEFECTDOJO_ENG_NAME: CircleCI Scan
|
|
123
|
+
circleci_ip_ranges: true
|
|
124
|
+
steps:
|
|
125
|
+
- checkout
|
|
126
|
+
- gcp-cli/install
|
|
127
|
+
- gcp-oidc-authenticate
|
|
128
|
+
- run:
|
|
129
|
+
name: Install Trivy and Gitleaks
|
|
130
|
+
command: |
|
|
131
|
+
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b $HOME/bin
|
|
132
|
+
curl -L https://github.com/gitleaks/gitleaks/releases/download/v8.18.2/gitleaks_8.18.2_linux_x64.tar.gz -o $HOME/gitleaks.tar.gz
|
|
133
|
+
tar -xzf $HOME/gitleaks.tar.gz
|
|
134
|
+
- run:
|
|
135
|
+
name: Scans
|
|
136
|
+
command: |
|
|
137
|
+
trivy fs --exit-code 0 --no-progress --format json --output filesystem-scan.json .
|
|
138
|
+
trivy i --exit-code 0 --no-progress --format json --output image-scan.json $IMAGE:main
|
|
139
|
+
./gitleaks detect --no-git --exit-code 0 --report-format json --report-path gitleaks.json
|
|
140
|
+
- run:
|
|
141
|
+
name: Send data to DefectDojo - Trivy filesystem scan
|
|
142
|
+
command: |
|
|
143
|
+
gcloud secrets versions access latest --secret="defectdojo_token" --project=oi-tset --quiet > DEFECTDOJO_TOKEN
|
|
144
|
+
|
|
145
|
+
curl --fail --request POST https://$DEFECTDOJO_URL/api/v2/reimport-scan/ \
|
|
146
|
+
--header "Authorization: Token $(< DEFECTDOJO_TOKEN)" \
|
|
147
|
+
--form "active=true" \
|
|
148
|
+
--form "auto_create_context=true" \
|
|
149
|
+
--form "branch_tag=${CIRCLE_BRANCH}" \
|
|
150
|
+
--form "commit_hash=${CIRCLE_SHA1}" \
|
|
151
|
+
--form "close_old_findings=true" \
|
|
152
|
+
--form "scan_type=Trivy Scan" \
|
|
153
|
+
--form "test_title=Trivy application scan" \
|
|
154
|
+
--form "engagement_name=${DEFECTDOJO_ENG_NAME}" \
|
|
155
|
+
--form "product_name=${DEFECTDOJO_PRODUCT}" \
|
|
156
|
+
--form "file=@filesystem-scan.json"
|
|
157
|
+
- run:
|
|
158
|
+
name: Send data to DefectDojo - Trivy image scan
|
|
159
|
+
command: |
|
|
160
|
+
curl --fail --request POST https://$DEFECTDOJO_URL/api/v2/reimport-scan/ \
|
|
161
|
+
--header "Authorization: Token $(< DEFECTDOJO_TOKEN)" \
|
|
162
|
+
--form "active=true" \
|
|
163
|
+
--form "auto_create_context=true" \
|
|
164
|
+
--form "branch_tag=${CIRCLE_BRANCH}" \
|
|
165
|
+
--form "commit_hash=${CIRCLE_SHA1}" \
|
|
166
|
+
--form "close_old_findings=true" \
|
|
167
|
+
--form "scan_type=Trivy Scan" \
|
|
168
|
+
--form "test_title=Trivy container image scan" \
|
|
169
|
+
--form "engagement_name=${DEFECTDOJO_ENG_NAME}" \
|
|
170
|
+
--form "product_name=${DEFECTDOJO_PRODUCT}" \
|
|
171
|
+
--form "file=@image-scan.json"
|
|
172
|
+
- run:
|
|
173
|
+
name: Send data to DefectDojo - Gitleaks scan
|
|
174
|
+
command: |
|
|
175
|
+
curl --fail --request POST https://$DEFECTDOJO_URL/api/v2/reimport-scan/ \
|
|
176
|
+
--header "Authorization: Token $(< DEFECTDOJO_TOKEN)" \
|
|
177
|
+
--form "active=true" \
|
|
178
|
+
--form "auto_create_context=true" \
|
|
179
|
+
--form "branch_tag=${CIRCLE_BRANCH}" \
|
|
180
|
+
--form "commit_hash=${CIRCLE_SHA1}" \
|
|
181
|
+
--form "close_old_findings=true" \
|
|
182
|
+
--form "scan_type=Gitleaks Scan" \
|
|
183
|
+
--form "test_title=Gitleaks Scan" \
|
|
184
|
+
--form "engagement_name=${DEFECTDOJO_ENG_NAME}" \
|
|
185
|
+
--form "product_name=${DEFECTDOJO_PRODUCT}" \
|
|
186
|
+
--form "file=@gitleaks.json"
|
|
187
|
+
|
|
188
|
+
workflows:
|
|
189
|
+
workflow:
|
|
190
|
+
jobs:
|
|
191
|
+
- build:
|
|
192
|
+
context: gcp-production
|
|
193
|
+
- test
|
|
194
|
+
- publish:
|
|
195
|
+
requires:
|
|
196
|
+
- test
|
|
197
|
+
filters:
|
|
198
|
+
branches:
|
|
199
|
+
only: main
|
|
200
|
+
context: gcp-production
|
|
201
|
+
- deploy:
|
|
202
|
+
requires:
|
|
203
|
+
- build
|
|
204
|
+
filters:
|
|
205
|
+
branches:
|
|
206
|
+
only: main
|
|
207
|
+
context: gcp-production
|
|
208
|
+
security_scan:
|
|
209
|
+
jobs:
|
|
210
|
+
- defectdojo:
|
|
211
|
+
context: gcp-production
|
|
212
|
+
triggers:
|
|
213
|
+
- schedule:
|
|
214
|
+
cron: "20 4 * * 0"
|
|
215
|
+
filters:
|
|
216
|
+
branches:
|
|
217
|
+
only: main
|
package/.dockerignore
ADDED
package/.eleventy.js
CHANGED
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
const filters = require('./utils/filters.js')
|
|
2
|
-
const transforms = require('./utils/transforms.js')
|
|
3
|
-
const collections = require('./utils/collections.js')
|
|
4
|
-
const markdownIt = require('./utils/markdown.js');
|
|
5
|
-
const appConfigs = {
|
|
6
|
-
cirro: { output: "dist/" }
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
module.exports = function (eleventyConfig) {
|
|
10
|
-
// Folders to copy to build dir (See. 1.1)
|
|
11
|
-
eleventyConfig.addPassthroughCopy({
|
|
12
|
-
"src/static/site.webmanifest": "",
|
|
13
|
-
"src/static/*": "static",
|
|
14
|
-
"src/assets/fonts/*": "assets/fonts",
|
|
15
|
-
"src/static/downloads/*": "downloads",
|
|
16
|
-
"src/assets/images/*": "assets/images"
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
// Filters
|
|
20
|
-
Object.keys(filters).forEach((filterName) => {
|
|
21
|
-
eleventyConfig.addFilter(filterName, filters[filterName])
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
// Transforms
|
|
25
|
-
Object.keys(transforms).forEach((transformName) => {
|
|
26
|
-
eleventyConfig.addTransform(transformName, transforms[transformName])
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
// Collections
|
|
30
|
-
Object.keys(collections).forEach((collectionName) => {
|
|
31
|
-
eleventyConfig.addCollection(collectionName, collections[collectionName])
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
// This allows Eleventy to watch for file changes during local development.
|
|
35
|
-
eleventyConfig.setUseGitIgnore(false);
|
|
36
|
-
|
|
37
|
-
eleventyConfig.addShortcode('tag', (arg) => `<div>${arg}</div>`);
|
|
38
|
-
eleventyConfig.addPairedShortcode('tag', (children) => `<div class="markdown">${children}</div>`);
|
|
39
|
-
|
|
40
|
-
let haml = require("hamljs");
|
|
41
|
-
eleventyConfig.setLibrary("haml", haml);
|
|
42
|
-
eleventyConfig.setLibrary('md', markdownIt);
|
|
43
|
-
|
|
44
|
-
return {
|
|
45
|
-
dir: {
|
|
46
|
-
input: "src",
|
|
47
|
-
output: appConfigs[process.env.APP].output,
|
|
48
|
-
includes: "_includes",
|
|
49
|
-
layouts: "_layouts"
|
|
50
|
-
},
|
|
51
|
-
templateFormats: ["html", "md", "njk", "pug", "haml", "png", "svg", "eot", "ttf", "woff", "woff2", "jpg", "otf"],
|
|
52
|
-
htmlTemplateEngine: "njk",
|
|
53
|
-
|
|
54
|
-
// 1.1 Enable eleventy to pass dirs specified above
|
|
55
|
-
passthroughFileCopy: true
|
|
56
|
-
};
|
|
57
|
-
};
|
|
1
|
+
const filters = require('./utils/filters.js')
|
|
2
|
+
const transforms = require('./utils/transforms.js')
|
|
3
|
+
const collections = require('./utils/collections.js')
|
|
4
|
+
const markdownIt = require('./utils/markdown.js');
|
|
5
|
+
const appConfigs = {
|
|
6
|
+
cirro: { output: "dist/" }
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
module.exports = function (eleventyConfig) {
|
|
10
|
+
// Folders to copy to build dir (See. 1.1)
|
|
11
|
+
eleventyConfig.addPassthroughCopy({
|
|
12
|
+
"src/static/site.webmanifest": "",
|
|
13
|
+
"src/static/*": "static",
|
|
14
|
+
"src/assets/fonts/*": "assets/fonts",
|
|
15
|
+
"src/static/downloads/*": "downloads",
|
|
16
|
+
"src/assets/images/*": "assets/images"
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
// Filters
|
|
20
|
+
Object.keys(filters).forEach((filterName) => {
|
|
21
|
+
eleventyConfig.addFilter(filterName, filters[filterName])
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
// Transforms
|
|
25
|
+
Object.keys(transforms).forEach((transformName) => {
|
|
26
|
+
eleventyConfig.addTransform(transformName, transforms[transformName])
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
// Collections
|
|
30
|
+
Object.keys(collections).forEach((collectionName) => {
|
|
31
|
+
eleventyConfig.addCollection(collectionName, collections[collectionName])
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
// This allows Eleventy to watch for file changes during local development.
|
|
35
|
+
eleventyConfig.setUseGitIgnore(false);
|
|
36
|
+
|
|
37
|
+
eleventyConfig.addShortcode('tag', (arg) => `<div>${arg}</div>`);
|
|
38
|
+
eleventyConfig.addPairedShortcode('tag', (children) => `<div class="markdown">${children}</div>`);
|
|
39
|
+
|
|
40
|
+
let haml = require("hamljs");
|
|
41
|
+
eleventyConfig.setLibrary("haml", haml);
|
|
42
|
+
eleventyConfig.setLibrary('md', markdownIt);
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
dir: {
|
|
46
|
+
input: "src",
|
|
47
|
+
output: appConfigs[process.env.APP].output,
|
|
48
|
+
includes: "_includes",
|
|
49
|
+
layouts: "_layouts"
|
|
50
|
+
},
|
|
51
|
+
templateFormats: ["html", "md", "njk", "pug", "haml", "png", "svg", "eot", "ttf", "woff", "woff2", "jpg", "otf"],
|
|
52
|
+
htmlTemplateEngine: "njk",
|
|
53
|
+
|
|
54
|
+
// 1.1 Enable eleventy to pass dirs specified above
|
|
55
|
+
passthroughFileCopy: true
|
|
56
|
+
};
|
|
57
|
+
};
|
package/Dockerfile
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
FROM europe-west3-docker.pkg.dev/oi-tset/hub/node:18-alpine
|
|
2
|
+
|
|
3
|
+
ARG APP_UID=5123
|
|
4
|
+
ARG USER=appuser
|
|
5
|
+
ARG GROUP=appgroup
|
|
6
|
+
|
|
7
|
+
RUN addgroup -S ${GROUP} -g $APP_UID && adduser -S ${USER} -G ${GROUP} -u $APP_UID
|
|
8
|
+
|
|
9
|
+
USER ${USER}
|
|
10
|
+
|
|
11
|
+
WORKDIR /home/${USER}/app
|
|
12
|
+
|
|
13
|
+
COPY --chown=${USER}:${GROUP} package*.json ./
|
|
14
|
+
|
|
15
|
+
RUN mkdir -p /home/${USER}/app/node_modules && \
|
|
16
|
+
npm install && \
|
|
17
|
+
npm install http-server
|
|
18
|
+
|
|
19
|
+
COPY --chown=${USER}:${GROUP} . ./
|
|
20
|
+
|
|
21
|
+
RUN npm run build
|
|
22
|
+
|
|
23
|
+
EXPOSE 8080
|
|
24
|
+
|
|
25
|
+
CMD [ "/home/appuser/app/node_modules/http-server/bin/http-server", "dist" ]
|
|
26
|
+
|
|
27
|
+
HEALTHCHECK NONE
|
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2020 Chris Collins
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2020 Chris Collins
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
# Translation Space Designsystem
|
|
2
|
-
|
|
3
|
-
[](https://dl.circleci.com/status-badge/redirect/gh/test-IO/translation-space-designsystem/tree/main)
|
|
4
|
-
|
|
5
|
-
--- (Live deployment)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
## Development
|
|
9
|
-
|
|
10
|
-
### Requirements
|
|
11
|
-
|
|
12
|
-
1. Node.js
|
|
13
|
-
2. NPM (comes with Node.js)
|
|
14
|
-
|
|
15
|
-
### Install dependencies
|
|
16
|
-
|
|
17
|
-
```sh
|
|
18
|
-
npm i
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### Working locally
|
|
22
|
-
|
|
23
|
-
Starts watch tasks to compile when changes detected
|
|
24
|
-
|
|
25
|
-
```sh
|
|
26
|
-
npm start
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### Creating a production build
|
|
30
|
-
|
|
31
|
-
Minify HTML, compress JS, inline and minify CSS.
|
|
32
|
-
|
|
33
|
-
```sh
|
|
34
|
-
npm run build
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
### Publishing to registry
|
|
40
|
-
|
|
41
|
-
* Make sure to update the version number in package.json file for every pull request
|
|
42
|
-
* CircleCI will take care of publishing to npm and also adding a tag when the commits are merged to master
|
|
43
|
-
* CircleCI will publish it only if the package version has been increased
|
|
1
|
+
# Translation Space Designsystem
|
|
2
|
+
|
|
3
|
+
[](https://dl.circleci.com/status-badge/redirect/gh/test-IO/translation-space-designsystem/tree/main)
|
|
4
|
+
|
|
5
|
+
--- (Live deployment)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## Development
|
|
9
|
+
|
|
10
|
+
### Requirements
|
|
11
|
+
|
|
12
|
+
1. Node.js
|
|
13
|
+
2. NPM (comes with Node.js)
|
|
14
|
+
|
|
15
|
+
### Install dependencies
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
npm i
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Working locally
|
|
22
|
+
|
|
23
|
+
Starts watch tasks to compile when changes detected
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
npm start
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Creating a production build
|
|
30
|
+
|
|
31
|
+
Minify HTML, compress JS, inline and minify CSS.
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
npm run build
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
### Publishing to registry
|
|
40
|
+
|
|
41
|
+
* Make sure to update the version number in package.json file for every pull request
|
|
42
|
+
* CircleCI will take care of publishing to npm and also adding a tag when the commits are merged to master
|
|
43
|
+
* CircleCI will publish it only if the package version has been increased
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const readline = require('readline');
|
|
3
|
-
|
|
4
|
-
async function extractIconClasses(app) {
|
|
5
|
-
const fileStream = fs.createReadStream('src/assets/stylesheets/components/iconfont.css');
|
|
6
|
-
|
|
7
|
-
const rl = readline.createInterface({
|
|
8
|
-
input: fileStream,
|
|
9
|
-
crlfDelay: Infinity
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
const iconClasses = [];
|
|
13
|
-
|
|
14
|
-
for await (const line of rl) {
|
|
15
|
-
if (line.startsWith('.icon-'))
|
|
16
|
-
iconClasses.push(line.split(':')[0].replace('.', ''));
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
fs.writeFile('src/static/icons-' + app + '.json', JSON.stringify(iconClasses), err => {
|
|
20
|
-
if (err) {
|
|
21
|
-
console.log('Error writing file', err)
|
|
22
|
-
} else {
|
|
23
|
-
console.log('Successfully extracted icon classes')
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
extractIconClasses('cirro');
|
|
29
|
-
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const readline = require('readline');
|
|
3
|
+
|
|
4
|
+
async function extractIconClasses(app) {
|
|
5
|
+
const fileStream = fs.createReadStream('src/assets/stylesheets/components/iconfont.css');
|
|
6
|
+
|
|
7
|
+
const rl = readline.createInterface({
|
|
8
|
+
input: fileStream,
|
|
9
|
+
crlfDelay: Infinity
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const iconClasses = [];
|
|
13
|
+
|
|
14
|
+
for await (const line of rl) {
|
|
15
|
+
if (line.startsWith('.icon-'))
|
|
16
|
+
iconClasses.push(line.split(':')[0].replace('.', ''));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
fs.writeFile('src/static/icons-' + app + '.json', JSON.stringify(iconClasses), err => {
|
|
20
|
+
if (err) {
|
|
21
|
+
console.log('Error writing file', err)
|
|
22
|
+
} else {
|
|
23
|
+
console.log('Successfully extracted icon classes')
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
extractIconClasses('cirro');
|
|
29
|
+
|