Compare commits
	
		
			1 Commits
		
	
	
		
			0.9.0
			...
			beb7f801e4
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						beb7f801e4
	
				 | 
					
					
						
@@ -1,11 +1,11 @@
 | 
			
		||||
name: process-repository
 | 
			
		||||
name: process-issues
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  schedule:
 | 
			
		||||
    - cron: "@daily"
 | 
			
		||||
    - cron: '@daily'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  process-repository:
 | 
			
		||||
  process-issues:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Python Script
 | 
			
		||||
@@ -14,27 +14,22 @@ jobs:
 | 
			
		||||
          repository: alexlebens/workflow-scripts
 | 
			
		||||
          ref: main
 | 
			
		||||
          token: ${{ secrets.BOT_TOKEN }}
 | 
			
		||||
          path: workflow-scripts
 | 
			
		||||
          path: scripts
 | 
			
		||||
 | 
			
		||||
      - name: Set up Python
 | 
			
		||||
        uses: actions/setup-python@v5
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: "3.13"
 | 
			
		||||
          python-version: '3.13'
 | 
			
		||||
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        run: pip install requests immutabledict
 | 
			
		||||
        run: pip install requests
 | 
			
		||||
 | 
			
		||||
      - name: Run Script
 | 
			
		||||
        env:
 | 
			
		||||
          INSTANCE_URL: ${{ vars.INSTANCE_URL }}
 | 
			
		||||
          OWNER: ${{ gitea.owner }}
 | 
			
		||||
          REPOSITORY: ${{ gitea.repository }}
 | 
			
		||||
          TOKEN: ${{ secrets.BOT_TOKEN }}
 | 
			
		||||
          LOG_LEVEL: DEBUG
 | 
			
		||||
          ISSUE_STALE_DAYS: 3
 | 
			
		||||
          ISSUE_STALE_TAG: 23
 | 
			
		||||
          ISSUE_EXCLUDE_TAG: 17
 | 
			
		||||
          PULL_REQUEST_STALE_DAYS: 3
 | 
			
		||||
          PULL_REQUEST_STALE_TAG: 23
 | 
			
		||||
          PULL_REQUEST_REQUIRED_TAG: 22
 | 
			
		||||
        run: python ./workflow-scripts/process-repository.py
 | 
			
		||||
          STALE_DAYS: 3
 | 
			
		||||
          STALE_TAG: 'stale'
 | 
			
		||||
          EXCLUDE_TAG: 'renovate'
 | 
			
		||||
        run: python ./scripts/scripts/process-issues.py
 | 
			
		||||
							
								
								
									
										35
									
								
								.gitea/workflows/process-pull-requests.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								.gitea/workflows/process-pull-requests.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
name: process-pull-requests
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  schedule:
 | 
			
		||||
    - cron: '@daily'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  process-pull-requests:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Python Script
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          repository: alexlebens/workflow-scripts
 | 
			
		||||
          ref: main
 | 
			
		||||
          token: ${{ secrets.BOT_TOKEN }}
 | 
			
		||||
          path: scripts
 | 
			
		||||
 | 
			
		||||
      - name: Set up Python
 | 
			
		||||
        uses: actions/setup-python@v5
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: '3.13'
 | 
			
		||||
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        run: pip install requests
 | 
			
		||||
 | 
			
		||||
      - name: Run Script
 | 
			
		||||
        env:
 | 
			
		||||
          INSTANCE_URL: ${{ vars.INSTANCE_URL }}
 | 
			
		||||
          REPOSITORY: ${{ gitea.repository }}
 | 
			
		||||
          TOKEN: ${{ secrets.BOT_TOKEN }}
 | 
			
		||||
          STALE_DAYS: 3
 | 
			
		||||
          STALE_TAG: 'stale'
 | 
			
		||||
          REQUIRED_TAG: 'automerge'
 | 
			
		||||
        run: python ./scripts/scripts/process-pull-requests.py
 | 
			
		||||
@@ -24,7 +24,7 @@ jobs:
 | 
			
		||||
      - name: Set up Node.js
 | 
			
		||||
        uses: actions/setup-node@v4
 | 
			
		||||
        with:
 | 
			
		||||
          node-version: 22.17.x
 | 
			
		||||
          node-version: 22.16.x
 | 
			
		||||
          cache: pnpm
 | 
			
		||||
 | 
			
		||||
      - name: Install Dependencies
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
ARG REGISTRY=docker.io
 | 
			
		||||
FROM ${REGISTRY}/node:22.17.0-alpine3.22 AS base
 | 
			
		||||
