Skip to content

ansidev/leetcode-blog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LeetCode Blog

Commitizen friendly Netlify Status

Solutions for LeetCode problems - Written by ansidev.

Features

  • Astro v2, disabled Astro Telemetry.
  • Automate generating post thumbnail using satori (since v2.2.0).
  • Astro Compress - Compress output HTML, CSS, JS, image.
  • Astro PurgeCSS - Remove unused CSS from build output.
  • Automate releasing new versions using GitHub Actions and following the git-flow branching model.
  • Automate Netlify deployment, support GitHub deploy environment. Go to section.
  • Automate rebasing PR branch via PR comment: /rebase, /autosquash, /rebase-autosquash.

Development features

Manual

Getting started

Install

Run one of these commands to init a new project from this template

npm create astro@latest -- --template ansidev/leetcode-blog
yarn create astro@latest --template ansidev/leetcode-blog
pnpm create astro@latest --template ansidev/leetcode-blog

Setup GitHub repository

  1. Create new GitHub Repository. Click here.

  2. Create new Netlify site.

  3. Go to https://github.com/{user}/{repository}/settings/secrets/actions/new and add following repository secrets:

    Name Description
    GH_TOKEN GitHub Personal Access Token which has the repo scope. Click here to create a new one.
    NETLIFY_AUTH_TOKEN Netlify Authentication Token. Click here to create a new one.
    NETLIFY_SITE_ID Netlify site ID. You can obtain it via UI or CLI.

Project Structure

Inside of your Astro project, you'll see the following folders and files:

/ ./ ├── .astro │ └── types.d.ts ├── .changes │ ├── unreleased │ │ └── .gitkeep │ ├── v*.md ├── .changie.yaml ├── .chglog │ ├── CHANGELOG.tpl.md │ ├── CHANGELOG_HEADER.tpl.md │ └── config.yml ├── .commitlintrc.json ├── .czrc ├── .editorconfig ├── .env.local ├── .eslintrc.cjs ├── .github │ ├── FUNDING.yaml │ └── workflows │ ├── auto_merge_release_hotfix_into_develop.yaml │ ├── deploy_to_netlify.yaml │ ├── draft_release_hotfix_pr.yaml │ ├── rebase.yaml │ └── release.yaml ├── .gitignore ├── .prettierignore ├── .prettierrc.cjs ├── .taskfiles │ ├── task_dep.yaml │ ├── task_git.yaml │ ├── task_github.yaml │ ├── task_leetcode.yaml │ ├── task_release.yaml │ └── task_site.yaml ├── .vscode │ ├── extensions.json │ ├── launch.json │ └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── Taskfile.yaml ├── astro.config.mjs ├── dotenv.config.ts ├── eslint.config.cjs ├── netlify.toml ├── package.json ├── pnpm-lock.yaml ├── public │ ├── default-post-thumbnail.png │ └── favicon.ico ├── renovate.json ├── src │ ├── assets │ │ └── scss │ │ ├── _base.scss │ │ ├── _styles.scss │ │ └── app.scss │ ├── cmd │ │ └── leetcode.ts │ ├── components │ │ ├── AppFooter.astro │ │ ├── AppHeader.astro │ │ ├── Breadcrumb.astro │ │ ├── Disqus.astro │ │ ├── Icon.astro │ │ ├── LeetCodeDifficulty.astro │ │ ├── SEOMeta.astro │ │ ├── ThemeSelector.astro │ │ ├── analytics │ │ │ ├── CounterAnalytics.astro │ │ │ ├── GoogleAnalytics.astro │ │ │ └── Swetrix.astro │ │ └── post │ │ ├── PostHeader.astro │ │ ├── PostItem.astro │ │ └── PostList.astro │ ├── configs │ │ └── site.ts │ ├── content │ │ ├── config.ts │ │ └── leetcode-solutions │ │ ├── *.md │ ├── env.d.ts │ ├── layouts │ │ ├── AppLayout.astro │ │ └── PostLayout.astro │ ├── leetcode │ │ ├── data │ │ │ └── problem_set.json │ │ ├── templates │ │ │ └── leetcode.md.mustache │ │ └── types.ts │ ├── pages │ │ ├── 404.astro │ │ ├── [slug].astro │ │ ├── difficulties │ │ │ └── [slug].astro │ │ ├── images │ │ │ └── [slug].png.ts │ │ ├── index.astro │ │ ├── rss.xml.ts │ │ └── tags │ │ └── [slug].astro │ └── utils │ ├── date.ts │ └── plugin.ts ├── tailwind.config.cjs ├── theme.config.cjs └── tsconfig.json 

Astro looks for .astro or .md files in the src/pages/ directory. Each page is exposed as a route based on its file name.

There's nothing special about src/components/, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.

Any static assets, like images, can be placed in the public/ directory.

Commands

All commands are run from the root of the project, from a terminal:

Command Action
pnpm install Installs dependencies
pnpm run dev Starts local dev server at localhost:3000
pnpm run build Build your production site to ./dist/
pnpm run preview Preview your build locally, before deploying
pnpm run astro ... Run CLI commands like astro add, astro preview
pnpm run astro --help Get help using the Astro CLI

Task commands

Command Action
dep:commit Commit changes after updating package version
dep:init-dep-branch Init git branch deps/*
dep:update Check whether the new version of the npm package broke the build.
git:push_current Push current branch
release:batch_changelog Generate changelog for existing git tags
release:changelog Generate changelog for an existing version
release:changelog_next Generate changelog for a new version
release:commit_release Create release commit
release:create Generate release commit
release:prepare Install tools
site:build Build site
site:clean Clean the build output
site:install Install dependencies

GitHub Deploy Environment

Branch Event Event Type Is Merged GitHub Environment Note
main pull_request closed true production
main pull_request open false staging
main pull_request synchronize false staging
develop pull_request closed true preview The head branch and deployment environment will be deleted after merged
main pull_request closed false skip running workflows
develop pull_request closed false skip running workflows
develop pull_request open false pr-{number}-preview
develop pull_request synchronize false pr-{number}-preview

Want to learn more?

Feel free to check the official documentation or jump into the official Discord server.

Author

Le Minh Tri @ansidev.

License

This source code is released under the AGPL-3.0 License.