diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 8aa0dea..0c13cfc 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -1,174 +1,177 @@ name: CI/CD Pipeline on: - push: - branches: - - main - pull_request: - branches: - - main + push: + branches: + - main + pull_request: + branches: + - main jobs: - code-quality: - runs-on: ubuntu-latest - env: - STORE_PATH: ~/.pnpm-store - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - - - uses: pnpm/action-setup@v4 - name: Install pnpm - with: - version: latest - run_install: false - - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - uses: actions/cache@v4 - name: Setup pnpm cache - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install - - - name: Run ESLint - run: pnpm lint - - vulnerability-check: - runs-on: ubuntu-latest - env: - STORE_PATH: ~/.pnpm-store - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - - - uses: pnpm/action-setup@v4 - name: Install pnpm - with: - version: latest - run_install: false - - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - uses: actions/cache@v4 - name: Setup pnpm cache - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install - - - name: Run Snyk to check for vulnerabilities - uses: snyk/actions/node@master - env: - SNYK_TOKEN: ${{ secrets.SNYK_TOKEN || '' }} - - build: - runs-on: ubuntu-latest - needs: [code-quality, vulnerability-check] + code-quality: + runs-on: ubuntu-latest + env: + STORE_PATH: ~/.pnpm-store + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + version: latest + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Run ESLint + run: pnpm lint + vulnerability-check: + runs-on: ubuntu-latest + env: + STORE_PATH: ~/.pnpm-store + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + version: latest + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Run Snyk to check for vulnerabilities + uses: snyk/actions/node@master env: - STORE_PATH: ~/.pnpm-store - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - - - uses: pnpm/action-setup@v4 - name: Install pnpm - with: - version: latest - run_install: false - - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - uses: actions/cache@v4 - name: Setup pnpm cache - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install - - - uses: actions/cache@v4 - with: - path: | - ~/.npm - ${{ github.workspace }}/.next/cache - key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} - restore-keys: | - ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- - - - name: Build - run: pnpm build - - # dockerize: - # runs-on: ubuntu-latest - # needs: build - # steps: - # - name: Checkout code - # uses: actions/checkout@v2 - - # - name: Log in to Docker Hub - # run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - - # - name: Build Docker image - # run: docker build -t myapp:latest . - - # - name: Push Docker image - # run: docker tag myapp:latest ${{ secrets.DOCKER_USERNAME }}/myapp:latest - # run: docker push ${{ secrets.DOCKER_USERNAME }}/myapp:latest - - # deploy: - # runs-on: ubuntu-latest - # needs: dockerize - # steps: - # - name: Checkout code - # uses: actions/checkout@v2 - - # - name: Deploy to VM - # uses: appleboy/ssh-action@v0.1.5 - # with: - # host: ${{ secrets.VM_HOST }} - # username: ${{ secrets.VM_USER }} - # key: ${{ secrets.VM_KEY }} - # script: | - # docker pull ${{ secrets.DOCKER_USERNAME }}/myapp:latest - # docker stop myapp || true - # docker rm myapp || true - # docker run -d --name myapp -p 80:80 ${{ secrets.DOCKER_USERNAME }}/myapp:latest \ No newline at end of file + SNYK_TOKEN: ${{ secrets.SNYK_TOKEN || '' }} + + build: + runs-on: ubuntu-latest + needs: [code-quality, vulnerability-check] + + env: + STORE_PATH: ~/.pnpm-store + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + version: latest + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + # TODO: Cache not found error in the pipeline + # https://github.com/1oannis/homepage/actions/runs/11191028917/job/31113476680 + + - uses: actions/cache@v4 + with: + path: | + ~/.npm + ${{ github.workspace }}/.next/cache + key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} + restore-keys: | + ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- + + - name: Build + run: pnpm build + + # dockerize: + # runs-on: ubuntu-latest + # needs: build + # steps: + # - name: Checkout code + # uses: actions/checkout@v2 + + # - name: Log in to Docker Hub + # run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + # - name: Build Docker image + # run: docker build -t myapp:latest . + + # - name: Push Docker image + # run: docker tag myapp:latest ${{ secrets.DOCKER_USERNAME }}/myapp:latest + # run: docker push ${{ secrets.DOCKER_USERNAME }}/myapp:latest + + # deploy: + # runs-on: ubuntu-latest + # needs: dockerize + # steps: + # - name: Checkout code + # uses: actions/checkout@v2 + + # - name: Deploy to VM + # uses: appleboy/ssh-action@v0.1.5 + # with: + # host: ${{ secrets.VM_HOST }} + # username: ${{ secrets.VM_USER }} + # key: ${{ secrets.VM_KEY }} + # script: | + # docker pull ${{ secrets.DOCKER_USERNAME }}/myapp:latest + # docker stop myapp || true + # docker rm myapp || true + # docker run -d --name myapp -p 80:80 ${{ secrets.DOCKER_USERNAME }}/myapp:latest diff --git a/app/(home)/about/page.tsx b/app/(home)/about/page.tsx new file mode 100644 index 0000000..c2028d2 --- /dev/null +++ b/app/(home)/about/page.tsx @@ -0,0 +1,10 @@ +import type { Metadata } from "next" + +export const metadata: Metadata = { + title: "About", + description: "This is the about page", +} + +export default function About() { + return