FROM ${REGISTRY}/node:22.16.0-alpine3.22 AS base
 | 
			
		||||
 | 
			
		||||
LABEL version="0.9.0"
 | 
			
		||||
LABEL version="0.8.12"
 | 
			
		||||
LABEL description="Astro based personal website"
 | 
			
		||||
 | 
			
		||||
ENV PNPM_HOME="/pnpm"
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,6 @@
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2025 Lê Vĩnh Khang
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2025 Alex Lebens
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								package.json
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "site-profile",
 | 
			
		||||
  "type": "module",
 | 
			
		||||
  "version": "0.9.0",
 | 
			
		||||
  "version": "0.8.12",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "dev": "astro dev",
 | 
			
		||||
@@ -17,10 +17,10 @@
 | 
			
		||||
    "@astrojs/node": "^9.2.2",
 | 
			
		||||
    "@astrojs/react": "^4.3.0",
 | 
			
		||||
    "@astrojs/rss": "^4.0.12",
 | 
			
		||||
    "@directus/sdk": "^20.0.0",
 | 
			
		||||
    "@directus/sdk": "^19.1.0",
 | 
			
		||||
    "@tailwindcss/postcss": "^4.1.8",
 | 
			
		||||
    "@tailwindcss/vite": "^4.1.8",
 | 
			
		||||
    "astro": "^5.10.1",
 | 
			
		||||
    "astro": "^5.10.0",
 | 
			
		||||
    "framer-motion": "^12.16.0",
 | 
			
		||||
    "react": "^19.1.0",
 | 
			
		||||
    "react-dom": "^19.1.0",
 | 
			
		||||
@@ -31,13 +31,13 @@
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@tailwindcss/typography": "^0.5.16",
 | 
			
		||||
    "@typescript-eslint/parser": "8.36.0",
 | 
			
		||||
    "eslint": "9.31.0",
 | 
			
		||||
    "@typescript-eslint/parser": "8.34.1",
 | 
			
		||||
    "eslint": "9.29.0",
 | 
			
		||||
    "eslint-config-prettier": "10.1.5",
 | 
			
		||||
    "eslint-plugin-astro": "1.3.1",
 | 
			
		||||
    "prettier": "^3.5.3",
 | 
			
		||||
    "prettier-plugin-astro": "^0.14.1",
 | 
			
		||||
    "prettier-plugin-tailwindcss": "^0.6.12",
 | 
			
		||||
    "typescript-eslint": "8.36.0"
 | 
			
		||||
    "typescript-eslint": "8.34.1"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										929
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										929
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -16,7 +16,7 @@
 | 
			
		||||
                "npm"
 | 
			
		||||
            ],
 | 
			
		||||
            "addLabels": [
 | 
			
		||||
                "dependency"
 | 
			
		||||
                "automerge"
 | 
			
		||||
            ],
 | 
			
		||||
            "automerge": false,
 | 
			
		||||
            "minimumReleaseAge": "1 days"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,38 +0,0 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import * as FaIcons from 'react-icons/fa';
 | 
			
		||||
import * as MdIcons from 'react-icons/md';
 | 
			
		||||
import * as AiIcons from 'react-icons/ai';
 | 
			
		||||
import * as GiIcons from 'react-icons/gi';
 | 
			
		||||
import * as IoIcons from 'react-icons/io';
 | 
			
		||||
import * as CiIcons from "react-icons/ci";
 | 
			
		||||
import * as FiIcons from "react-icons/fi";
 | 
			
		||||
import * as LuIcons from "react-icons/lu";
 | 
			
		||||
import * as SiIcons from 'react-icons/si';
 | 
			
		||||
 | 
			
		||||
