62 Commits

Author SHA1 Message Date
1a2a43758f NO-ISSUE build: remove dot sqlx from gitignore 2025-08-01 15:11:05 +08:00
c6661f3222 BLOG-95 Seperate SQL migration files (#98)
All checks were successful
Frontend CI / build (push) Successful in 1m10s
### Description

- In beta environment, `v0.3.0` migration has been run, a manual revertion is required; in real environment, there is nothing to do, but to do #97 and remove migration record for `v0.1.1` manually.

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

Resolves #95

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #98
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-08-01 15:02:29 +08:00
9c88b4bb55 BLOG-94 Create user in DB when first login through OIDC (#96)
All checks were successful
Frontend CI / build (push) Successful in 1m8s
### Description

This PR introduces the functionality to persist user information in the database. When a user logs in via OIDC for the first time, a new user record is created. Subsequent logins will retrieve the existing user data from the database.

This change ensures that users have a persistent identity within our system, identified by their unique combination of OIDC issuer and subject ID.

#### Key Changes

* **User Persistence Logic**:
    * In `ExchangeAuthCodeUseCase`, after successfully exchanging the authorization code, the logic now checks if the user exists in our database using their `issuer` and `source_id`.
    * If the user is not found (`AuthError::UserNotFound`), a new record is created in the `user` table.
    * The `User` entity returned by the use case now contains the internal database `id`.

* **Database Integration in Auth Feature**:
    * Introduced a new `UserDbService` trait and its `sqlx`-based implementation, `UserDbServiceImpl`, to handle database operations for users.
    * The `AuthRepository` is extended to include methods for querying (`get_user_by_source_id`) and saving (`save_user`) users, delegating the calls to the new `UserDbService`.
    * The dependency injection container in `server/src/container.rs` has been updated to provide the `UserDbServiceImpl` to the `AuthRepositoryImpl`.

* **Domain and Data Model Updates**:
    * The `User` domain entity now includes `id` (the database primary key) and `issuer` (from OIDC claims) to uniquely identify a user across different identity providers.
    * The `UserResponseDto` now exposes the internal `id` instead of the `source_id`.

* **Session Management**:
    * The user's session now stores the database `user_id` (`i32`) instead of the entire user object. This is more efficient and secure.
    * Session keys have been centralized into a `constants.rs` file for better maintainability.

#### Database Changes

* A new database migration has been added to create the `user` table.
* The table includes columns for `id`, `issuer`, `source_id`, `displayed_name`, and `email`.
* A **`UNIQUE` index** has been created on `(source_id, issuer)` to guarantee that each user from a specific identity provider is stored only once.

#### Refactoring

* Minor refactoring in the `image` feature to change `id: Option<i32>` to `id: i32` for consistency with the new `User` entity model.

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

Resolves #94

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #96
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-08-01 13:24:08 +08:00
dd0567c937 BLOG-85 Implement OIDC authentication (#93)
All checks were successful
Frontend CI / build (push) Successful in 1m7s
### Description

- Login with configured OIDC issuer, and then save the logged in information in server session.
- Endpoints:
  - GET `/auth/login`
  - GET `/auth/callback`
  - GET `/auth/logout`

### Package Changes

```toml
actix-session = { version = "0.10.1", features = ["redis-session"] }
hex = "0.4.3"
openidconnect = { version = "4.0.1", features = [
    "reqwest",
    "reqwest-blocking",
] }
```

### Screenshots

<video src="attachments/8b15b576-61db-41b9-8587-b4b885018c93" title="Screencast From 2025-07-30 03-34-26.mp4" controls></video>

### Reference

Resolves #85

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #93
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-30 03:46:49 +08:00
ab3050db69 BLOG-78 Backend image upload and download (#84)
All checks were successful
Frontend CI / build (push) Successful in 1m4s
### Description

- Add some endpoints about image:
  - POST `/image/upload`
  - GET `/image/{id}`

> [!NOTE]
> Since there isn't identity authentication, the `/image` endpoints should be restricted to private network in nginx.

> [!NOTE]
> Volume for backend should be configured in `pod.yaml`.

### Package Changes

```toml
actix-multipart = "0.7.2"
```

### Screenshots

_No response_

### Reference

Resolves #78

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #84
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-27 13:10:46 +08:00
f400bcf486 BLOG-79 AI review bot (#83)
All checks were successful
Frontend CI / build (push) Successful in 1m5s
### Description

- Use Qudo Merge as self-hosted PR agent
- Add a workflow that auto comment /improve command to start the agent

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

Resolves #79

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #83
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-26 07:01:50 +08:00
95fabee99d BLOG-73 Change website title dynamically (#77)
All checks were successful
Frontend CI / build (push) Successful in 1m7s
### Description

- Use `generateTitle` to combine app name and page title.

### Package Changes

_No response_

### Screenshots

|Home|Post Overall|Post Content|
|-|-|-|
|![Screenshot From 2025-07-26 01-58-04.png](/attachments/70ed7440-bd5a-4e9d-a747-bb785c9f7e16)|![Screenshot From 2025-07-26 01-58-27.png](/attachments/58386f0d-e476-4795-8ac4-f0abc6586721)|![Screenshot From 2025-07-26 01-58-31.png](/attachments/cf7cb5a6-af5e-4dc6-907f-8cb8253f1b13)|

### Reference

Resolves #73

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #77
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-26 02:01:24 +08:00
9ad3809f47 BLOG-70 Add tooltip for post preview (#76)
All checks were successful
Frontend CI / build (push) Successful in 1m7s
### Description

- A a `title` attribute on the `<a>` element.
- Make the title as `<h2>` and the description as `<p>`.

### Package Changes

_No response_

### Screenshots

![image.png](/attachments/0d4b815e-d1c5-432c-8174-53273189a9c3)

### Reference

Resolves #

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #76
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-26 01:29:18 +08:00
ff2b86358d NO-ISSUE Merged from release/0.2 (#75)
All checks were successful
Frontend CI / build (push) Successful in 1m6s
Reviewed-on: #75
2025-07-26 01:03:43 +08:00
0896afe819 Merge branch 'main' into release/0.2
All checks were successful
PR Title Check / pr-title-check (pull_request) Successful in 17s
Frontend CI / build (push) Successful in 1m8s
2025-07-26 01:02:12 +08:00
462b1a6efb NO-ISSUE build: update frontend version
All checks were successful
PR Title Check / pr-title-check (pull_request) Successful in 17s
Frontend CI / build (push) Successful in 1m7s
Deployment / deployment (release) Successful in 5m38s
v0.2.1
2025-07-26 00:34:48 +08:00
7770a5b569 BLOG-72 Fix img cannot be shown on content page (#74)
All checks were successful
Frontend CI / build (push) Successful in 1m7s
### Description

<https://www.npmjs.com/package/sanitize-html>

![image.png](/attachments/f35293b6-7c80-4a6f-917e-fa0d4cffa804)

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

Resolves #72

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #74
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-26 00:33:17 +08:00
d9b531f08d NO-ISSUE Merged from release/0.2 (#69)
All checks were successful
Frontend CI / build (push) Successful in 1m10s
Reviewed-on: #69
2025-07-25 10:33:47 +08:00
2039edf5e9 NO-ISSUE build: update app version
All checks were successful
Frontend CI / build (push) Successful in 1m7s
Deployment / deployment (release) Successful in 7m24s
PR Title Check / pr-title-check (pull_request) Successful in 16s
v0.2.0
2025-07-24 23:40:40 +08:00
96c661b6d5 NO-ISSUE Update document link to readme (#68)
All checks were successful
Frontend CI / build (push) Successful in 1m7s
### Description

As the title.

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

_NO-ISSUE_

### Checklist

- [x] A milestone is set
- [ ] The related issuse has been linked to this branch

Reviewed-on: #68
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-24 23:36:30 +08:00
3cb69f6e7c BLOG-45 Post content page (#67)
All checks were successful
Frontend CI / build (push) Successful in 1m8s
### Description

- Implement the content page
  - Parse markdown formant content to html by `markdown-it`
  - Use `sanitize-html` to prevent from XSS attack
  - Style the html with `tailwindcss-typography`
- Fix the issue when backend parse the password to url
- Fix and make the post info list from backend always sorted by id

### Package Changes

### Rust

```toml
percent-encoding = "2.3.1"
```

### Node

```json
{
  "@types/markdown-it": "^14.1.2",
  "@types/sanitize-html": "^2.16.0",
  "markdown-it": "^14.1.0",
  "sanitize-html": "^2.17.0"
}
```

### Screenshots

|Desktop|Mobile|
|-|-|
|![image.png](/attachments/0ec5718a-f804-432f-8e4b-e9dc22c080d2)|![beta.squidspirit.com_post(iPhone 12 Pro) (1).png](/attachments/b30d1b96-d4a4-4b2b-b9bd-90fd2592ab52)|

### Reference

Resolves #45

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #67
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-24 22:20:58 +08:00
4a924c1b92 BLOG-65 Establish beta environment (#66)
All checks were successful
Frontend CI / build (push) Successful in 1m4s
### Description

- Change some environment variables implementation
- Nginx configuration:

  ```nginx
  server {
      server_name beta.squidspirit.com;

      proxy_pass_request_headers on;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;

      location / {
          proxy_pass http://127.0.0.1:10013/;
      }

      location /api/ {
          proxy_pass http://127.0.0.1:10014/;
      }

      listen 443 ssl; # managed by Certbot
      ssl_certificate /etc/letsencrypt/live/beta.squidspirit.com/fullchain.pem; # managed by Certbot
      ssl_certificate_key /etc/letsencrypt/live/beta.squidspirit.com/privkey.pem; # managed by Certbot
      include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
      ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
  }

  server {
      if ($host = beta.squidspirit.com) {
          return 301 https://$host$request_uri;
      } # managed by Certbot

      server_name beta.squidspirit.com;
      listen 80;
      return 404; # managed by Certbot
  }
  ```

- Podman kube configuration:

  ```yaml
    apiVersion: v1
  kind: Secret
  metadata:
    name: beta-blog-secret
  data:
    DATABASE_PASSWORD: {{BASE64_PASSWORD}}

  ---

  apiVersion: v1
  kind: Pod
  metadata:
    name: beta-blog
  spec:
    containers:
      - name: postgres
        image: docker.io/library/postgres:17-alpine
        imagePullPolicy: always
        env:
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                name: beta-blog-secret
                key: DATABASE_PASSWORD
        volumeMounts:
          - name: beta-blog-postgres
            mountPath: /var/lib/postgresql/data
      - name: backend
        image: registry.squidspirit.com/squid/beta-blog-backend:latest
        imagePullPolicy: always
        env:
          - name: DATABASE_PASSWORD
            valueFrom:
              secretKeyRef:
                name: beta-blog-secret
                key: DATABASE_PASSWORD
        volumeMounts:
          - name: beta-blog-localtime
            mountPath: /etc/localtime
            readonly: true
        ports:
          - hostPort: 10014
            hostIP: 127.0.0.1
            containerPort: 8080
      - name: frontend
        image: registry.squidspirit.com/squid/beta-blog-frontend:latest
        imagePullPolicy: always
        env:
          - name: PUBLIC_API_BASE_URL
            value: https://beta.squidspirit.com/api/
        volumeMounts:
          - name: beta-blog-localtime
            mountPath: /etc/localtime
            readonly: true
        ports:
          - hostPort: 10013
            hostIP: 127.0.0.1
            containerPort: 3000
    volumes:
      - name: beta-blog-localtime
        hostPath:
          path: /etc/localtime
      - name: beta-blog-postgres
        persistentVolumeClaim:
          claimName: beta-blog-postgres
  ```

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

Resolves #65

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #66
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-24 02:23:44 +08:00
c2462fe537 BLOG-44 Post overall page (#64)
All checks were successful
Frontend CI / build (push) Successful in 1m6s
### Description

- Change the format of color response

  ```json
  {
    "red": 0,
    "green": 255,
    "blue": 128,
    "alpha": 255
  }
  ```

- The relationship between the label's background color and its highlight color is calculated. The method involves first converting the RGB color value to HSL, then decreasing the L (lightness) component, and finally converting it back to RGB.

### Package Changes

```json
{
  "zod": "^4.0.5"
}
```

### Screenshots

|Desktop|Mobile|
|-|-|
|![image.png](/attachments/851450c4-0975-4b66-9bf7-606d0114c03e)|![image.png](/attachments/f263d65c-89e9-4439-8d50-ae92ae9482ac)|

### Reference

Resolves #44

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #64
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-24 00:32:20 +08:00
f66f4ecc79 BLOG-62 Custom not found page (#63)
All checks were successful
Frontend CI / build (push) Successful in 1m0s
### Description

As the title.

### Package Changes

_No response_

### Screenshots

![image.png](/attachments/536ca4c6-1043-46bb-b1f0-1614f8501f9f)

### Reference

Resolves #62

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #63
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-23 05:49:46 +08:00
3f02eaa568 BLOG-58 Rewrite frontend with svelte kit (#61)
All checks were successful
Frontend CI / build (push) Successful in 1m1s
Reviewed-on: #61
2025-07-23 05:34:25 +08:00
06c66e1a18 BLOG-58 fix: eslint error
All checks were successful
Frontend CI / build (push) Successful in 1m3s
PR Title Check / pr-title-check (pull_request) Successful in 16s
2025-07-23 05:32:35 +08:00
f195b9c108 BLOG-58 refactor: run format
Some checks failed
Frontend CI / build (push) Failing after 1m3s
PR Title Check / pr-title-check (pull_request) Successful in 13s
2025-07-23 05:27:46 +08:00
cefdc94e03 BLOG-58 fix: workflow node version
Some checks failed
PR Title Check / pr-title-check (pull_request) Successful in 17s
Frontend CI / build (push) Failing after 53s
2025-07-23 05:23:29 +08:00
eb4b2f4d6a BLOG-58 refactor: remove nextjs code
Some checks failed
PR Title Check / pr-title-check (pull_request) Successful in 13s
Frontend CI / build (push) Failing after 44s
2025-07-23 05:19:36 +08:00
b0215d167d BLOG-58 feat: add Dockerfile and configure SvelteKit with Node adapter
Some checks failed
Frontend CI / build (push) Has been cancelled
2025-07-23 05:18:08 +08:00
93389813f8 BLOG-58 docs: update frontend framework from Next.js to SvelteKit in README
All checks were successful
Frontend CI / build (push) Successful in 1m33s
2025-07-23 04:55:27 +08:00
7126818745 BLOG-58 fix: time display logic in TerminalLastLine component
All checks were successful
Frontend CI / build (push) Successful in 1m33s
2025-07-23 04:53:20 +08:00
ecb8384c22 BLOG-58 feat: add app versioning support and update layout to include version meta tag
All checks were successful
Frontend CI / build (push) Successful in 1m32s
2025-07-23 04:49:08 +08:00
96a0017f94 BLOG-58 feat: add Motto and MottoAnimatedMark components, update Terminal and page structure
All checks were successful
Frontend CI / build (push) Successful in 1m29s
2025-07-23 04:30:26 +08:00
2a7d0f9878 BLOG-58 feat: implement terminal UI components, refactor Navbar, and update styles
All checks were successful
Frontend CI / build (push) Successful in 1m31s
2025-07-23 04:20:53 +08:00
98802dc862 BLOG-58 feat: add FirstView and SelfTags components, refactor Footer, and update main page structure
All checks were successful
Frontend CI / build (push) Successful in 1m32s
2025-07-23 03:26:55 +08:00
27c74312ad BLOG-58 feat: refactor project structure, update package details, and add Font Awesome icons
All checks were successful
Frontend CI / build (push) Successful in 1m31s
2025-07-23 02:54:46 +08:00
0fd2da1ce6 BLOG-58 feat: implement Navbar and Action components, enhance CSS with Tailwind utilities, and update font imports
All checks were successful
Frontend CI / build (push) Successful in 1m43s
2025-07-23 02:30:04 +08:00
9ce4c11032 BLOG-58 feat: add custom fonts, update HTML structure, and include SVG icons
All checks were successful
Frontend CI / build (push) Successful in 1m36s
- Introduced 'HackNerdMono' font and set default body font to 'Noto Sans TC'.
- Updated HTML to include light and dark mode icons, viewport settings, and Google Fonts.
- Added logo SVGs for light and dark themes.
- Created a robots.txt file for web crawlers.
- Removed unused favicon.svg file.
2025-07-23 01:40:04 +08:00
1e00d8388f BLOG-58 init: svelte project 2025-07-23 01:19:55 +08:00
0726b11fe2 BLOG-59 Enhance deployment workflow and backend server configuration (#60)
All checks were successful
Frontend CI / build (push) Successful in 1m37s
### Description

- Updated deployment.yaml to specify separate build and push steps for frontend and backend.
- Added Dockerfile for backend service to define build process.
- Modified main.rs to bind the server to all network interfaces (0.0.0.0) instead of localhost.

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

Resolves #59

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #60
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-07-23 00:59:18 +08:00
d74107a0f9 BLOG-56 Align clean architecture (#57)
All checks were successful
Frontend CI / build (push) Successful in 1m53s
### Description

- As the description in the issue

  > - ~~Use case should be stateless~~
  >   > The value unwrapped from `web::Data` must be `Arc` type
  > - Initializing shouldn't be done in Container
  > - Rename the functions as xxx_handler in routes

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

Resolves #56

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Co-authored-by: Yu Squire[ Yu, Tsung-Ying ] <squire.yu@linecorp.com>
Reviewed-on: #57
2025-07-22 23:35:54 +08:00
c39a800b6b BLOG-43 Post related api endpoints (#55)
All checks were successful
Frontend CI / build (push) Successful in 2m18s
### Description

- `GET` `/post_info`

  Get all the info of the posts.

  - `200` Without any post

    ```json
    []
    ```

  - `200` With posts

    ```json
    [
        {
            "description": "This is the first post.",
            "id": 1,
            "labels": [
                {
                    "color": "#FF666666",
                    "id": 2,
                    "name": "Rust"
                }
            ],
            "preview_image_url": "https://squidspirit.com/icon/logo-light.svg",
            "published_time": null,
            "title": "The First Post"
        }
    ]
    ```

- `GET` `/post/{id}`

  Get the full post content with the given `id`

  - `200` With result

    ```json
    {
        "content": "Hello! I'm Squid!!",
        "id": 1,
        "info": {
            "description": "This is the first post.",
            "id": 1,
            "labels": [
                {
                    "color": "#FF666666",
                    "id": 2,
                    "name": "Rust"
                }
            ],
            "preview_image_url": "https://squidspirit.com/icon/logo-light.svg",
            "published_time": null,
            "title": "The First Post"
        }
    }
    ```

  - `404` There is no post with the `id`

### Package Changes

```toml
[workspace.package]
version = "0.1.1"
edition = "2024"

[workspace.dependencies]
actix-web = "4.10.2"
async-trait = "0.1.88"
chrono = "0.4.41"
dotenv = "0.15.0"
env_logger = "0.11.8"
futures = "0.3.31"
log = "0.4.27"
serde = { version = "1.0.219", features = ["derive"] }
sqlx = { version = "0.8.5", features = [
    "chrono",
    "macros",
    "postgres",
    "runtime-tokio-rustls",
] }
tokio = { version = "1.45.0", features = ["full"] }
```

### Screenshots

_No response_

### Reference

Resolves #43

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #55
Reviewed-by: zoe <zoe@noreply.localhost>
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-06-07 21:26:10 +08:00
8d33f2bae3 NO-ISSUE Merged from release/0.1 (#52)
All checks were successful
Frontend CI / build (push) Successful in 1m30s
Reviewed-on: #52
2025-02-01 13:34:52 +08:00
0e022012fe Merge branch 'main' of git.squidspirit.com:squid/blog into release/0.1
All checks were successful
PR Title Check / pr-title-check (pull_request) Successful in 13s
Frontend CI / build (push) Successful in 1m25s
2025-02-01 13:32:08 +08:00
c5b1f0703e BLOG-53 Update license and readme (#54)
All checks were successful
Frontend CI / build (push) Successful in 1m27s
### Description

Update license so that anyone should remove my personal information before deployment.

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

Resolves #53

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #54
Reviewed-by: zoe <zoe@noreply.localhost>
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-02-01 13:29:19 +08:00
93f1bee0ae NO-ISSUE Upgrade version to 0.1.1 (#42)
All checks were successful
Frontend CI / build (push) Successful in 1m26s
Deployment / frontend-deployment (release) Successful in 2m3s
PR Title Check / pr-title-check (pull_request) Successful in 13s
### Description

As the title.

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

_No issue_

### Checklist

- [x] A milestone is set
- [ ] The related issuse has been linked to this branch

Reviewed-on: #42
Reviewed-by: zoe <zoe@noreply.localhost>
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
v0.1.1
2025-01-28 13:30:27 +08:00
f8cf40a3dc BLOG-36 Fix workflow buildx failed to push (#38)
All checks were successful
Frontend CI / build (push) Successful in 1m34s
### Description

- As the title.

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

- Resolves #36
- Solution: https://stackoverflow.com/questions/75131872/error-failed-to-solve-failed-commit-on-ref-unexpected-status-400-bad-reques
- Docker document: https://docs.docker.com/build/ci/github-actions/attestations/#max-level-provenance
  > Note that adding attestations to an image means you must push the image to a registry directly, as opposed to loading the image to the local image store of the runner. This is because the local image store doesn't support loading images with attestations.

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #38
Reviewed-by: zoe <zoe@noreply.localhost>
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-01-28 13:23:46 +08:00
f0385a49a2 BLOG-34 Fix deployment workflow syntax error (#35)
Some checks failed
Frontend CI / build (push) Successful in 1m27s
Deployment / frontend-deployment (release) Failing after 3m6s
### Description

As the title.

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

- Resolves #34
- [GitHub Action - Docker Build And Push](https://github.com/marketplace/actions/build-and-push-docker-images#customizing)

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #35
Reviewed-by: zoe <zoe@noreply.localhost>
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
v0.1.0
2025-01-27 19:35:54 +08:00
35af8fd090 BLOG-9 Automatical deployment (#33)
All checks were successful
Frontend CI / build (push) Successful in 1m27s
### Description

- Create a Dockerfile to build the docker image.
- Set up the workflow to run deployment, which is to build and upload image to remote registry.
- Add a head meta html tag to show the version.

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

Resolves #9

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #33
Reviewed-by: zoe <zoe@noreply.localhost>
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-01-25 00:03:55 +08:00
c4535ce399 BLOG-11 Custom favicon and logo (#32)
All checks were successful
Frontend CI / build (push) Successful in 1m34s
### Description

- Design and apply a custom icon to favicon and navbar logo.
- For the favicon, it can be changed by the browser theme (dark or light.)

### Package Changes

_No response_

### Screenshots

| Desktop | Mobile |
| --- | --- |
| ![image.png](/attachments/43c0a475-6bff-4248-afca-1448c6c44b16) | ![image.png](/attachments/847fd38e-3e1e-450f-949a-91ee7fd17581) |

### Reference

Resolves #11

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #32
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-01-24 01:35:19 +08:00
Zoe
2cd16fe9a2 BLOG-27 Add the different size shadows of the home page terminal (#31)
All checks were successful
Frontend CI / build (push) Successful in 1m21s
### Description

Add the shadow(moblie: shadow-lg & desktop: shadow-xl) of the home page terminal

### Package Changes

_No response_

### Screenshots

| Moblie | Desktop |
| --- | --- |
| <img src="/attachments/fd95d222-0b57-4d99-aaec-68c78b9cf9e7" width="400" />  | ![image.png](/attachments/b81c0868-901e-4596-a31a-0172ee368bf1) |

### Reference

Resolves #27

### Checklist

- [x] A milestone is set
- [x] The related issuse has been linked to this branch

Reviewed-on: #31
Reviewed-by: squid <squid@squidspirit.com>
Co-authored-by: Zoe <7711zoe@gmail.com>
Co-committed-by: Zoe <7711zoe@gmail.com>
2025-01-21 23:21:17 +08:00
fd3ba3bfb8 NO-ISSUE Create title check workflow (#30)
All checks were successful
Frontend CI / build (push) Successful in 1m20s
### Description

- The validation regex is `^(BLOG-[0-9]+|NO-ISSUE) [A-Z].+$`

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

_No issue_

### Checklist

- [x] The title is meet the format `'BLOG-XXX Title title title'`
- [ ] A milestone is set
- [ ] The related issuse has been linked to this branch

Reviewed-on: #30
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-01-21 08:21:51 +08:00
15d1bcb823 NO-ISSUE Fix PR template check list option content (#29)
All checks were successful
Frontend CI / build (push) Successful in 1m20s
### Description

- As the title

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

_No issue_

### Checklist

- [x] The title is meet the format `BLOG-XXX: Title title title`
- [ ] A milestone is set
- [ ] The related issuse has been linked to this branch

Reviewed-on: #29
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-01-20 23:15:08 +08:00
05fb268c3f NO-ISSUE Add some checklist option (#28)
All checks were successful
Frontend CI / build (push) Successful in 1m24s
### Description

- As the title

### Package Changes

_No response_

### Screenshots

_No response_

### Reference

_No issue_

### Checklist

- [ ] A milestone is set

Reviewed-on: #28
Co-authored-by: SquidSpirit <squid@squidspirit.com>
Co-committed-by: SquidSpirit <squid@squidspirit.com>
2025-01-20 21:08:50 +08:00