@fishawack/lab-env 4.45.0-beta.1 → 4.45.0-beta.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  ## Changelog
2
2
 
3
+ ### 4.45.0-beta.2 (2025-09-01)
4
+
5
+ #### Features
6
+
7
+ * added mcp instructions file ([3f27ac9](https://bitbucket.org/fishawackdigital/lab-env/commits/3f27ac954f440edae1c96439c2f46f1c277ee3c0))
8
+ * added sass instructions file ([563b7ee](https://bitbucket.org/fishawackdigital/lab-env/commits/563b7eebdcfac1904507930b053846fa575bf038))
9
+ * added workspace instructions file ([1838c42](https://bitbucket.org/fishawackdigital/lab-env/commits/1838c42c979c0ad2a0b59f45db9876050ccc2b04))
10
+ * updated vue instructions to have style specifics ([695713a](https://bitbucket.org/fishawackdigital/lab-env/commits/695713a8b2bf61908fb05c331f8b47e7196d2f2d))
11
+
12
+ #### Bug Fixes
13
+
14
+ * added note about resources being _Build/sass on static projects ([1b66bb2](https://bitbucket.org/fishawackdigital/lab-env/commits/1b66bb2f206cde8847f9859581b1c87603d161d8))
15
+ * beta branch now installs submodules ([9f78f63](https://bitbucket.org/fishawackdigital/lab-env/commits/9f78f63830562e0e3a0f797a888b0d97465165d0))
16
+ * copy sass instructions on core projects ([70ad3a8](https://bitbucket.org/fishawackdigital/lab-env/commits/70ad3a8d8dfd48c3d208541696619740d8973dfb))
17
+ * renamed files to correct extension ([a54bd0b](https://bitbucket.org/fishawackdigital/lab-env/commits/a54bd0bb59030e20c2e3b35dfbe9aa7b01106103))
18
+
3
19
  ### 4.45.0-beta.1 (2025-09-01)
4
20
 
5
21
  #### Features
package/_Ai/vue-3.md CHANGED
@@ -75,12 +75,13 @@ fw npm -v
75
75
 
76
76
  ## Project Structure Context
77
77
 
78
- - **Vue Components**: Main app component at [`_Build/vue/app.vue`](_Build/vue/app.vue)
79
- - **Routes**: Page components in [`_Build/vue/routes/`](_Build/vue/routes/) directory
80
- - **Global Components**: Reusable components in [`_Build/vue/globals/`](_Build/vue/globals/) directory
81
- - **JavaScript**: Main script at [`_Build/js/script.js`](_Build/js/script.js), utilities in [`_Build/js/libs/`](_Build/js/libs/) directory
82
- - **Styles**: SASS files in [`_Build/sass/`](_Build/sass/) directory
83
- - **Templates**: Handlebars templates in [`_Build/handlebars/`](_Build/handlebars/) directory
78
+ - **Vue Components**: Main app component at [`resources/vue/app.vue`](resources/vue/app.vue)
79
+ - **Vue Components**: Reusable components in [`resources/vue/components/`](resources/vue/components/) directory
80
+ - **Vue Routes**: Page components in [`resources/vue/routes/`](resources/vue/routes/) directory
81
+ - **Vue Stories**: Component documentation in [`resources/vue/stories/`](resources/vue/stories/) directory
82
+ - **JavaScript**: Main script at [`resources/js/script.js`](resources/js/script.js), utilities in [`resources/js/libs/`](resources/js/libs/) directory
83
+ - **Styles**: SASS files in [`resources/sass/`](resources/sass/) directory
84
+ - **Templates**: Handlebars templates in [`resources/handlebars/`](resources/handlebars/) directory
84
85
  - **Tests**: Unit tests in [`_Test/unit/`](_Test/unit/), UI tests in [`_Test/ui/`](_Test/ui/)
85
86
 
86
87
  ## Technology Stack
@@ -144,22 +145,85 @@ The project uses Fishawack's custom build system (`@fishawack/core`):
144
145
 
145
146
  ## Styling Architecture
146
147
 
148
+ ### Critical Styling Philosophy
149
+
150
+ **NEVER use `<style>` blocks in Vue components** - All styling is managed through the structured SASS architecture. This enforces separation of concerns and maintains optimal build performance.
151
+
147
152
  ### SASS Structure
148
153
 
149
- - [`_Build/sass/vendor.scss`](_Build/sass/vendor.scss): Third-party imports and lab-ui components
150
- - [`_Build/sass/general.scss`](_Build/sass/general.scss): Project-specific styles
151
- - [`_Build/sass/_variables.scss`](_Build/sass/_variables.scss): SASS variables
152
- - [`_Build/sass/_defaults.scss`](_Build/sass/_defaults.scss): Default overrides
154
+ - [`resources/sass/vendor.scss`](resources/sass/vendor.scss): Third-party imports and lab-ui components (cached for performance)
155
+ - [`resources/sass/general.scss`](resources/sass/general.scss): Project-specific component imports (fast-reloading)
156
+ - [`resources/sass/_variables.scss`](resources/sass/_variables.scss): Project color overrides and custom variables
157
+ - [`resources/sass/_defaults.scss`](resources/sass/_defaults.scss): Lab-UI component setting overrides
158
+ - [`resources/sass/components/`](resources/sass/components/): Individual component style files using BEM methodology
159
+
160
+ ### BEM Methodology
161
+
162
+ All component styling follows BEM (Block Element Modifier) methodology:
163
+
164
+ ```scss
165
+ // Block: Base component
166
+ .card {
167
+ }
168
+
169
+ // Element: Component part
170
+ .card__header {
171
+ }
172
+ .card__body {
173
+ }
174
+ .card__footer {
175
+ }
176
+
177
+ // Modifier: Variant or state
178
+ .card--featured {
179
+ }
180
+ .card--compact {
181
+ }
182
+ .card__header--sticky {
183
+ }
184
+ ```
185
+
186
+ **Vue Template Example:**
187
+
188
+ ```vue
189
+ <template>
190
+ <article class="card card--featured">
191
+ <header class="card__header card__header--sticky">
192
+ <h2 class="card__title">{{ title }}</h2>
193
+ </header>
194
+ <div class="card__body">
195
+ <p>{{ content }}</p>
196
+ </div>
197
+ </article>
198
+ </template>
199
+ ```
153
200
 
154
201
  ### UI Library Integration
155
202
 
156
- Uses `@fishawack/lab-ui` for:
203
+ Uses `@fishawack/lab-ui` utility-first framework providing:
204
+
205
+ #### Utility Classes (Tailwind-like system):
157
206
 
158
- - Typography system
159
- - Grid system
160
- - Button components
161
- - Utility classes
162
- - Color system
207
+ - **Spacing**: `m-0`, `m-0.5`, `m-1.5`, `p-2`, `p-3`, `p-4`
208
+ - **Colors**: `bg-1` through `bg-6`, `color-1` through `color-6`
209
+ - **Grid**: `grid__6/12`, `mobile:grid__12/12`, `grid--gutters`
210
+ - **Flexbox**: `flex`, `justify-center`, `items-center`, `flex-column`
211
+ - **Typography**: `text-center`, `font-600`, `uppercase`
212
+ - **Display**: `block`, `hidden`, `mobile:hidden`, `tablet:block`
213
+
214
+ #### Responsive Breakpoints:
215
+
216
+ - `mobile:` - 767px and below
217
+ - `tablet:` - 1023px and below
218
+ - `desktop:` - 1299px and below
219
+
220
+ #### Base Components:
221
+
222
+ - Typography system with semantic font weights
223
+ - 12-column flexbox grid system
224
+ - Button component base with extensive customization
225
+ - Form components with validation states
226
+ - Utility classes for spacing, colors, and layout
163
227
 
164
228
  ## Testing Guidelines
165
229
 
@@ -187,17 +251,241 @@ fw npm run test
187
251
 
188
252
  ## Development Guidelines
189
253
 
254
+ ### Vue Component Styling Rules
255
+
256
+ **CRITICAL**: Never use `<style>` or `<style scoped>` blocks in Vue components. All styling must be managed through the SASS architecture.
257
+
258
+ #### Correct Approach:
259
+
260
+ ```vue
261
+ <!-- MyComponent.vue -->
262
+ <template>
263
+ <div class="my-component my-component--featured">
264
+ <header class="my-component__header">
265
+ <h2 class="my-component__title">{{ title }}</h2>
266
+ </header>
267
+ <div class="my-component__body">
268
+ <p>{{ content }}</p>
269
+ </div>
270
+ </div>
271
+ </template>
272
+
273
+ <script>
274
+ export default {
275
+ name: "MyComponent",
276
+ props: ["title", "content"],
277
+ };
278
+ </script>
279
+
280
+ <!-- NO <style> block - styles are in resources/sass/components/_my-component.scss -->
281
+ ```
282
+
283
+ #### Corresponding SASS File (`resources/sass/components/_my-component.scss`):
284
+
285
+ ```scss
286
+ .my-component {
287
+ // Use lab-ui utilities when possible
288
+ @apply bg-0 p-2 grid--gutters;
289
+
290
+ border: 1px solid $color6;
291
+ border-radius: 4px;
292
+
293
+ &__header {
294
+ @apply border-color-6 pb-1;
295
+ border-bottom: 1px solid;
296
+ }
297
+
298
+ &__title {
299
+ @apply font-600 color-4;
300
+ margin: 0;
301
+ }
302
+
303
+ &__body {
304
+ @apply pt-1;
305
+ }
306
+
307
+ // Modifier for featured variant
308
+ &--featured {
309
+ border-color: $color1;
310
+ box-shadow: 0 4px 8px rgba($color1, 0.1);
311
+ }
312
+ }
313
+ ```
314
+
315
+ ### BEM Methodology Implementation
316
+
317
+ Use BEM (Block Element Modifier) consistently for all component styling:
318
+
319
+ - **Block**: `.component-name` - The standalone component
320
+ - **Element**: `.component-name__element` - A part of the component
321
+ - **Modifier**: `.component-name--modifier` or `.component-name__element--modifier` - A variant or state
322
+
323
+ #### Vue Template BEM Patterns:
324
+
325
+ ```vue
326
+ <template>
327
+ <!-- Block with modifier -->
328
+ <article class="card card--featured">
329
+ <!-- Elements -->
330
+ <header class="card__header card__header--sticky">
331
+ <h2 class="card__title">{{ title }}</h2>
332
+ <button class="card__action card__action--primary">Action</button>
333
+ </header>
334
+
335
+ <div class="card__body">
336
+ <!-- Combine BEM with lab-ui utilities -->
337
+ <p class="card__text color-4 font-400">{{ content }}</p>
338
+ </div>
339
+
340
+ <!-- Conditional modifiers -->
341
+ <footer
342
+ class="card__footer"
343
+ :class="{ 'card__footer--expanded': isExpanded }"
344
+ >
345
+ <slot name="footer" />
346
+ </footer>
347
+ </article>
348
+ </template>
349
+ ```
350
+
351
+ ### Lab-UI Utility Integration
352
+
353
+ Combine BEM component styles with lab-ui utilities for optimal performance:
354
+
355
+ #### Layout Utilities:
356
+
357
+ ```vue
358
+ <template>
359
+ <div class="dashboard-grid grid grid--gutters">
360
+ <div class="dashboard-card grid__6/12 tablet:grid__12/12">
361
+ <!-- Card content -->
362
+ </div>
363
+ <div class="dashboard-card grid__6/12 tablet:grid__12/12">
364
+ <!-- Card content -->
365
+ </div>
366
+ </div>
367
+ </template>
368
+ ```
369
+
370
+ #### Responsive Design:
371
+
372
+ ```vue
373
+ <template>
374
+ <nav class="main-nav flex justify-between items-center p-2">
375
+ <div class="main-nav__brand">
376
+ <img
377
+ src="logo.svg"
378
+ alt="Brand"
379
+ class="logo--small tablet:logo--medium"
380
+ />
381
+ </div>
382
+
383
+ <div class="main-nav__menu hidden tablet:block">
384
+ <!-- Desktop menu -->
385
+ </div>
386
+
387
+ <button class="main-nav__toggle block tablet:hidden">
388
+ <!-- Mobile menu toggle -->
389
+ </button>
390
+ </nav>
391
+ </template>
392
+ ```
393
+
394
+ ### Component Development Workflow
395
+
396
+ 1. **Create Vue Component**: Focus on structure and behavior only
397
+ 2. **Define BEM Classes**: Use semantic class names following BEM methodology
398
+ 3. **Create SASS File**: Add corresponding file in `resources/sass/components/`
399
+ 4. **Import in General**: Add new component to `resources/sass/general.scss`
400
+ 5. **Use Lab-UI Utilities**: Leverage existing utilities before writing custom CSS
401
+ 6. **Test Responsively**: Verify component works across all breakpoints
402
+
190
403
  ### Vue Component Patterns
191
404
 
192
405
  - Use Vue 3 Composition API when appropriate
193
406
  - Follow Single File Component (SFC) structure
194
407
  - Utilize global components (`GIcon`, `GSvg`) for consistent UI
408
+ - Never include styling within component files
195
409
 
196
410
  ### Adding New Routes
197
411
 
198
- 1. Create component in [`_Build/vue/routes/`](_Build/vue/routes/)
199
- 2. Add route definition to [`_Build/js/libs/routes.js`](_Build/js/libs/routes.js)
412
+ 1. Create component in [`resources/vue/routes/`](resources/vue/routes/)
413
+ 2. Add route definition to [`resources/js/libs/routes.js`](resources/js/libs/routes.js)
200
414
  3. Set `prerender: false` if route shouldn't be pre-rendered
415
+ 4. Create corresponding SASS file in [`resources/sass/components/`](resources/sass/components/) if custom styling needed
416
+
417
+ ### Performance Considerations
418
+
419
+ #### SASS Architecture Benefits:
420
+
421
+ - **Vendor Caching**: Third-party libraries in `vendor.scss` are cached for faster rebuilds
422
+ - **Fast Recompilation**: Project styles in `general.scss` recompile quickly during development
423
+ - **PurgeCSS Optimization**: Unused CSS automatically removed in production builds
424
+ - **No Style Duplication**: Global SASS architecture prevents style repetition across components
425
+
426
+ #### PurgeCSS and Dynamic Classes:
427
+
428
+ ```javascript
429
+ // If Vue components add classes dynamically via JavaScript:
430
+ export default {
431
+ methods: {
432
+ highlightElement() {
433
+ // Ensure these classes are preserved in production
434
+ this.$el.classList.add("highlighted", "animated-in");
435
+ },
436
+ },
437
+ };
438
+ ```
439
+
440
+ Add protection in SASS file:
441
+
442
+ ```scss
443
+ /* purgecss start ignore */
444
+ .highlighted,
445
+ .animated-in {
446
+ // These classes will be preserved in production builds
447
+ }
448
+ /* purgecss end ignore */
449
+ ```
450
+
451
+ ### Styling Anti-Patterns to Avoid
452
+
453
+ ❌ **Never do this:**
454
+
455
+ ```vue
456
+ <template>
457
+ <div class="my-component">
458
+ <p :style="{ color: dynamicColor }">Text</p>
459
+ </div>
460
+ </template>
461
+
462
+ <style scoped>
463
+ .my-component {
464
+ padding: 20px;
465
+ }
466
+ </style>
467
+ ```
468
+
469
+ ✅ **Do this instead:**
470
+
471
+ ```vue
472
+ <template>
473
+ <div class="my-component" :class="colorClass">
474
+ <p class="my-component__text">Text</p>
475
+ </div>
476
+ </template>
477
+
478
+ <script>
479
+ export default {
480
+ computed: {
481
+ colorClass() {
482
+ return `my-component--${this.variant}`;
483
+ },
484
+ },
485
+ };
486
+ </script>
487
+ <!-- Styles in resources/sass/components/_my-component.scss -->
488
+ ```
201
489
 
202
490
  ### Adding Dependencies
203
491
 
@@ -230,10 +518,24 @@ The `fw` command is our container orchestration manager that:
230
518
 
231
519
  1. Always assume containerized environment with `fw` prefix
232
520
  2. Follow Vue.js 3 best practices and Composition API patterns
233
- 3. Use existing global components and utilities from lab-ui
234
- 4. Consider the Handlebars template system for static content
235
- 5. Respect the existing SASS architecture and variable system
236
- 6. Ensure new routes are properly configured for SPA routing
237
- 7. Use the existing testing patterns for unit and integration tests
238
-
239
- Remember: This is a containerized Vue.js SPA with a custom build system - all operations must go through the `fw` container orchestration manager.
521
+ 3. **NEVER suggest `<style>` blocks in Vue components** - All styling goes in SASS files
522
+ 4. Use BEM methodology for component class naming (`.block__element--modifier`)
523
+ 5. Combine lab-ui utilities with custom component styles for optimal performance
524
+ 6. Create corresponding SASS files in `resources/sass/components/` for new components
525
+ 7. Import new component styles in `resources/sass/general.scss` for fast recompilation
526
+ 8. Use existing global components and utilities from lab-ui
527
+ 9. Consider the Handlebars template system for static content
528
+ 10. Respect the existing SASS architecture and variable system
529
+ 11. Ensure new routes are properly configured for SPA routing
530
+ 12. Use the existing testing patterns for unit and integration tests
531
+ 13. Always test production builds when adding JavaScript-generated CSS classes (PurgeCSS considerations)
532
+
533
+ ### Key Styling Principles:
534
+
535
+ - **Separation of Concerns**: Vue handles logic/templates, SASS handles all styling
536
+ - **Utility-First**: Use lab-ui utilities before writing custom CSS
537
+ - **BEM Methodology**: Consistent class naming for maintainable styles
538
+ - **Performance**: Leverage vendor/general file split for optimal build times
539
+ - **Responsive**: Mobile-first design with lab-ui breakpoint system
540
+
541
+ Remember: This is a containerized Vue.js SPA with structured SASS architecture - all operations must go through the `fw` container orchestration manager, and all styling must be managed through the SASS system using BEM methodology.
@@ -127,7 +127,9 @@ pipelines:
127
127
  - production
128
128
  size: 4x
129
129
  script:
130
- # Install deps
130
+ # Install lib deps
131
+ - git submodule init && git submodule update
132
+ # Install release deps
131
133
  - npm install -g semantic-release@24 @semantic-release/changelog@6 @semantic-release/git@10 conventional-changelog-conventionalcommits@8
132
134
  # Release version via node so can exit out when no release made
133
135
  - |
@@ -0,0 +1,136 @@
1
+ ## Changelog
2
+
3
+ ### 1.8.0 (2025-08-10)
4
+
5
+ #### Features
6
+
7
+ * new env flag for remote browsers ([f313be6](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/f313be6cde14e05ac832b43127b6c5639fd62015))
8
+
9
+ ### 1.8.0-beta.1 (2025-08-10)
10
+
11
+ #### Features
12
+
13
+ * new env flag for remote browsers ([f313be6](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/f313be6cde14e05ac832b43127b6c5639fd62015))
14
+
15
+ ### 1.7.2 (2025-05-15)
16
+
17
+ #### Bug Fixes
18
+
19
+ * use n flag in symlink to override if symlink already exists ([cdc1a41](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/cdc1a41639785f65e2076477f33e86a8ea8cb8fa))
20
+
21
+ ### 1.7.2-beta.1 (2025-05-15)
22
+
23
+ #### Bug Fixes
24
+
25
+ * use n flag in symlink to override if symlink already exists ([cdc1a41](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/cdc1a41639785f65e2076477f33e86a8ea8cb8fa))
26
+
27
+ ### 1.7.1 (2025-05-15)
28
+
29
+ #### Reverts
30
+
31
+ * Revert "feat: installed husky npm module globally" ([91cc456](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/91cc4564ea2fd6650924732a2a75cb4a9fb749b5))
32
+
33
+ ### 1.7.1-beta.1 (2025-05-14)
34
+
35
+ #### Reverts
36
+
37
+ * Revert "feat: installed husky npm module globally" ([91cc456](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/91cc4564ea2fd6650924732a2a75cb4a9fb749b5))
38
+
39
+ ### 1.7.0 (2025-05-14)
40
+
41
+ #### Features
42
+
43
+ * installed husky npm module globally ([e08f5a7](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/e08f5a7850d0743137c26addf694f586c8c8ee74))
44
+ * updated node from 20 to 22 ([e592f6e](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/e592f6e93fc6554227f8902c8c1c21a3564a32ce))
45
+
46
+ ### 1.7.0-beta.1 (2025-05-14)
47
+
48
+ #### Features
49
+
50
+ * installed husky npm module globally ([e08f5a7](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/e08f5a7850d0743137c26addf694f586c8c8ee74))
51
+ * updated node from 20 to 22 ([e592f6e](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/e592f6e93fc6554227f8902c8c1c21a3564a32ce))
52
+
53
+ ### 1.6.0 (2024-10-22)
54
+
55
+ #### Features
56
+
57
+ * own global node_modules folder so local modules can be linked ([82f84fa](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/82f84faa5dfa7c009458bec4fe3a9f2b437c34bf))
58
+
59
+ ### 1.5.2 (2024-10-08)
60
+
61
+ #### Bug Fixes
62
+
63
+ * rclone in alpine image and aws sdk back in full image as rclone used for s3 content ([9e68463](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/9e684631bb83c105aa9e5407e8fee30a788309cd))
64
+
65
+ ### 1.5.1 (2024-10-07)
66
+
67
+ #### Bug Fixes
68
+
69
+ * move aws from full image to alpine now that s3 content requests are supported ([a947817](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/a94781756ea482545b63018e72ab30ce25727af9))
70
+
71
+ ### 1.5.0 (2024-10-01)
72
+
73
+ #### Features
74
+
75
+ * commit into lab-env and create pull request against development on publish ([22e9c66](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/22e9c666dff1e6453090da472a6cd4f0b89c6fbb))
76
+
77
+ #### Bug Fixes
78
+
79
+ * close source branch by default on pull request ([5208373](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/5208373822272c648a547f9b328720cb4fdf9bd4))
80
+
81
+ ### 1.4.2 (2024-10-01)
82
+
83
+ #### Bug Fixes
84
+
85
+ * trigger ci ([301d679](https://bitbucket.org/fishawackdigital/lab-env-core-1/commits/301d6795162f0bf8941a3b9413a30092a3e8bf21))
86
+
87
+ ### 1.4.1 (2024-07-17)
88
+ * [fix] set global var for git across file system so git avail in mounted volumes i.e node_modules
89
+
90
+ ### 1.4.0 (2024-06-04)
91
+ * [feat] bumped node from 18 to 20
92
+
93
+ ### 1.3.3 (2024-02-09)
94
+ * [fix] symlink wine64 now htat wine is the default global command but electron expects wine64
95
+
96
+ ### 1.3.2 (2024-01-24)
97
+ * [fix] install latest eb cli and use node images python rather than pyenv
98
+
99
+ ### 1.3.1 (2024-01-22)
100
+ * [fix] rebuild of image to get the latest chromium version to fix new puppeteer headless mode
101
+
102
+ ### 1.3.0 (2023-03-17)
103
+ * [feat] node user is now added to www-data group for easier file permission management
104
+ * [fix] disable npm message about update being available
105
+
106
+ ### 1.2.2 (2023-02-25)
107
+ * [fix] set BRANCH and CI_COMMIT_REF_NAME env variables in container
108
+ * [fix] installed git-branch to fetch the current branch for deployment targets
109
+ * [refactor] moved global node module symlinking to alpine image for future use
110
+
111
+ ### 1.2.1 (2023-02-25)
112
+ * [fix] install eb cli into root of image rather than root user directory
113
+ * [perf] dont recurse and dont change group of node_modules to speed up command
114
+ * [refactor] set node git flag without switching user directly in dockerfile
115
+
116
+ ### 1.1.4 (2023-02-23)
117
+ * [Fix] Installed missing are-you-es5 global npm module
118
+ * [Fix] Installed missing check-dependencies global npm module
119
+
120
+ ### 1.1.3 (2023-02-23)
121
+ * [Fix] Switch to ENV for $PATH updates to avoid shell profile loading issues
122
+ * [Fix] Moved chromium to alpine image as its needed for svg tasks and testing
123
+
124
+ ### 1.1.2 (2023-02-22)
125
+ * [Fix] cd into $PWD after su command or we'll start in users home directory
126
+
127
+ ### 1.1.1 (2023-02-22)
128
+ * [Fix] Use -l login flag for su command for both non interactive and interactive shells
129
+ * [Fix] Switch $PATH writes to .profile so they are executed on non interactive shells
130
+
131
+ ### 1.1.0 (2023-02-22)
132
+ * [Feature] Watertight now baked into image so not needed in package.json of projects
133
+ * [Fix] lftp installed in alpine image as it's needed for content tasks
134
+
135
+ ### 1.0.0 (2023-02-21)
136
+ * [Misc] initial commit
@@ -0,0 +1,113 @@
1
+ #####
2
+ # Alpine image
3
+ #####
4
+
5
+ FROM node:22 AS alpine
6
+
7
+ LABEL org.opencontainers.image.authors="Mike Mellor <mike.mellor@avalerehealth.com>"
8
+
9
+ ARG TARGETARCH
10
+
11
+ WORKDIR /app
12
+
13
+ EXPOSE 3000
14
+ EXPOSE 3001
15
+
16
+ # Get latest apt-get
17
+ RUN apt-get update
18
+
19
+ # Update npm to latest
20
+ RUN npm install -g npm@latest
21
+
22
+ # Install dart sass vm (arch switch)
23
+ RUN curl -L -o /sass.tar.gz https://github.com/sass/dart-sass/releases/download/1.57.1/dart-sass-1.57.1-linux-$(if [ "$TARGETARCH" = "arm64" ]; then echo 'arm64'; else echo 'x64'; fi).tar.gz
24
+ RUN tar -xf /sass.tar.gz -C /
25
+ ENV PATH="${PATH}:/dart-sass/"
26
+ RUN rm -rf /sass.tar.gz
27
+
28
+ # Set safe directory to remove intel errors when running git rev-parse
29
+ RUN su node -c "git config --global --add safe.directory /app"
30
+
31
+ # Also set global git flag for allowing access across filesystems for mounted node_modules dir
32
+ ENV GIT_DISCOVERY_ACROSS_FILESYSTEM=1
33
+
34
+ # Disable npm message about updates being available
35
+ RUN su node -c "npm config set update-notifier false"
36
+
37
+ # Add node user to www-data group
38
+ RUN usermod -a -G www-data node
39
+
40
+ # Install lftp
41
+ RUN apt-get install -y lftp
42
+
43
+ # Install chromium
44
+ RUN apt-get install -y chromium fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 --no-install-recommends
45
+ # Stop Puppeteer downloading browsers during npm install
46
+ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
47
+ ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
48
+
49
+ # Install package.json checker
50
+ RUN npm install check-dependencies -g
51
+
52
+ # Install node_modules checker
53
+ RUN npm install are-you-es5 -g
54
+
55
+ # Install git branch fetcher
56
+ RUN npm install git-branch -g
57
+
58
+ # Link root global node_modules to ~/.node_modules
59
+ RUN ln -s /usr/local/lib/node_modules/ /home/node/.node_modules
60
+
61
+ # Install rclone
62
+ RUN curl https://rclone.org/install.sh | bash
63
+
64
+ # Cleanup apt-get install folders
65
+ RUN apt-get clean && \
66
+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
67
+
68
+ COPY entrypoint.sh /bin/entrypoint.sh
69
+ RUN chmod +x /bin/entrypoint.sh
70
+ ENTRYPOINT ["/bin/entrypoint.sh"]
71
+
72
+ #####
73
+ # Full image
74
+ #####
75
+
76
+ FROM alpine AS full
77
+
78
+ # Get latest apt-get
79
+ RUN apt-get update
80
+
81
+ # Install ghostscript
82
+ RUN apt-get install -y ghostscript
83
+
84
+ # Install zip
85
+ RUN apt-get install zip
86
+
87
+ # Install AWS Elastic Beanstalk cli
88
+ ENV PATH="${PATH}:/.ebcli-virtual-env/executables"
89
+ RUN apt-get -y install python-is-python3 python3-pip && \
90
+ pip install virtualenv --break-system-packages && \
91
+ git clone https://github.com/aws/aws-elastic-beanstalk-cli-setup.git ~/aws-eb && \
92
+ python ~/aws-eb/scripts/ebcli_installer.py --location / && \
93
+ rm -rf ~/aws-eb
94
+
95
+ # Install AWS-CLI@2 (arch switch)
96
+ RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(if [ "$TARGETARCH" = "arm64" ]; then echo 'aarch64'; else echo 'x86_64'; fi).zip" -o "awscliv2.zip"
97
+ RUN unzip awscliv2.zip
98
+ RUN ./aws/install
99
+ RUN rm -rf ./aws && rm -rf awscliv2.zip
100
+
101
+ # Update electron globally
102
+ RUN npm install -g electron-packager@latest
103
+
104
+ # Install wine64
105
+ RUN apt-get install -y wine64 && \
106
+ ln -s /usr/bin/wine /usr/bin/wine64
107
+
108
+ # Install watertight
109
+ RUN --mount=type=ssh npm install -g git+ssh://git@bitbucket.org/fishawackdigital/watertight-node-auto.git#v6.0.0
110
+
111
+ # Cleanup apt-get install folders
112
+ RUN apt-get clean && \
113
+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
@@ -0,0 +1,9 @@
1
+ ## Background
2
+
3
+ ### What
4
+
5
+ The image used for core@8 and above.
6
+
7
+ ### Why
8
+
9
+ Allows us to automate the local developer & CI environments.
@@ -0,0 +1,82 @@
1
+ definitions:
2
+ services:
3
+ docker:
4
+ image: docker:dind
5
+ memory: 12288
6
+
7
+ pipelines:
8
+ branches:
9
+ master:
10
+ - step:
11
+ image: fishawack/aws-runner
12
+ runs-on:
13
+ - self.hosted
14
+ - linux
15
+ - production
16
+ size: 4x
17
+ script:
18
+ # Install release deps
19
+ - npm install -g semantic-release@24 @semantic-release/changelog@6 @semantic-release/git@10 conventional-changelog-conventionalcommits@8
20
+ # Release version via node so can exit out when no release made
21
+ - |
22
+ node -e "const spawn = require('child_process').spawn('semantic-release', ['--repositoryUrl', 'https://$GIT_CREDENTIALS@bitbucket.org/$BITBUCKET_REPO_FULL_NAME'], { env: { ...process.env, FORCE_COLOR: true } }); spawn.stderr.on('data', d => process.stderr.write(d.toString())); spawn.stdout.on('data', d => {process.stdout.write(d.toString()); if(d.toString().includes('There are no relevant changes, so no new version is released.') || d.toString().includes('therefore a new version won\'t be published.')){process.exit(1);}})" || exit 0
23
+ # Copy ssh keys so physical files exist for agent to use
24
+ - cp /build/*/ssh/* ~/.ssh/
25
+ # Start ssh agent and add all (if any) keys
26
+ - eval `ssh-agent` && ssh-add || true
27
+ # Publish docker image
28
+ - docker login $DOCKER_CREDENTIALS && docker buildx create --use && npm run image
29
+ # Sync beta after publish
30
+ - git config --global user.email "digital@fishawack.com"
31
+ - git config --global user.name "Digital Fishawack"
32
+ - git fetch origin "+refs/heads/*:refs/remotes/origin/*" && git checkout beta && git merge master && git push origin beta
33
+ # Commit and create pull request for new version on lab-env repo
34
+ - git clone https://$GIT_CREDENTIALS@bitbucket.org/fishawackdigital/lab-env
35
+ - cd lab-env
36
+ - git checkout -b "$BITBUCKET_REPO_SLUG-$BITBUCKET_COMMIT" origin/beta
37
+ - git submodule init
38
+ - git submodule update
39
+ - git submodule update --remote --merge core/1
40
+ - git add .
41
+ - |
42
+ git commit --allow-empty -m "build(core/1): Bumped $BITBUCKET_REPO_SLUG"
43
+ - git push origin "$BITBUCKET_REPO_SLUG-$BITBUCKET_COMMIT"
44
+ - |
45
+ curl https://api.bitbucket.org/2.0/repositories/fishawackdigital/lab-env/pullrequests \
46
+ -u $GIT_CREDENTIALS \
47
+ --header 'Content-Type: application/json' \
48
+ --data "{
49
+ \"title\": \"Bumped $BITBUCKET_REPO_SLUG\",
50
+ \"destination\": {
51
+ \"branch\": {
52
+ \"name\": \"beta\"
53
+ }
54
+ },
55
+ \"source\": {
56
+ \"branch\": {
57
+ \"name\": \"$BITBUCKET_REPO_SLUG-$BITBUCKET_COMMIT\"
58
+ }
59
+ },
60
+ \"reviewers\": [
61
+ {
62
+ \"uuid\": \"{2518e4c3-fc1d-4653-b355-c00be099ce6c}\"
63
+ }
64
+ ],
65
+ \"close_source_branch\": true
66
+ }"
67
+ services:
68
+ - docker
69
+ beta:
70
+ - step:
71
+ image: fishawack/aws-runner
72
+ runs-on:
73
+ - self.hosted
74
+ - linux
75
+ - production
76
+ size: 4x
77
+ script:
78
+ # Install deps
79
+ - npm install -g semantic-release@24 @semantic-release/changelog@6 @semantic-release/git@10 conventional-changelog-conventionalcommits@8
80
+ # Release version via node so can exit out when no release made
81
+ - |
82
+ node -e "const spawn = require('child_process').spawn('semantic-release', ['--repositoryUrl', 'https://$GIT_CREDENTIALS@bitbucket.org/$BITBUCKET_REPO_FULL_NAME'], { env: { ...process.env, FORCE_COLOR: true } }); spawn.stderr.on('data', d => process.stderr.write(d.toString())); spawn.stdout.on('data', d => {process.stdout.write(d.toString()); if(d.toString().includes('There are no relevant changes, so no new version is released.') || d.toString().includes('therefore a new version won\'t be published.')){process.exit(1);}})" || exit 0
@@ -0,0 +1,37 @@
1
+ services:
2
+ core:
3
+ build:
4
+ context: $FW_CORE_1_CONTEXT
5
+ target: $FW_CORE_1_TARGET
6
+ ssh:
7
+ - default
8
+ args:
9
+ target: $FW_CORE_1_TARGET
10
+ target_image: $FW_CORE_1_TARGET_IMAGE
11
+ image: $FW_CORE_1_IMAGE:${FW_CORE_1_VERSION:-latest}
12
+ init: true
13
+ tty: true
14
+ volumes:
15
+ - $CWD/:/app
16
+ - $FW_DIR/targets:/home/node/targets
17
+ - $FW_DIR/.ssh:/home/node/.ssh
18
+ - $FW_DIR/.aws:/home/node/.aws
19
+ - node_modules:/app/node_modules
20
+ ports:
21
+ - ${PORT:-3000}:${PORT:-3000}
22
+ - ${PORT_OPT:-3001}:${PORT_OPT:-3001}
23
+ environment:
24
+ - REPO=${REPO:-}
25
+ - PORT=${PORT:-3000}
26
+ - PORT_OPT=${PORT_OPT:-3001}
27
+ - PORT_WEB=${PORT_WEB:-8000}
28
+ - PORT_DB=${PORT_DB:-3306}
29
+ - USER_UID=${USER_UID:-0}
30
+ - USER_GID=${USER_GID:-0}
31
+ - FW_ROOT=${FW_ROOT:-}
32
+ - BRANCH=${BRANCH:-}
33
+ - CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME:-}
34
+ - REMOTE_BROWSERS=${REMOTE_BROWSERS:-chrome}
35
+ volumes:
36
+ node_modules:
37
+ driver: "local"
@@ -0,0 +1,24 @@
1
+ #!/bin/bash
2
+
3
+ # Setting $FW_ROOT will bypass the user switch to node
4
+ if [ -z "$FW_ROOT" ]; then
5
+ # Set node user id to match host users id so no permission issues outside of docker
6
+ usermod -u $USER_UID node &>/dev/null
7
+
8
+ # Own the node_modules folder otherwise it'll be owned by root/previous node id which will prevent writing
9
+ chown node /app/node_modules
10
+
11
+ # Own the global node_modules folder otherwise it'll be owned by root/previous node id which will prevent writing
12
+ chown node /usr/local/lib/node_modules
13
+
14
+ # Default arguments will always be bash -l, if nothing follows this just start an non login interactive shell
15
+ if [ -z "${@:3}" ]; then
16
+ exec su node
17
+ # Otherwise pipe the command after the bash -lc into the non login non interactive shell as a command to exec
18
+ else
19
+ exec su node -c "${@:3}"
20
+ fi
21
+ else
22
+ echo "Accessing as root"
23
+ exec "$@"
24
+ fi
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "core",
3
+ "version": "1.8.0",
4
+ "description": "lab-env docker config for the @fishawack/core/1 npm module",
5
+ "scripts": {
6
+ "setup": "ln -sfn ../../.commitlintrc.json .commitlintrc.json && ln -sfn ../../.editorconfig .editorconfig && ln -sfn ../../.prettierignore .prettierignore && ln -sfn ../../.husky/ .husky && husky &>/dev/null || true",
7
+ "image": "docker buildx build --ssh default --platform linux/amd64,linux/arm64 -t fishawack/lab-env-core-1:$npm_package_version -t fishawack/lab-env-core-1:latest --push . && docker buildx build --ssh default --target alpine --platform linux/amd64,linux/arm64 -t fishawack/lab-env-core-1-alpine:$npm_package_version -t fishawack/lab-env-core-1-alpine:latest --push ."
8
+ },
9
+ "author": "Mike Mellor",
10
+ "license": "ISC",
11
+ "release": {
12
+ "plugins": [
13
+ [
14
+ "@semantic-release/commit-analyzer",
15
+ {
16
+ "preset": "conventionalcommits"
17
+ }
18
+ ],
19
+ [
20
+ "@semantic-release/release-notes-generator",
21
+ {
22
+ "preset": "conventionalcommits",
23
+ "writerOpts": {
24
+ "headerPartial": "### {{version}} ({{date}})\n",
25
+ "mainTemplate": "{{> header}}\n{{#each commitGroups}}\n\n{{#if title}}\n#### {{title}}\n\n{{/if}}\n{{#each commits}}\n{{> commit root=@root}}\n{{/each}}\n{{/each}}"
26
+ },
27
+ "presetConfig": {
28
+ "commitUrlFormat": "{{host}}/{{owner}}/{{repository}}/commits/{{hash}}"
29
+ }
30
+ }
31
+ ],
32
+ [
33
+ "@semantic-release/changelog",
34
+ {
35
+ "changelogTitle": "## Changelog"
36
+ }
37
+ ],
38
+ [
39
+ "@semantic-release/npm",
40
+ {
41
+ "npmPublish": false
42
+ }
43
+ ],
44
+ "@semantic-release/git"
45
+ ]
46
+ }
47
+ }
package/globals.js CHANGED
@@ -609,6 +609,7 @@ if (
609
609
  }
610
610
 
611
611
  if (version) {
612
+ copyAIInstructionsFile("sass-*");
612
613
  copyAIInstructionsFile("lab-env-*");
613
614
  copyAIInstructionsFile("webdriverio-capture-v9");
614
615
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fishawack/lab-env",
3
- "version": "4.45.0-beta.1",
3
+ "version": "4.45.0-beta.2",
4
4
  "description": "Docker manager for FW",
5
5
  "main": "cli.js",
6
6
  "scripts": {