const iconSets = {
 | 
			
		||||
  fa: FaIcons,
 | 
			
		||||
  md: MdIcons,
 | 
			
		||||
  ai: AiIcons,
 | 
			
		||||
  gi: GiIcons,
 | 
			
		||||
  io: IoIcons,
 | 
			
		||||
  ci: CiIcons,
 | 
			
		||||
  fi: FiIcons,
 | 
			
		||||
  lu: LuIcons,
 | 
			
		||||
  si: SiIcons,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const DynamicIcon = ({ name, set = 'fa', size = 20, color = 'currentColor', className = '' }: {name: string, set: string, size: number, color: string, className: string }) => {
 | 
			
		||||
  let IconComponent = FaIcons.FaAlignCenter;
 | 
			
		||||
 | 
			
		||||
  if (name.startsWith("Fa")) {
 | 
			
		||||
    IconComponent = iconSets["fa"][name]
 | 
			
		||||
  } else if (name.startsWith("Si")) {
 | 
			
		||||
    IconComponent = iconSets["si"][name]
 | 
			
		||||
  } else {
 | 
			
		||||
    IconComponent = iconSets[set][name];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return <IconComponent size={size} color={color} className={className} />;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default DynamicIcon;
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
---
 | 
			
		||||
import BaseLayout from '../layouts/BaseLayout.astro';
 | 
			
		||||
import DynamicIcon from '../components/DynamicIcon.tsx';
 | 
			
		||||
import { FaJs, FaReact, FaNodeJs, FaPython } from 'react-icons/fa';
 | 
			
		||||
import { SiTypescript, SiAstro } from 'react-icons/si';
 | 
			
		||||
 | 
			
		||||
import directus from '../../lib/directus';
 | 
			
		||||
import { readSingleton, readItems } from '@directus/sdk';
 | 
			
		||||
@@ -106,7 +107,7 @@ const skills = await directus.request(
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- Skills Section - Improved for mobile -->
 | 
			
		||||
    <!-- Skills Section -->
 | 
			
		||||
    <div class="theme-transition-all mb-16 sm:mb-20 md:mb-24">
 | 
			
		||||
      <h2
 | 
			
		||||
        class="theme-transition-color mb-8 text-center text-2xl font-bold text-zinc-900 sm:mb-12 sm:text-3xl dark:text-zinc-100"
 | 
			
		||||
@@ -118,13 +119,13 @@ const skills = await directus.request(
 | 
			
		||||
        <!-- Main slider container -->
 | 
			
		||||
        <div class="slider-track animate-slide flex">
 | 
			
		||||
          {
 | 
			
		||||
            [...skills, ...skills, ...skills].map((skill) => (
 | 
			
		||||
            skills.map((skill, index) => (
 | 
			
		||||
              <div class="skill-card theme-transition-element mx-2 min-w-[220px] transform rounded-xl border border-zinc-200 bg-white transition-all duration-300 hover:-translate-y-2 hover:scale-105 hover:border-zinc-300 hover:shadow-xl sm:mx-4 sm:min-w-[280px] dark:border-zinc-700 dark:bg-zinc-800/50 dark:hover:border-zinc-600">
 | 
			
		||||
                <div class="p-4 sm:p-6">
 | 
			
		||||
                  <div class="mb-4 flex items-center justify-between sm:mb-6">
 | 
			
		||||
                    <div class="flex items-center gap-2 sm:gap-4">
 | 
			
		||||
                      <div class="theme-transition-bg theme-transition-color flex h-8 w-8 transform items-center justify-center rounded-lg bg-zinc-100 text-zinc-800 transition-transform group-hover:rotate-12 sm:h-12 sm:w-12 dark:bg-zinc-800 dark:text-zinc-200">
 | 
			
		||||
                        <DynamicIcon name={skill.icon} />
 | 
			
		||||
                        <skill.icon />
 | 
			
		||||
                      </div>
 | 
			
		||||
                      <h3 class="theme-transition-color text-base font-semibold text-zinc-900 sm:text-xl dark:text-zinc-100">
 | 
			
		||||
                        {skill.title}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,6 @@
 | 
			
		||||
/* Remove all the complex mobile menu styles and keep only what's necessary */
 | 
			
		||||
@import 'tailwindcss';
 | 
			
		||||
 | 
			
		||||
/* Dark mode support for Tailwind CSS v4 */
 | 
			
		||||
/* https://tailwindcss.com/docs/dark-mode */
 | 
			
		||||
@custom-variant dark (&:where(.dark, .dark *));
 | 
			
		||||
 | 
			
		||||
@layer base {
 | 
			
		||||
  :root {
 | 
			
		||||
    font-family: 'Inter', sans-serif;
 | 
			
		||||
@@ -16,7 +12,6 @@
 | 
			
		||||
  html {
 | 
			
		||||
    scroll-behavior: smooth;
 | 
			
		||||
    scroll-padding-top: 5rem;
 | 
			
		||||
    overflow-y: scroll;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  body {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,6 @@
 | 
			
		||||
  "compilerOptions": {
 | 
			
		||||
    "lib": ["dom", "dom.iterable", "esnext"],
 | 
			
		||||
    "allowJs": true,
 | 
			
		||||
    "allowImportingTsExtensions": true,
 | 
			
		||||
    "target": "ES6",
 | 
			
		||||
    "skipLibCheck": true,
 | 
			
		||||
    "strict": true,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user