diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 74ad56b6..6649f6a9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -2,6 +2,7 @@ # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +--- version: 2 updates: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 5c595aac..ae362194 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -9,21 +9,33 @@ # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # +--- + name: "CodeQL" -on: +on: # yamllint disable-line rule:truthy push: - branches: [ "main", "develop", "feature/*" ] + branches: ["main", "develop", "feature/*"] pull_request: # The branches below must be a subset of the branches above - branches: [ "main" ] + branches: ["main"] schedule: + # ┌───────────── minute (0 - 59) + # │ ┌───────────── hour (0 - 23) + # │ │ ┌───────────── day of the month (1 - 31) + # │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) + # │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) + # │ │ │ │ │ + # │ │ │ │ │ + # │ │ │ │ │ + # * * * * * - cron: '37 19 * * 5' jobs: analyze: name: Analyze - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} + runs-on: + ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} permissions: actions: read contents: read @@ -32,45 +44,50 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'javascript' ] + language: ['javascript'] + # yamllint disable rule:line-length # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Use only 'java' to analyze code written in Java, Kotlin or both # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + # yamllint enable rule:line-length steps: - - name: Checkout repository - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. + - name: Checkout repository + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 - # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + # yamllint disable rule:line-length + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + # yamllint enable rule:line-length - # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v3 + # yamllint disable rule:line-length + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v3 - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + # yamllint enable rule:line-length - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: "/language:${{matrix.language}}" + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index c485a08d..c1894d98 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -1,10 +1,12 @@ +--- + name: Docker Image CI -on: +on: # yamllint disable-line rule:truthy push: - branches: [ "main", "develop", "feature/*" ] + branches: ["main", "develop", "feature/*"] pull_request: - branches: [ "main" ] + branches: ["main"] jobs: @@ -14,32 +16,39 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 - - name: Build the Docker image - run: make compose/rebuild - - name: Lint in Docker image - run: make compose/lint - - name: Test in Docker image - run: make compose/test - - name: Run in Docker image - run: make compose/run - - name: Tag Docker image - run: docker tag algorithm-exercises-ts:latest algorithm-exercises-ts:${{ github.sha }} + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 + - name: Build the Docker image + run: make compose/rebuild + - name: Lint in Docker image + run: make compose/lint + - name: Test in Docker image + run: make compose/test + - name: Run in Docker image + run: make compose/run + - name: Tag Docker image + run: > + docker tag + algorithm-exercises-ts:latest + algorithm-exercises-ts:${{ github.sha }} - - name: Run Snyk to check Docker image for vulnerabilities - # Snyk can be used to break the build when it detects vulnerabilities. - # In this case we want to upload the issues to GitHub Code Scanning - continue-on-error: true - uses: snyk/actions/docker@master - env: - # In order to use the Snyk Action you will need to have a Snyk API token. - # See https://docs.snyk.io/integrations/ci-cd-integrations/github-actions-integration#getting-your-snyk-token - # or you can sign up for free at https://snyk.io/login - SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - with: + - name: Run Snyk to check Docker image for vulnerabilities + # Snyk can be used to break the build when it detects vulnerabilities. + # In this case we want to upload the issues to GitHub Code Scanning + continue-on-error: true + uses: snyk/actions/docker@master + env: + # yamllint disable rule:line-length + # In order to use the Snyk Action you will need to have a Snyk API token. + # See https://docs.snyk.io/integrations/ci-cd-integrations/github-actions-integration#getting-your-snyk-token + # or you can sign up for free at https://snyk.io/login + # yamllint enable rule:line-length + SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} + with: image: algorithm-exercises-ts:latest args: --file=Dockerfile - # - name: Upload result to GitHub Code Scanning - # uses: github/codeql-action/upload-sarif@v2 - # with: - # sarif_file: snyk.sarif + # yamllint disable rule:comments-indentation + # - name: Upload result to GitHub Code Scanning + # uses: github/codeql-action/upload-sarif@v2 + # with: + # sarif_file: snyk.sarif + # yamllint enable rule:comments-indentation diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index bddddcb1..a1a3593f 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -6,16 +6,26 @@ # found in ECMAScript/JavaScript code. # More details at https://github.com/eslint/eslint # and https://eslint.org +--- name: ESLint -on: +on: # yamllint disable-line rule:truthy push: - branches: [ "main", "develop" ] + branches: ["main", "develop"] pull_request: # The branches below must be a subset of the branches above - branches: [ "main" ] + branches: ["main"] schedule: + # ┌───────────── minute (0 - 59) + # │ ┌───────────── hour (0 - 23) + # │ │ ┌───────────── day of the month (1 - 31) + # │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) + # │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) + # │ │ │ │ │ + # │ │ │ │ │ + # │ │ │ │ │ + # * * * * * - cron: '36 13 * * 1' jobs: @@ -25,7 +35,9 @@ jobs: permissions: contents: read security-events: write - actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status + # only required for a private repository by + # github/codeql-action/upload-sarif to get the Action run status + actions: read steps: - name: Checkout code uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 diff --git a/.github/workflows/gitleaks.yml b/.github/workflows/gitleaks.yml index 39f6532f..0870c98f 100644 --- a/.github/workflows/gitleaks.yml +++ b/.github/workflows/gitleaks.yml @@ -1,9 +1,21 @@ +--- + name: gitleaks -on: + +on: # yamllint disable-line rule:truthy pull_request: push: workflow_dispatch: schedule: + # ┌───────────── minute (0 - 59) + # │ ┌───────────── hour (0 - 23) + # │ │ ┌───────────── day of the month (1 - 31) + # │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) + # │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) + # │ │ │ │ │ + # │ │ │ │ │ + # │ │ │ │ │ + # * * * * * - cron: "0 4 * * *" # run once a day at 4 AM jobs: scan: @@ -16,4 +28,5 @@ jobs: - uses: gitleaks/gitleaks-action@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE}} # Only required for Organizations, not personal accounts. + # Only required for Organizations, not personal accounts. + # GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE}} diff --git a/.github/workflows/markdown-lint.yml b/.github/workflows/markdown-lint.yml index 4793a9af..acbdad2f 100644 --- a/.github/workflows/markdown-lint.yml +++ b/.github/workflows/markdown-lint.yml @@ -1,10 +1,12 @@ +--- + name: Markdown Lint -on: +on: # yamllint disable-line rule:truthy push: - branches: [ "main", "develop", "feature/*" ] + branches: ["main", "develop", "feature/*"] pull_request: - branches: [ "main" ] + branches: ["main"] jobs: build: @@ -15,20 +17,22 @@ jobs: matrix: os: ["ubuntu-latest"] node-version: [20.x] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + # See supported Node.js release schedule + # at https://nodejs.org/en/about/releases/ steps: - - name: Checkout repository - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 - - - name: Set up Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} + - name: Checkout repository + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 - - name: Install dependencies - run: npm install -g markdownlint-cli + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} - - name: Lint - run: markdownlint '**/*.md' --ignore node_modules && echo '✔ Your code looks good.' + - name: Install dependencies + run: npm install -g markdownlint-cli + - name: Lint + run: > + markdownlint '**/*.md' --ignore node_modules + && echo '✔ Your code looks good.' diff --git a/.github/workflows/node-coverage.js.yml b/.github/workflows/node-coverage.js.yml index 2c694c9f..ba8a3a39 100644 --- a/.github/workflows/node-coverage.js.yml +++ b/.github/workflows/node-coverage.js.yml @@ -1,10 +1,12 @@ +--- + name: Node.js CI Coverage -on: +on: # yamllint disable-line rule:truthy push: - branches: [ "main", "develop", "feature/*" ] + branches: ["main", "develop", "feature/*"] pull_request: - branches: [ "main" ] + branches: ["main"] jobs: build: @@ -13,39 +15,38 @@ jobs: strategy: matrix: - os: [ - "ubuntu-latest" - ] node-version: [22.x] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + # See supported Node.js release schedule + # at https://nodejs.org/en/about/releases/ steps: - - name: Checkout repository - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 - with: - fetch-depth: 0 - - name: Set up Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - - name: Install dependencies - run: npm ci --verbose - - - name: Lint - run: npm run lint - - - name: Run the tests - run: npm run jest:ci -- --coverage - - - name: Upload coverage reports to Codecov with GitHub Action - uses: codecov/codecov-action@v4 - with: - token: ${{ secrets.CODECOV_TOKEN }} # required - verbose: true # optional (default = false) - - - name: SonarCloud Scan - uses: SonarSource/sonarcloud-github-action@master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + - name: Checkout repository + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 + with: + fetch-depth: 0 + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: npm ci --verbose + + - name: Lint + run: npm run lint + + - name: Run the tests + run: npm run jest:ci -- --coverage + + - name: Upload coverage reports to Codecov with GitHub Action + uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} # required + verbose: true # optional (default = false) + + - name: SonarCloud Scan + uses: SonarSource/sonarcloud-github-action@master + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + # Needed to get PR information, if any + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/node-snyk.yml b/.github/workflows/node-snyk.yml index 188e3191..daf35d6a 100644 --- a/.github/workflows/node-snyk.yml +++ b/.github/workflows/node-snyk.yml @@ -1,13 +1,16 @@ +# yamllint disable rule:line-length # This workflow will build a .NET project # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net +# yamllint enable rule:line-length +--- name: Snyk Code analysis -on: +on: # yamllint disable-line rule:truthy push: - branches: [ main, develop, feature/* ] + branches: ["main", "develop", "feature/*"] pull_request: - branches: [ main ] + branches: ["main"] jobs: security: diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index ae83b6a5..c690f710 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -1,10 +1,12 @@ +--- + name: Node.js CI Tests -on: +on: # yamllint disable-line rule:truthy push: - branches: [ "main", "develop", "feature/*" ] + branches: ["main", "develop", "feature/*"] pull_request: - branches: [ "main" ] + branches: ["main"] jobs: build: @@ -14,27 +16,28 @@ jobs: strategy: matrix: os: [ - "windows-latest", - "ubuntu-latest", - "macOS-latest" - ] + "windows-latest", + "ubuntu-latest", + "macOS-latest" + ] node-version: [18.x, 20.x, 22.x] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + # See supported Node.js release schedule + # at https://nodejs.org/en/about/releases/ steps: - - name: Checkout repository - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 + - name: Checkout repository + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 - - name: Set up Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} - - name: Install dependencies - run: npm ci --verbose + - name: Install dependencies + run: npm ci --verbose - - name: Lint - run: npm run lint + - name: Lint + run: npm run lint - - name: Run the tests - run: npm run jest:ci + - name: Run the tests + run: npm run jest:ci diff --git a/.github/workflows/yamllint.yml b/.github/workflows/yamllint.yml index e88812b0..3f5009c6 100644 --- a/.github/workflows/yamllint.yml +++ b/.github/workflows/yamllint.yml @@ -1,4 +1,5 @@ --- + name: YAML lint on: # yamllint disable-line rule:truthy diff --git a/.markdownlint.yaml b/.markdownlint.yaml index caa54a79..3fd17fdf 100644 --- a/.markdownlint.yaml +++ b/.markdownlint.yaml @@ -1,3 +1,7 @@ +--- + +# yamllint disable rule:line-length + # Example markdownlint configuration with all properties set to their default value # Default state for all rules @@ -261,3 +265,5 @@ MD053: # Ignored definitions ignored_definitions: - "//" + +# yamllint enable rule:line-length diff --git a/compose.yaml b/compose.yaml index a8a47ae6..47be7c55 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,3 +1,4 @@ +--- services: algorithm-exercises-ts-test: image: algorithm-exercises-ts:latest @@ -17,8 +18,8 @@ services: context: . target: lint # environment: - # LOG_LEVEL: ${LOG_LEVEL:-info} ## (1) ## info | debug - # BRUTEFORCE: ${BRUTEFORCE:-false} ## (1) ## true | false + # LOG_LEVEL: ${LOG_LEVEL:-info} ## (1) ## info | debug + # BRUTEFORCE: ${BRUTEFORCE:-false} ## (1) ## true | false volumes: - ./:/app profiles: ["lint"]