diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index 018ee5e7..b0ecb717 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -7,8 +7,27 @@ on: branches: [ main ] jobs: + commit-lint: + name: 'Semantic Commits' + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 200 + - uses: actions/setup-node@v4 + with: + node-version: 20 + check-latest: true + + - name: Check commit titles + run: | + npm install @commitlint/cli @commitlint/config-conventional + npx commitlint --verbose --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} + linters: - name: Semantic Commits + name: Semgrep Rules runs-on: ubuntu-latest if: github.event_name == 'pull_request' @@ -20,8 +39,17 @@ jobs: with: python-version: '3.10' + - name: Cache pip + uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml', '**/setup.py') }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + - name: Install and Run Pre-commit - uses: pre-commit/action@v2.0.3 + uses: pre-commit/action@v3.0.1 - name: Download Semgrep rules run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules diff --git a/.github/workflows/ui-tests.yml b/.github/workflows/ui-tests.yml index da26c807..5338837c 100644 --- a/.github/workflows/ui-tests.yml +++ b/.github/workflows/ui-tests.yml @@ -70,7 +70,7 @@ jobs: id: yarn-cache-dir-path run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT - - uses: actions/cache@v3 + - uses: actions/cache@v4 id: yarn-cache with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} @@ -79,7 +79,7 @@ jobs: ${{ runner.os }}-yarn-ui- - name: Cache cypress binary - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.cache/Cypress key: ${{ runner.os }}-cypress diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 00000000..0c582f54 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,26 @@ +module.exports = { + parserPreset: "conventional-changelog-conventionalcommits", + rules: { + "subject-empty": [2, "never"], + "type-case": [2, "always", "lower-case"], + "type-empty": [2, "never"], + "type-enum": [ + 2, + "always", + [ + "build", + "chore", + "ci", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style", + "test", + "deprecate", // deprecation decision + ], + ], + }, +}; diff --git a/frontend/index.html b/frontend/index.html index 86a3dece..8150b401 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2,9 +2,9 @@
- + -{{ meta.description }}
-- The content here is just for seo purposes. The actual content will be loaded in a few seconds. -
-- Seo checks if a page has more than 300 words. So, here are some more words to make it more than 300 words. - Page descriptions are the HTML meta tags that provide a brief summary of a web page. - Search engines use meta descriptions to help identify the page's topic - they don't use them to rank the page, but they do use them to determine whether or not to display the page in search results. - Meta descriptions are important because they're often the first thing people see when they're deciding which search result to click on. - They're also important because they can help improve your click-through rate (CTR) from search results. - A good meta description can entice people to click on your page instead of someone else's. -
Know More @@ -41,9 +30,8 @@ diff --git a/frontend/public/learning.svg b/frontend/public/learning.svg new file mode 100644 index 00000000..49fb3d80 --- /dev/null +++ b/frontend/public/learning.svg @@ -0,0 +1,4 @@ + diff --git a/frontend/src/components/Controls/CodeEditor.vue b/frontend/src/components/Controls/CodeEditor.vue index cbb10b83..32ae86ed 100644 --- a/frontend/src/components/Controls/CodeEditor.vue +++ b/frontend/src/components/Controls/CodeEditor.vue @@ -146,7 +146,6 @@ function resetEditor(value: string, resetHistory = false) { value = getModelValue() aceEditor?.setValue(value) aceEditor?.clearSelection() - console.log(isDark.value) aceEditor?.setTheme(isDark.value ? 'ace/theme/twilight' : 'ace/theme/chrome') props.autofocus && aceEditor?.focus() if (resetHistory) { diff --git a/frontend/src/components/CourseOutline.vue b/frontend/src/components/CourseOutline.vue index 122e76e7..3bff9484 100644 --- a/frontend/src/components/CourseOutline.vue +++ b/frontend/src/components/CourseOutline.vue @@ -142,6 +142,7 @@