From db4ccb5fdf0d646fd4a185ecf373df74855a3ebd Mon Sep 17 00:00:00 2001 From: "NOTEBOOK-SAUER\\chris" Date: Tue, 10 Sep 2024 18:19:29 +0200 Subject: [PATCH 01/15] add Dockerfile --- Dockerfile | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..9e318689 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,29 @@ +# Stage 1: Install dependencies and build the Next.js app +FROM node:18-alpine AS builder + +WORKDIR /app + +COPY package.json package-lock.json ./ + +# clean install based on package-lock.json +RUN npm ci + +COPY . . + +RUN npm run build + +# Stage 2: Serve the app in production +FROM node:18-alpine AS runner + +WORKDIR /app + +COPY --from=builder /app ./ + +# Expose port 3000 for the Next.js app +EXPOSE 3000 + +# Set the environment to production +ENV NODE_ENV=production + +# Start the Next.js app (using the built-in Next.js server) +CMD ["npm", "run", "start"] From ac05e60d88da40fc4427a3bebd985f117eedc0dc Mon Sep 17 00:00:00 2001 From: Sauer02 <45943679+Sauer02@users.noreply.github.com> Date: Tue, 10 Sep 2024 18:28:16 +0200 Subject: [PATCH 02/15] Create example nextjs.yml --- .github/workflows/nextjs.yml | 93 ++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 .github/workflows/nextjs.yml diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml new file mode 100644 index 00000000..ed747367 --- /dev/null +++ b/.github/workflows/nextjs.yml @@ -0,0 +1,93 @@ +# Sample workflow for building and deploying a Next.js site to GitHub Pages +# +# To get started with Next.js see: https://nextjs.org/docs/getting-started +# +name: Deploy Next.js site to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Detect package manager + id: detect-package-manager + run: | + if [ -f "${{ github.workspace }}/yarn.lock" ]; then + echo "manager=yarn" >> $GITHUB_OUTPUT + echo "command=install" >> $GITHUB_OUTPUT + echo "runner=yarn" >> $GITHUB_OUTPUT + exit 0 + elif [ -f "${{ github.workspace }}/package.json" ]; then + echo "manager=npm" >> $GITHUB_OUTPUT + echo "command=ci" >> $GITHUB_OUTPUT + echo "runner=npx --no-install" >> $GITHUB_OUTPUT + exit 0 + else + echo "Unable to determine package manager" + exit 1 + fi + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: ${{ steps.detect-package-manager.outputs.manager }} + - name: Setup Pages + uses: actions/configure-pages@v5 + with: + # Automatically inject basePath in your Next.js configuration file and disable + # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). + # + # You may remove this line if you want to manage the configuration yourself. + static_site_generator: next + - name: Restore cache + uses: actions/cache@v4 + with: + path: | + .next/cache + # Generate a new cache whenever packages or source files change. + key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} + # If source files changed but packages didn't, rebuild from a prior cache. + restore-keys: | + ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}- + - name: Install dependencies + run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} + - name: Build with Next.js + run: ${{ steps.detect-package-manager.outputs.runner }} next build + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./out + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 From 56068895400fed55a65eb6344165f731f36b5f2b Mon Sep 17 00:00:00 2001 From: "NOTEBOOK-SAUER\\chris" Date: Tue, 10 Sep 2024 18:33:28 +0200 Subject: [PATCH 03/15] adapt the actions file --- .github/workflows/nextjs.yml | 129 ++++++++++++++--------------------- 1 file changed, 51 insertions(+), 78 deletions(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index ed747367..ae1ce65e 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -1,93 +1,66 @@ -# Sample workflow for building and deploying a Next.js site to GitHub Pages -# -# To get started with Next.js see: https://nextjs.org/docs/getting-started -# -name: Deploy Next.js site to Pages +name: Next.js CI Pipeline +# Define triggers for each stage on: - # Runs on pushes targeting the default branch push: - branches: ["main"] + branches: + - "**" # Lint and build on all branches - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: +jobs: + # Linting Job + lint: + name: Lint Code + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: "18" -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false + - name: Install dependencies + run: npm ci -jobs: - # Build job + - name: Run ESLint + run: npm run lint + + # Build Job build: + name: Build Application runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Detect package manager - id: detect-package-manager - run: | - if [ -f "${{ github.workspace }}/yarn.lock" ]; then - echo "manager=yarn" >> $GITHUB_OUTPUT - echo "command=install" >> $GITHUB_OUTPUT - echo "runner=yarn" >> $GITHUB_OUTPUT - exit 0 - elif [ -f "${{ github.workspace }}/package.json" ]; then - echo "manager=npm" >> $GITHUB_OUTPUT - echo "command=ci" >> $GITHUB_OUTPUT - echo "runner=npx --no-install" >> $GITHUB_OUTPUT - exit 0 - else - echo "Unable to determine package manager" - exit 1 - fi - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: ${{ steps.detect-package-manager.outputs.manager }} - - name: Setup Pages - uses: actions/configure-pages@v5 - with: - # Automatically inject basePath in your Next.js configuration file and disable - # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). - # - # You may remove this line if you want to manage the configuration yourself. - static_site_generator: next - - name: Restore cache - uses: actions/cache@v4 + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 with: - path: | - .next/cache - # Generate a new cache whenever packages or source files change. - key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} - # If source files changed but packages didn't, rebuild from a prior cache. - restore-keys: | - ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}- + node-version: "18" + - name: Install dependencies - run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} - - name: Build with Next.js - run: ${{ steps.detect-package-manager.outputs.runner }} next build - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: ./out + run: npm ci - # Deployment job - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} + - name: Build the app + run: npm run build + + # Audit Job (Security checks, audits only on main/release branches) + audit: + name: Audit Dependencies runs-on: ubuntu-latest - needs: build + if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release') steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: "18" + + - name: Install dependencies + run: npm ci + + - name: Run npm audit + run: npm audit --audit-level=high From 459e8e7499a7bae57a38ec25f17e6d7af20b9156 Mon Sep 17 00:00:00 2001 From: "NOTEBOOK-SAUER\\chris" Date: Tue, 10 Sep 2024 18:41:25 +0200 Subject: [PATCH 04/15] change audit job run --- .github/workflows/nextjs.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index ae1ce65e..8f8526b1 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -5,6 +5,9 @@ on: push: branches: - "**" # Lint and build on all branches + pull_request: + types: + - closed jobs: # Linting Job @@ -49,7 +52,7 @@ jobs: audit: name: Audit Dependencies runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release') + if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release') && github.event.pull_request.merged == true steps: - name: Checkout code uses: actions/checkout@v3 From b448f6b6f0559dc1efaa6ac4323a92cc4e2f0d72 Mon Sep 17 00:00:00 2001 From: "NOTEBOOK-SAUER\\chris" Date: Tue, 10 Sep 2024 18:42:41 +0200 Subject: [PATCH 05/15] change action audit if --- .github/workflows/nextjs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index 8f8526b1..70fa732f 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -52,7 +52,7 @@ jobs: audit: name: Audit Dependencies runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release') && github.event.pull_request.merged == true + if: github.event.pull_request.merged == true && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release')) steps: - name: Checkout code uses: actions/checkout@v3 From f6b03a326e8d2a7a3e1372b145bfbe1e24214560 Mon Sep 17 00:00:00 2001 From: "NOTEBOOK-SAUER\\chris" Date: Tue, 10 Sep 2024 18:49:30 +0200 Subject: [PATCH 06/15] adapt readme for push --- README.md | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 35401b44..595cce2d 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,34 @@ # Startup - Free Next.js Startup Website Template +Adapt readme file! + Startup free, open-source, and premium-quality startup website template for Next.js comes with everything you need to launch a startup, business, or SaaS website, including all essential sections, components, and pages. If you're looking for a high-quality and visually appealing, feature-rich Next.js Template for your next startup, SaaS, or business website, this is the perfect choice and starting point for you! ### ✨ Key Features + - Crafted for Startup and SaaS Business - Next.js and Tailwind CSS - All Essential Business Sections and Pages - High-quality and Clean Design - Dark and Light Version - TypeScript Support -and Much More ... + and Much More ... ### 🙌 Detailed comparison between the Free and Pro versions of Startup -| Feature | Free | Pro | -|---------------------|------------|----------| -| Next.js Landing Page | ✅ Yes | ✅ Yes | -| All The Integrations - Auth, DB, Payments, Blog and many more ... | ❌ No | ✅ Yes | -| Homepage Variations | 1 | 2 | -| Additional SaaS Pages and Components | ❌ No | ✅ Yes | -| Functional Blog with Sanity | ❌ No | ✅ Yes | ✅ Yes | -| Use with Commercial Projects | ✅ Yes | ✅ Yes | -| Lifetime Free Updates | ✅ Yes | ✅ Yes | -| Email Support | ❌ No | ✅ Yes | -| Community Support | ✅ Yes | ✅ Yes | - +| Feature | Free | Pro | +| ----------------------------------------------------------------- | ------ | ------ | ------ | +| Next.js Landing Page | ✅ Yes | ✅ Yes | +| All The Integrations - Auth, DB, Payments, Blog and many more ... | ❌ No | ✅ Yes | +| Homepage Variations | 1 | 2 | +| Additional SaaS Pages and Components | ❌ No | ✅ Yes | +| Functional Blog with Sanity | ❌ No | ✅ Yes | ✅ Yes | +| Use with Commercial Projects | ✅ Yes | ✅ Yes | +| Lifetime Free Updates | ✅ Yes | ✅ Yes | +| Email Support | ❌ No | ✅ Yes | +| Community Support | ✅ Yes | ✅ Yes | ### [🔥 Get Startup Pro](https://nextjstemplates.com/templates/saas-starter-startup) @@ -34,7 +36,6 @@ and Much More ... Startup Pro - Expertly crafted for fully-functional, high-performing SaaS startup websites. Comes with with Authentication, Database, Blog, and all the essential integrations necessary for SaaS business sites. - ### [🚀 View Free Demo](https://startup.nextjstemplates.com/) ### [🚀 View Pro Demo](https://startup-pro.nextjstemplates.com/) @@ -51,11 +52,12 @@ Startup Pro - Expertly crafted for fully-functional, high-performing SaaS startu [![Deploy with Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/NextJSTemplates/startup-nextjs) - ### 📄 License + Startup is 100% free and open-source, feel free to use with your personal and commercial projects. ### 💜 Support + If you like the template, please star this repository to inspire the team to create more stuff like this and reach more users like you! ### ✨ Explore and Download - Free [Next.js Templates](https://nextjstemplates.com) From 789d542cca7c71c3ad1cfe52561720770fb69f7a Mon Sep 17 00:00:00 2001 From: "NOTEBOOK-SAUER\\chris" Date: Tue, 10 Sep 2024 19:04:52 +0200 Subject: [PATCH 07/15] adapt yml for docker --- .github/workflows/nextjs.yml | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index 70fa732f..b41ae8e0 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -48,11 +48,11 @@ jobs: - name: Build the app run: npm run build - # Audit Job (Security checks, audits only on main/release branches) - audit: - name: Audit Dependencies + # Audit and Docker Push Job (Runs only when a merge happens to the main branch) + audit_and_push: + name: Audit and Push Docker Image runs-on: ubuntu-latest - if: github.event.pull_request.merged == true && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release')) + if: github.event_name == 'push' && github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, 'Merge pull request') steps: - name: Checkout code uses: actions/checkout@v3 @@ -67,3 +67,24 @@ jobs: - name: Run npm audit run: npm audit --audit-level=high + + # Build Docker Image + - name: Build Docker image + run: | + docker build -t devops-nextjs:${{ github.sha }} . + + # Log in to Docker Hub + - name: Log in to Docker Hub + run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + # Tag Docker image + - name: Tag Docker image + run: | + docker tag devops-nextjs:${{ github.sha }} ${{ secrets.DOCKER_USERNAME }}/devops-nextjs:${{ github.sha }} + docker tag devops-nextjs:${{ github.sha }} ${{ secrets.DOCKER_USERNAME }}/devops-nextjs:latest + + # Push Docker image to Docker Hub + - name: Push Docker image + run: | + docker push ${{ secrets.DOCKER_USERNAME }}/devops-nextjs:${{ github.sha }} + docker push ${{ secrets.DOCKER_USERNAME }}/devops-nextjs:latest From 2bde052962081475f7351a486acbc287aae08842 Mon Sep 17 00:00:00 2001 From: "NOTEBOOK-SAUER\\chris" Date: Tue, 10 Sep 2024 19:06:42 +0200 Subject: [PATCH 08/15] fix audit failure --- package-lock.json | 356 +++++++++++++--------------------------------- 1 file changed, 95 insertions(+), 261 deletions(-) diff --git a/package-lock.json b/package-lock.json index a92f5503..cbabdf31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -230,9 +230,10 @@ } }, "node_modules/@next/env": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz", - "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==" + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.9.tgz", + "integrity": "sha512-hnDAoDPMii31V0ivibI8p6b023jOF1XblWTVjsDUoZKwnZlaBtJFZKDwFqi22R8r9i6W08dThUWU7Bsh2Rg8Ww==", + "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { "version": "14.1.0", @@ -243,12 +244,13 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz", - "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.9.tgz", + "integrity": "sha512-/kfQifl3uLYi3DlwFlzCkgxe6fprJNLzzTUFknq3M5wGYicDIbdGlxUl6oHpVLJpBB/CBY3Y//gO6alz/K4NWA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -258,12 +260,13 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz", - "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.9.tgz", + "integrity": "sha512-tK/RyhCmOCiXQ9IVdFrBbZOf4/1+0RSuJkebXU2uMEsusS51TjIJO4l8ZmEijH9gZa0pJClvmApRHi7JuBqsRw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -273,12 +276,13 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz", - "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.9.tgz", + "integrity": "sha512-tS5eqwsp2nO7mzywRUuFYmefNZsUKM/mTG3exK2jIHv9TEVklE1SByB1KMhFkqlit1PxS9YK1tV8BOV90Wpbrw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -288,12 +292,13 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz", - "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.9.tgz", + "integrity": "sha512-8svpeTFNAMTUMKQbEzE8qRAwl9o7mNBv7LR1bmSkQvo1oy4WrNyZbhWsldOiKrc4mZ5dfQkGYsI9T75mIFMfeA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -303,12 +308,13 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz", - "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.9.tgz", + "integrity": "sha512-0HNulLWpKTB7H5BhHCkEhcRAnWUHeAYCftrrGw3QC18+ZywTdAoPv/zEqKy/0adqt+ks4JDdlgSQ1lNKOKjo0A==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -318,12 +324,13 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz", - "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.9.tgz", + "integrity": "sha512-hhVFViPHLAVUJRNtwwm609p9ozWajOmRvzOZzzKXgiVGwx/CALxlMUeh+M+e0Zj6orENhWLZeilOPHpptuENsA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -333,12 +340,13 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz", - "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.9.tgz", + "integrity": "sha512-p/v6XlOdrk06xfN9z4evLNBqftVQUWiyduQczCwSj7hNh8fWTbzdVxsEiNOcajMXJbQiaX/ZzZdFgKVmmJnnGQ==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -348,12 +356,13 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz", - "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.9.tgz", + "integrity": "sha512-IcW9dynWDjMK/0M05E3zopbRen7v0/yEaMZbHFOSS1J/w+8YG3jKywOGZWNp/eCUVtUUXs0PW+7Lpz8uLu+KQA==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -363,12 +372,13 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz", - "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.9.tgz", + "integrity": "sha512-gcbpoXyWZdVOBgNa5BRzynrL5UR1nb2ZT38yKgnphYU9UHjeecnylMHntrQiMg/QtONDcJPFC/PmsS47xIRYoA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -423,11 +433,19 @@ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==" }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, "node_modules/@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "license": "Apache-2.0", "dependencies": { + "@swc/counter": "^0.1.3", "tslib": "^2.4.0" } }, @@ -932,25 +950,17 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, - "node_modules/browserify-transform-tools": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/browserify-transform-tools/-/browserify-transform-tools-1.7.0.tgz", - "integrity": "sha512-D4/vMGx4ILHI/+Qokdo2x7cxPJqy7uXt0zugOBbDvnCcrQL9/WrgK71GJgrNHF/L4XLErA4cMGlTVmc2sICRnA==", - "dependencies": { - "falafel": "^2.0.0", - "through": "^2.3.7" - } - }, "node_modules/browserslist": { "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", @@ -1020,15 +1030,6 @@ "node": ">=6" } }, - "node_modules/camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -1108,17 +1109,6 @@ "node": ">= 6" } }, - "node_modules/clean-css": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", - "integrity": "sha512-a3ZEe58u+LizPdSCHM0jIGeKu1hN+oqqXXc1i70mnV0x2Ox3/ho1pE6Y8HD6yhDts5lEQs028H9kutlihP77uQ==", - "dependencies": { - "source-map": "0.5.x" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -1140,17 +1130,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1879,29 +1858,6 @@ "node": ">=0.10.0" } }, - "node_modules/falafel": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", - "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", - "dependencies": { - "acorn": "^7.1.1", - "isarray": "^2.0.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/falafel/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1963,9 +1919,10 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2256,11 +2213,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -2340,35 +2292,6 @@ "node": ">= 0.4" } }, - "node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/html-minifier": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.2.tgz", - "integrity": "sha512-CpXODZQ75jOxqF5CR0vqPKV9LuHw96ijVRbEsSPTPFs4gKd5uuMNEUsAvRgz9OSXS/D4fItq0X8362oXMyjZPw==", - "dependencies": { - "camel-case": "3.0.x", - "clean-css": "4.1.x", - "commander": "2.9.x", - "he": "1.1.x", - "ncname": "1.0.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.0.x" - }, - "bin": { - "html-minifier": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -2605,6 +2528,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2923,11 +2847,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" - }, "node_modules/lru-cache": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", @@ -2945,11 +2864,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3021,24 +2941,14 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, - "node_modules/ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha512-VLkyYr2kmPzVzrmkER9i13RJIdGbjNr855gfh2VvuboO1eYnb9k+nFS+JygfSVgtbo/HMpLz5pEYLK4Xjy7XGg==", - "dependencies": { - "xml-char-classes": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/next": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/next/-/next-14.1.0.tgz", - "integrity": "sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.9.tgz", + "integrity": "sha512-3CzBNo6BuJnRjcQvRw+irnU1WiuJNZEp+dkzkt91y4jeIDN/Emg95F+takSYiLpJ/HkxClVQRyqiTwYce5IVqw==", + "license": "MIT", "dependencies": { - "@next/env": "14.1.0", - "@swc/helpers": "0.5.2", + "@next/env": "14.2.9", + "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "graceful-fs": "^4.2.11", @@ -3052,18 +2962,19 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.1.0", - "@next/swc-darwin-x64": "14.1.0", - "@next/swc-linux-arm64-gnu": "14.1.0", - "@next/swc-linux-arm64-musl": "14.1.0", - "@next/swc-linux-x64-gnu": "14.1.0", - "@next/swc-linux-x64-musl": "14.1.0", - "@next/swc-win32-arm64-msvc": "14.1.0", - "@next/swc-win32-ia32-msvc": "14.1.0", - "@next/swc-win32-x64-msvc": "14.1.0" + "@next/swc-darwin-arm64": "14.2.9", + "@next/swc-darwin-x64": "14.2.9", + "@next/swc-linux-arm64-gnu": "14.2.9", + "@next/swc-linux-arm64-musl": "14.2.9", + "@next/swc-linux-x64-gnu": "14.2.9", + "@next/swc-linux-x64-musl": "14.2.9", + "@next/swc-win32-arm64-msvc": "14.2.9", + "@next/swc-win32-ia32-msvc": "14.2.9", + "@next/swc-win32-x64-msvc": "14.2.9" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" @@ -3072,6 +2983,9 @@ "@opentelemetry/api": { "optional": true }, + "@playwright/test": { + "optional": true + }, "sass": { "optional": true } @@ -3114,14 +3028,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dependencies": { - "lower-case": "^1.1.1" - } - }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -3317,14 +3223,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", - "dependencies": { - "no-case": "^2.2.0" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3729,13 +3627,13 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-modal-video": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/react-modal-video/-/react-modal-video-2.0.1.tgz", - "integrity": "sha512-ZPoxwbFUtDR8aFfZJ3k9Ux/c7sGcUTYKrlFJSGBoxSABL9WlCkSYhS3vqgPLgQHOJJBfyzdAovHEvsfM1TJeyQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/react-modal-video/-/react-modal-video-2.0.2.tgz", + "integrity": "sha512-Cfo3rEsxU5BL+Et/nRK7l2ajW/TLZOKTMPgpD8FDlhIxRR3yqo3Xdo1ufNxONApN0XL6iXqmMkqyEKmGOmcEiw==", + "license": "MIT", "dependencies": { "core-js": "^3.27.2", - "react-transition-group": "^4.4.2", - "stringify": "^5.2.0" + "react-transition-group": "^4.4.2" }, "peerDependencies": { "react": "^17.0.0 || ^18.2.0", @@ -3820,14 +3718,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -4074,14 +3964,6 @@ "node": ">=8" } }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -4219,18 +4101,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stringify": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/stringify/-/stringify-5.2.0.tgz", - "integrity": "sha512-n0JeEVfYUtukDmUQ7gsO2aTFUa+pI8c+TChB6q8w9X5VBElFOfNbemhPlSrvTXhtAhCLMKEZp9bu7ADeXDtV0w==", - "dependencies": { - "browserify-transform-tools": "^1.5.3", - "html-minifier": "3.5.2" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4419,15 +4289,11 @@ "node": ">=0.8" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -4464,9 +4330,10 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", @@ -4564,26 +4431,6 @@ "node": ">=14.17" } }, - "node_modules/uglify-js": { - "version": "3.0.28", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.28.tgz", - "integrity": "sha512-0h/qGay016GG2lVav3Kz174F3T2Vjlz2v6HCt+WDQpoXfco0hWwF5gHK9yh88mUYvIC+N7Z8NT8WpjSp1yoqGA==", - "dependencies": { - "commander": "~2.11.0", - "source-map": "~0.5.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-js/node_modules/commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" - }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -4634,11 +4481,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4831,14 +4673,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha512-dTaaRwm4ccF8UF15/PLT3pNNlZP04qko/FUcr0QBppYLk8+J7xA9gg2vI2X4Kr1PcJAVxwI9NdADex29FX2QVQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", From fc04e023072b817164ff1b6a23bacef5cc8807c6 Mon Sep 17 00:00:00 2001 From: "NOTEBOOK-SAUER\\chris" Date: Tue, 10 Sep 2024 19:13:46 +0200 Subject: [PATCH 09/15] adapt docker tag name to fit --- .github/workflows/nextjs.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index b41ae8e0..c4a135da 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -71,7 +71,9 @@ jobs: # Build Docker Image - name: Build Docker image run: | - docker build -t devops-nextjs:${{ github.sha }} . + # Use the first 7 characters of the GitHub SHA for a shorter, valid Docker tag + SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7) + docker build -t my-app:${SHORT_SHA} . # Log in to Docker Hub - name: Log in to Docker Hub @@ -80,11 +82,13 @@ jobs: # Tag Docker image - name: Tag Docker image run: | - docker tag devops-nextjs:${{ github.sha }} ${{ secrets.DOCKER_USERNAME }}/devops-nextjs:${{ github.sha }} - docker tag devops-nextjs:${{ github.sha }} ${{ secrets.DOCKER_USERNAME }}/devops-nextjs:latest + SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7) + docker tag my-app:${SHORT_SHA} ${{ secrets.DOCKER_USERNAME }}/my-app:${SHORT_SHA} + docker tag my-app:${SHORT_SHA} ${{ secrets.DOCKER_USERNAME }}/my-app:latest # Push Docker image to Docker Hub - name: Push Docker image run: | - docker push ${{ secrets.DOCKER_USERNAME }}/devops-nextjs:${{ github.sha }} - docker push ${{ secrets.DOCKER_USERNAME }}/devops-nextjs:latest + SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7) + docker push ${{ secrets.DOCKER_USERNAME }}/my-app:${SHORT_SHA} + docker push ${{ secrets.DOCKER_USERNAME }}/my-app:latest From dd81187c948d4c2106a383978e1236ba1531adea Mon Sep 17 00:00:00 2001 From: "NOTEBOOK-SAUER\\chris" Date: Tue, 10 Sep 2024 19:23:17 +0200 Subject: [PATCH 10/15] change docker push --- .github/workflows/nextjs.yml | 42 ++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index c4a135da..bf4f203f 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -9,6 +9,11 @@ on: types: - closed +env: + DOCKER_USER: ${{secrets.DOCKER_USER}} + DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}} + REPO_NAME: ${{secrets.REPO_NAME}} + jobs: # Linting Job lint: @@ -68,27 +73,16 @@ jobs: - name: Run npm audit run: npm audit --audit-level=high - # Build Docker Image - - name: Build Docker image - run: | - # Use the first 7 characters of the GitHub SHA for a shorter, valid Docker tag - SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7) - docker build -t my-app:${SHORT_SHA} . - - # Log in to Docker Hub - - name: Log in to Docker Hub - run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - - # Tag Docker image - - name: Tag Docker image - run: | - SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7) - docker tag my-app:${SHORT_SHA} ${{ secrets.DOCKER_USERNAME }}/my-app:${SHORT_SHA} - docker tag my-app:${SHORT_SHA} ${{ secrets.DOCKER_USERNAME }}/my-app:latest - - # Push Docker image to Docker Hub - - name: Push Docker image - run: | - SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7) - docker push ${{ secrets.DOCKER_USERNAME }}/my-app:${SHORT_SHA} - docker push ${{ secrets.DOCKER_USERNAME }}/my-app:latest + - name: docker login + run: | # log into docker hub account + docker login -u $DOCKER_USER -p $DOCKER_PASSWORD + + - name: Get current date # get the date of the build + id: date + run: echo "::set-output name=date::$(date +'%Y-%m-%d--%M-%S')" + + - name: Build the Docker image # push The image to the docker hub + run: docker build . --file Dockerfile --tag $DOCKER_USER/$REPO_NAME:${{ steps.date.outputs.date }} + + - name: Docker Push + run: docker push $DOCKER_USER/$REPO_NAME:${{ steps.date.outputs.date }} From 6ac74b4a01136ada01788a5fda7f5973df3f715d Mon Sep 17 00:00:00 2001 From: "NOTEBOOK-SAUER\\chris" Date: Tue, 10 Sep 2024 19:25:03 +0200 Subject: [PATCH 11/15] fix yml --- .github/workflows/nextjs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index bf4f203f..33dc1f9e 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -75,7 +75,7 @@ jobs: - name: docker login run: | # log into docker hub account - docker login -u $DOCKER_USER -p $DOCKER_PASSWORD + docker login -u $DOCKER_USER -p $DOCKER_PASSWORD - name: Get current date # get the date of the build id: date @@ -83,6 +83,6 @@ jobs: - name: Build the Docker image # push The image to the docker hub run: docker build . --file Dockerfile --tag $DOCKER_USER/$REPO_NAME:${{ steps.date.outputs.date }} - + - name: Docker Push run: docker push $DOCKER_USER/$REPO_NAME:${{ steps.date.outputs.date }} From 3177dc05c172ecba47b62391bea268e46634fc1a Mon Sep 17 00:00:00 2001 From: "campus\\ch" Date: Tue, 10 Sep 2024 19:34:49 +0200 Subject: [PATCH 12/15] use different docker login --- .github/workflows/nextjs.yml | 67 ++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index 33dc1f9e..c30f30c3 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -13,6 +13,10 @@ env: DOCKER_USER: ${{secrets.DOCKER_USER}} DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}} REPO_NAME: ${{secrets.REPO_NAME}} + # Use docker.io for Docker Hub if empty + REGISTRY: docker.io + # github.repository as / + IMAGE_NAME: csauercampus jobs: # Linting Job @@ -73,16 +77,59 @@ jobs: - name: Run npm audit run: npm audit --audit-level=high - - name: docker login - run: | # log into docker hub account - docker login -u $DOCKER_USER -p $DOCKER_PASSWORD + # Install the cosign tool except on PR + - name: Install cosign + if: github.event_name != 'pull_request' + uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 #v3.5.0 + with: + cosign-release: "v2.2.4" - - name: Get current date # get the date of the build - id: date - run: echo "::set-output name=date::$(date +'%Y-%m-%d--%M-%S')" + # Set up BuildKit Docker container builder to be able to build + # multi-platform images and export cache + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - - name: Build the Docker image # push The image to the docker hub - run: docker build . --file Dockerfile --tag $DOCKER_USER/$REPO_NAME:${{ steps.date.outputs.date }} + # Login against a Docker registry except on PR + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 + with: + registry: ${{ env.REGISTRY }} + username: ${{ env.DOCKER_USER }} + password: ${{ env.DOCKER_PASSWORD }} + + # Extract metadata (tags, labels) for Docker + # https://github.com/docker/metadata-action + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - - name: Docker Push - run: docker push $DOCKER_USER/$REPO_NAME:${{ steps.date.outputs.date }} + # Build and push Docker image with Buildx (don't push on PR) + # https://github.com/docker/build-push-action + - name: Build and push Docker image + id: build-and-push + uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # v5.0.0 + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + + # Sign the resulting Docker image digest except on PRs. + # This will only write to the public Rekor transparency log when the Docker + # repository is public to avoid leaking data. If you would like to publish + # transparency data even for private images, pass --force to cosign below. + # https://github.com/sigstore/cosign + - name: Sign the published Docker image + if: ${{ github.event_name != 'pull_request' }} + env: + # https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable + TAGS: ${{ steps.meta.outputs.tags }} + DIGEST: ${{ steps.build-and-push.outputs.digest }} + # This step uses the identity token to provision an ephemeral certificate + # against the sigstore community Fulcio instance. + run: echo "${TAGS}" | xargs -I {} cosign sign --yes {}@${DIGEST} From 8868e804c3b0aaa49a9fbcbd10a8a4d95e75eb40 Mon Sep 17 00:00:00 2001 From: "campus\\ch" Date: Tue, 10 Sep 2024 19:38:14 +0200 Subject: [PATCH 13/15] use secrets directly --- .github/workflows/nextjs.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index c30f30c3..41f3a33b 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -10,9 +10,6 @@ on: - closed env: - DOCKER_USER: ${{secrets.DOCKER_USER}} - DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}} - REPO_NAME: ${{secrets.REPO_NAME}} # Use docker.io for Docker Hub if empty REGISTRY: docker.io # github.repository as / @@ -95,8 +92,8 @@ jobs: uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 with: registry: ${{ env.REGISTRY }} - username: ${{ env.DOCKER_USER }} - password: ${{ env.DOCKER_PASSWORD }} + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASSWORD }} # Extract metadata (tags, labels) for Docker # https://github.com/docker/metadata-action From 7a639657e77aba1c28b4743e215fcbcbc420b11c Mon Sep 17 00:00:00 2001 From: "campus\\ch" Date: Tue, 10 Sep 2024 19:42:12 +0200 Subject: [PATCH 14/15] adapt yml for docker --- .github/workflows/nextjs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index 41f3a33b..aaf61259 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -92,7 +92,7 @@ jobs: uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 with: registry: ${{ env.REGISTRY }} - username: ${{ secrets.DOCKER_USER }} + username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} # Extract metadata (tags, labels) for Docker @@ -101,7 +101,7 @@ jobs: id: meta uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0 with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + images: ${{ env.REGISTRY }}/${{ secrets.IMAGE_NAME }} # Build and push Docker image with Buildx (don't push on PR) # https://github.com/docker/build-push-action From 5230cd0cd225d691118f0966553990a796b3b295 Mon Sep 17 00:00:00 2001 From: "campus\\ch" Date: Tue, 10 Sep 2024 19:51:17 +0200 Subject: [PATCH 15/15] adapt full path for docker --- .github/workflows/nextjs.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index aaf61259..539aeeab 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -8,12 +8,8 @@ on: pull_request: types: - closed - env: - # Use docker.io for Docker Hub if empty REGISTRY: docker.io - # github.repository as / - IMAGE_NAME: csauercampus jobs: # Linting Job @@ -101,7 +97,7 @@ jobs: id: meta uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0 with: - images: ${{ env.REGISTRY }}/${{ secrets.IMAGE_NAME }} + images: ${{ env.REGISTRY }}/${{ secrets.DOCKER_REPO }} # Build and push Docker image with Buildx (don't push on PR) # https://github.com/docker/build-push-action