@portosaur/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -0
- package/bin/porto.mjs +71 -0
- package/package.json +36 -0
- package/src/commands/build.mjs +85 -0
- package/src/commands/dev.mjs +61 -0
- package/src/commands/init.mjs +523 -0
- package/src/commands/initCi.mjs +227 -0
- package/src/commands/providers.mjs +170 -0
- package/src/commands/schema.mjs +208 -0
- package/src/commands/serve.mjs +29 -0
- package/src/index.d.ts +49 -0
- package/src/index.mjs +8 -0
- package/src/templates/README.md +58 -0
- package/src/templates/blog/authors.yml +4 -0
- package/src/templates/blog/welcome.md +11 -0
- package/src/templates/config.yml +150 -0
- package/src/templates/gitignore +9 -0
- package/src/templates/notes/index.mdx +9 -0
- package/src/templates/notes/welcome.mdx +9 -0
- package/src/templates/package.json +14 -0
- package/src/templates/registry.yml +107 -0
- package/src/templates/static/.nojekyll +0 -0
- package/src/templates/static/README.md +1 -0
- package/src/templates/workflows/codeberg/.forgejo/workflows/deploy.yml +39 -0
- package/src/templates/workflows/github/.github/workflows/deploy.yml +55 -0
- package/src/templates/workflows/gitlab/.gitlab-ci.yml +13 -0
- package/src/templates/workflows/netlify/netlify.toml +6 -0
- package/src/templates/workflows/surge/codeberg/.forgejo/workflows/deploy.yml +23 -0
- package/src/templates/workflows/surge/github/.github/workflows/deploy.yml +23 -0
- package/src/templates/workflows/surge/gitlab/.gitlab-ci.yml +16 -0
- package/src/templates/workflows/surge/sourcehut/.build.yml +26 -0
- package/src/templates/workflows/woodpecker/.woodpecker/deploy.yml +21 -0
- package/src/utils/git.mjs +52 -0
- package/src/utils/index.mjs +7 -0
- package/src/utils/interaction.mjs +24 -0
- package/src/utils/packageManager.mjs +85 -0
- package/src/utils/paths.mjs +33 -0
- package/src/utils/platforms.mjs +130 -0
- package/src/utils/projectName.mjs +20 -0
- package/src/utils/runner.mjs +192 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# {{projectName}}
|
|
2
|
+
|
|
3
|
+
Welcome to my digital personality and portfolio! 👋
|
|
4
|
+
|
|
5
|
+
This is my personal space on the web to express myself, share my thoughts, and showcase my work to the world.
|
|
6
|
+
|
|
7
|
+
## About This Repository
|
|
8
|
+
|
|
9
|
+
This repository contains the source code for my personal website, built with [Portosaur]({{portoHome}}).
|
|
10
|
+
|
|
11
|
+
It serves as my:
|
|
12
|
+
|
|
13
|
+
- **Portfolio**: Highlighting my projects, skills, and professional experience.
|
|
14
|
+
- **Digital Notebook**: A collection of notes, snippets, and ongoing learnings.
|
|
15
|
+
- **Blog**: Long-form articles and deep dives.
|
|
16
|
+
|
|
17
|
+
## Local Development
|
|
18
|
+
|
|
19
|
+
If you'd like to explore the code or run this site locally:
|
|
20
|
+
|
|
21
|
+
1. **Clone the repository:**
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git clone https://github.com/<MyUserName>/{{projectName}}.git
|
|
25
|
+
cd {{projectName}}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
2. **Install dependencies:**
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
bun install
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
_(npm, yarn, or pnpm work too!)_
|
|
35
|
+
|
|
36
|
+
3. **Start the development server:**
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
bun run dev
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
4. **Build for production:**
|
|
43
|
+
```bash
|
|
44
|
+
bun run build
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Structure
|
|
48
|
+
|
|
49
|
+
- `config.js` — The configuration for my site.
|
|
50
|
+
- `notes/` — Markdown/MDX files for my digital Notebook.
|
|
51
|
+
- `blog/` — Articles and blog posts.
|
|
52
|
+
- `static/` — Static assets like images and my resume.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
<br/>
|
|
57
|
+
|
|
58
|
+
_Powered by [Portosaur]({{portoHome}})_
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://soymadip.github.io/portosaur/conf-schema.json
|
|
2
|
+
# Portosaur Project Configuration
|
|
3
|
+
# This file is filled with example values
|
|
4
|
+
# Check Config Docs: https://soymadip.is-a.dev/portosaur/guide/config
|
|
5
|
+
|
|
6
|
+
# Site Metadata & SEO
|
|
7
|
+
site:
|
|
8
|
+
title: "{{fullName}}"
|
|
9
|
+
tagline: "Short description about you, your passion, your goals etc."
|
|
10
|
+
|
|
11
|
+
favicon: "{{portoRoot}}/src/assets/img/svg/icon.svg"
|
|
12
|
+
social_card: "{{portoRoot}}/src/assets/img/social-card.jpeg"
|
|
13
|
+
|
|
14
|
+
# Auto set if deploying in Github/GitLab Pages
|
|
15
|
+
url: "auto"
|
|
16
|
+
path: "auto"
|
|
17
|
+
|
|
18
|
+
# UI/UX & Theme Behavior
|
|
19
|
+
theme:
|
|
20
|
+
appearance:
|
|
21
|
+
dark_mode: true
|
|
22
|
+
disable_switch: false
|
|
23
|
+
|
|
24
|
+
navigation:
|
|
25
|
+
collapsable_sidebar: true
|
|
26
|
+
hide_navbar_on_scroll: true
|
|
27
|
+
|
|
28
|
+
# Page Content & Sections
|
|
29
|
+
home_page:
|
|
30
|
+
hero:
|
|
31
|
+
title: null # Fallback to {{site.title}}
|
|
32
|
+
profession: "Your Profession"
|
|
33
|
+
desc: null # Fallback to {{site.tagline}}
|
|
34
|
+
profile_pic: null # Fallback to {{site.favicon}}
|
|
35
|
+
|
|
36
|
+
social:
|
|
37
|
+
- name: "LinkedIn"
|
|
38
|
+
url: "https://www.linked.com/in/{{userName}}"
|
|
39
|
+
|
|
40
|
+
- name: "GitHub"
|
|
41
|
+
icon: "githubalt"
|
|
42
|
+
url: "https://github.com/{{userName}}"
|
|
43
|
+
|
|
44
|
+
- name: "Telegram"
|
|
45
|
+
url: "https://t.me/{{userName}}"
|
|
46
|
+
|
|
47
|
+
about:
|
|
48
|
+
enable: true
|
|
49
|
+
image: null # Fallback to {{home_page.hero.profile_pic}}
|
|
50
|
+
bio:
|
|
51
|
+
- "I'm a {{home_page.hero.profession}} who loves turning ideas into reality."
|
|
52
|
+
- "With a background in computer science and a passion for design, I bridge the gap between aesthetics and functionality."
|
|
53
|
+
- "Also I am interested in Your interest1, interest2 etc etc......"
|
|
54
|
+
skills:
|
|
55
|
+
- "skill 1"
|
|
56
|
+
- "skill 2"
|
|
57
|
+
- "skill 3"
|
|
58
|
+
resume: "{{portoRoot}}/src/assets/sample-resume.pdf"
|
|
59
|
+
|
|
60
|
+
project_shelf:
|
|
61
|
+
enable: true
|
|
62
|
+
projects:
|
|
63
|
+
- title: "Your Awesome Project"
|
|
64
|
+
icon: null
|
|
65
|
+
state: "active" # options: active, completed, maintenance, paused, archived, planned
|
|
66
|
+
desc: "A brief description of what this project does and the tech used."
|
|
67
|
+
tags: ["tag1", "tag2", "tag3", "tag4", "tag5", "tag6", "tag7"]
|
|
68
|
+
website: "https://example.com"
|
|
69
|
+
repo: "https://github.com/yourname/project1"
|
|
70
|
+
|
|
71
|
+
- title: "Your Awesome Project 2"
|
|
72
|
+
icon: "{{portoRoot}}/src/assets/img/svg/icon.svg"
|
|
73
|
+
bg: "#5c8f2d"
|
|
74
|
+
tags: ["tag1", "tag2", "tag3", "tag4", "tag5", "tag6", "tag7"]
|
|
75
|
+
featured: true
|
|
76
|
+
state: "completed"
|
|
77
|
+
desc: "A brief description of what this project does and the tech used."
|
|
78
|
+
website: "https://example.com"
|
|
79
|
+
repo: "https://github.com/yourname/project2"
|
|
80
|
+
demo: "https://example.com/demo"
|
|
81
|
+
|
|
82
|
+
- title: "Your Awesome Project 3"
|
|
83
|
+
icon: "https://github.com/soymadip/KireiSakura-Kit/blob/main/Assets/icon.png?raw=true"
|
|
84
|
+
bg: "#aa47be"
|
|
85
|
+
state: "completed"
|
|
86
|
+
desc: "A brief description of what this project does and the tech used."
|
|
87
|
+
website: "https://example.com"
|
|
88
|
+
repo: "https://github.com/yourname/project2"
|
|
89
|
+
demo: "https://example.com/demo"
|
|
90
|
+
|
|
91
|
+
experience:
|
|
92
|
+
enable: false
|
|
93
|
+
list:
|
|
94
|
+
- company: "Tech Solutions Inc."
|
|
95
|
+
role: "Senior Developer"
|
|
96
|
+
duration: "2022 - Present"
|
|
97
|
+
desc: "Leading the frontend team in building a high-performance dashboard."
|
|
98
|
+
|
|
99
|
+
# Reach me out section
|
|
100
|
+
social:
|
|
101
|
+
enable: true
|
|
102
|
+
links:
|
|
103
|
+
- name: "Email"
|
|
104
|
+
desc: "Send me an email"
|
|
105
|
+
url: "mailto:yourname@example.com"
|
|
106
|
+
|
|
107
|
+
- name: "LinkedIn"
|
|
108
|
+
desc: "Connect on LinkedIn"
|
|
109
|
+
url: "https://linkedin.com/in/{{userName}}"
|
|
110
|
+
|
|
111
|
+
- name: "Telegram"
|
|
112
|
+
desc: "Reach me on Telegram"
|
|
113
|
+
url: "https://t.me/{{userName}}"
|
|
114
|
+
|
|
115
|
+
- name: "Discord"
|
|
116
|
+
desc: "Become my friend"
|
|
117
|
+
url: "https://discord.com/users/yourid"
|
|
118
|
+
|
|
119
|
+
- name: "Twitter"
|
|
120
|
+
desc: "Find me on Twitter"
|
|
121
|
+
url: "https://twitter.com/{{userName}}"
|
|
122
|
+
|
|
123
|
+
- name: "GitLab"
|
|
124
|
+
desc: "View my GitLab profile"
|
|
125
|
+
url: "https://gitlab.com/{{userName}}"
|
|
126
|
+
|
|
127
|
+
- name: "Anilist"
|
|
128
|
+
desc: "If you are otaku, check out!"
|
|
129
|
+
url: "https://anilist.co/user/{{userName}}"
|
|
130
|
+
|
|
131
|
+
tasks:
|
|
132
|
+
enable: true
|
|
133
|
+
list:
|
|
134
|
+
- title: "Build the future"
|
|
135
|
+
status: "done"
|
|
136
|
+
desc: "Implementing the core framework."
|
|
137
|
+
|
|
138
|
+
# Functional Tools
|
|
139
|
+
tools:
|
|
140
|
+
link_shortener:
|
|
141
|
+
enable: false
|
|
142
|
+
deploy_path: "/l"
|
|
143
|
+
short_links:
|
|
144
|
+
"example": "https://example.com"
|
|
145
|
+
|
|
146
|
+
# Custom variables for use in your content as {{custom.key}}
|
|
147
|
+
custom:
|
|
148
|
+
twitter: "@{{userName}}"
|
|
149
|
+
github: "{{userName}}"
|
|
150
|
+
linkedin: "{{userName}}"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{projectName}}",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "$npm_execpath install && porto dev",
|
|
7
|
+
"start": "$npm_execpath install && porto start",
|
|
8
|
+
"build": "$npm_execpath install && porto build",
|
|
9
|
+
"serve": "porto serve"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@portosaur/cli": "^{{portoVer}}"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
vcs_providers:
|
|
2
|
+
github:
|
|
3
|
+
name: GitHub
|
|
4
|
+
domain: github.com
|
|
5
|
+
default_hosting: github-pages
|
|
6
|
+
url: "https://{{domain}}/{{user}}/{{projectName}}.git"
|
|
7
|
+
new_url: "https://{{domain}}/new?name={{projectName}}"
|
|
8
|
+
|
|
9
|
+
gitlab:
|
|
10
|
+
name: GitLab
|
|
11
|
+
domain: gitlab.com
|
|
12
|
+
default_hosting: gitlab-pages
|
|
13
|
+
url: "https://{{domain}}/{{user}}/{{projectName}}.git"
|
|
14
|
+
new_url: "https://{{domain}}/projects/new#blank_project"
|
|
15
|
+
|
|
16
|
+
codeberg:
|
|
17
|
+
name: Codeberg
|
|
18
|
+
domain: codeberg.org
|
|
19
|
+
default_hosting: codeberg-pages
|
|
20
|
+
url: "https://{{domain}}/{{user}}/{{projectName}}.git"
|
|
21
|
+
new_url: "https://codeberg.org/repo/create"
|
|
22
|
+
|
|
23
|
+
sourcehut:
|
|
24
|
+
name: SourceHut
|
|
25
|
+
domain: git.sr.ht
|
|
26
|
+
url: "https://{{domain}}/~{{user}}/{{projectName}}.git"
|
|
27
|
+
new_url: "https://{{domain}}/create"
|
|
28
|
+
|
|
29
|
+
# --------------------------------------------------------------------------------------
|
|
30
|
+
|
|
31
|
+
hosting_platforms:
|
|
32
|
+
github-pages:
|
|
33
|
+
name: GitHub Pages
|
|
34
|
+
domain: "github.io"
|
|
35
|
+
supported_providers: [github] # should be from "vcs_providers" list
|
|
36
|
+
template_dir: github
|
|
37
|
+
repo:
|
|
38
|
+
ideal_name: "{{user}}.github.io"
|
|
39
|
+
mismatch_msg: |-
|
|
40
|
+
For automatic GitHub Pages hosting,
|
|
41
|
+
your repository should be named '{{idealName}}' (exactly your username + .github.io)."
|
|
42
|
+
|
|
43
|
+
gitlab-pages:
|
|
44
|
+
name: GitLab Pages
|
|
45
|
+
domain: "gitlab.io"
|
|
46
|
+
supported_providers: [gitlab]
|
|
47
|
+
template_dir: gitlab
|
|
48
|
+
repo:
|
|
49
|
+
ideal_name: "{{user}}.gitlab.io"
|
|
50
|
+
mismatch_msg: |-
|
|
51
|
+
As Your project name is not '{{idealName}}',
|
|
52
|
+
Your site will be available at: https://{{user}}.{{domain}}/{{projectName}}/
|
|
53
|
+
Instead of: https://{{user}}.{{domain}}/
|
|
54
|
+
post_setup_tips:
|
|
55
|
+
- Site will be available once the CI pipeline finishes.
|
|
56
|
+
|
|
57
|
+
codeberg-pages:
|
|
58
|
+
name: Codeberg Pages (Forgejo CI)
|
|
59
|
+
domain: "codeberg.page"
|
|
60
|
+
supported_providers: [codeberg]
|
|
61
|
+
template_dir: codeberg
|
|
62
|
+
repo:
|
|
63
|
+
ideal_name: pages
|
|
64
|
+
mismatch_msg: |-
|
|
65
|
+
As Your project name is not 'pages',
|
|
66
|
+
Your site will be available at: https://{{user}}.{{domain}}/{{projectName}}/
|
|
67
|
+
Instead of: https://{{user}}.{{domain}}/
|
|
68
|
+
post_setup_tips:
|
|
69
|
+
- Ensure Codeberg Actions are enabled for your repository.
|
|
70
|
+
- "Check: Settings > Actions > General > Enable Actions."
|
|
71
|
+
|
|
72
|
+
woodpecker:
|
|
73
|
+
name: Codeberg Pages (Woodpecker CI / Old)
|
|
74
|
+
domain: "codeberg.page"
|
|
75
|
+
supported_providers: [codeberg]
|
|
76
|
+
template_dir: woodpecker
|
|
77
|
+
repo:
|
|
78
|
+
ideal_name: pages
|
|
79
|
+
mismatch_msg: |-
|
|
80
|
+
As Your project name is not 'pages',
|
|
81
|
+
Your site will be available at: https://{{user}}.{{domain}}/{{projectName}}/
|
|
82
|
+
Instead of: https://{{user}}.{{domain}}/
|
|
83
|
+
post_setup_tips:
|
|
84
|
+
- Ensure Woodpecker is enabled for your repository.
|
|
85
|
+
- "Go to https://ci.codeberg.org to enable."
|
|
86
|
+
|
|
87
|
+
surge:
|
|
88
|
+
name: Surge.sh
|
|
89
|
+
supported_providers: all
|
|
90
|
+
template_dir:
|
|
91
|
+
github: surge/github
|
|
92
|
+
gitlab: surge/gitlab
|
|
93
|
+
sourcehut: surge/sourcehut
|
|
94
|
+
codeberg: surge/codeberg
|
|
95
|
+
repo:
|
|
96
|
+
ideal_name: "{{user}}.surge.sh"
|
|
97
|
+
post_setup_tips:
|
|
98
|
+
- "You must set SURGE_LOGIN and SURGE_TOKEN in your CI/CD Secrets!"
|
|
99
|
+
- "Your site will be deployed to https://{{user}}.surge.sh"
|
|
100
|
+
|
|
101
|
+
netlify:
|
|
102
|
+
name: Netlify
|
|
103
|
+
supported_providers: all
|
|
104
|
+
template_dir: netlify
|
|
105
|
+
post_setup_tips:
|
|
106
|
+
- Connect your repository in the Netlify dashboard to deploy automatically.
|
|
107
|
+
- Then your site will be up once CI finishes.
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Place your static assets (images, files, CNAME) in this directory.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: Deploy Portfolio
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build-and-deploy:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- name: Checkout
|
|
13
|
+
uses: actions/checkout@v6
|
|
14
|
+
|
|
15
|
+
- name: Setup Bun
|
|
16
|
+
uses: oven-sh/setup-bun@v2
|
|
17
|
+
with:
|
|
18
|
+
bun-version: latest
|
|
19
|
+
|
|
20
|
+
- name: Cache Bun dependencies
|
|
21
|
+
uses: actions/cache@v5
|
|
22
|
+
with:
|
|
23
|
+
path: ~/.bun/install/cache
|
|
24
|
+
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }}
|
|
25
|
+
restore-keys: |
|
|
26
|
+
${{ runner.os }}-bun-
|
|
27
|
+
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
run: bun install
|
|
30
|
+
|
|
31
|
+
- name: Build site
|
|
32
|
+
run: bunx portosaur build
|
|
33
|
+
|
|
34
|
+
- name: Deploy to Codeberg Pages
|
|
35
|
+
uses: https://codeberg.org/git-pages/action@v2
|
|
36
|
+
with:
|
|
37
|
+
site: "https://${{ forge.repository_owner }}.codeberg.page/${{ forge.repository_name }}/"
|
|
38
|
+
token: ${{ forge.token }}
|
|
39
|
+
source: build/
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
name: Deploy to GitHub Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
paths-ignore:
|
|
8
|
+
- "README.md"
|
|
9
|
+
- ".gitignore"
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
pages: write
|
|
14
|
+
id-token: write
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
deploy:
|
|
18
|
+
name: Deploy
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout
|
|
22
|
+
uses: actions/checkout@v6
|
|
23
|
+
with:
|
|
24
|
+
fetch-depth: 0
|
|
25
|
+
|
|
26
|
+
- name: Setup Bun
|
|
27
|
+
uses: oven-sh/setup-bun@v2
|
|
28
|
+
with:
|
|
29
|
+
bun-version: latest
|
|
30
|
+
|
|
31
|
+
- name: Setup Pages
|
|
32
|
+
uses: actions/configure-pages@v6
|
|
33
|
+
|
|
34
|
+
- name: Cache Bun dependencies
|
|
35
|
+
uses: actions/cache@v5
|
|
36
|
+
with:
|
|
37
|
+
path: ~/.bun/install/cache
|
|
38
|
+
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }}
|
|
39
|
+
restore-keys: |
|
|
40
|
+
${{ runner.os }}-bun-
|
|
41
|
+
|
|
42
|
+
- name: Install dependencies
|
|
43
|
+
run: bun install --frozen-lockfile
|
|
44
|
+
|
|
45
|
+
- name: Build site
|
|
46
|
+
run: bun run build
|
|
47
|
+
|
|
48
|
+
- name: Upload artifact
|
|
49
|
+
uses: actions/upload-pages-artifact@v5
|
|
50
|
+
with:
|
|
51
|
+
path: build
|
|
52
|
+
|
|
53
|
+
- name: Deploy to GitHub Pages
|
|
54
|
+
id: deployment
|
|
55
|
+
uses: actions/deploy-pages@v5
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Deploy to Surge
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
deploy:
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
steps:
|
|
10
|
+
- uses: actions/checkout@v6
|
|
11
|
+
- uses: oven-sh/setup-bun@v2
|
|
12
|
+
|
|
13
|
+
- name: Install dependencies
|
|
14
|
+
run: bun install
|
|
15
|
+
|
|
16
|
+
- name: Build Docusaurus
|
|
17
|
+
run: bun run build
|
|
18
|
+
|
|
19
|
+
- name: Deploy to Surge
|
|
20
|
+
run: bunx surge ./build --domain {{projectName}}.surge.sh
|
|
21
|
+
env:
|
|
22
|
+
SURGE_LOGIN: ${{ secrets.SURGE_LOGIN }}
|
|
23
|
+
SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Deploy to Surge
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
deploy:
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
steps:
|
|
10
|
+
- uses: actions/checkout@v6
|
|
11
|
+
- uses: oven-sh/setup-bun@v2
|
|
12
|
+
|
|
13
|
+
- name: Install dependencies
|
|
14
|
+
run: bun install
|
|
15
|
+
|
|
16
|
+
- name: Build Docusaurus
|
|
17
|
+
run: bun run build
|
|
18
|
+
|
|
19
|
+
- name: Deploy to Surge
|
|
20
|
+
run: bunx surge ./build --domain {{projectName}}.surge.sh
|
|
21
|
+
env:
|
|
22
|
+
SURGE_LOGIN: ${{ secrets.SURGE_LOGIN }}
|
|
23
|
+
SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
image: oven/bun:latest
|
|
2
|
+
|
|
3
|
+
stages:
|
|
4
|
+
- deploy
|
|
5
|
+
|
|
6
|
+
deploy:
|
|
7
|
+
stage: deploy
|
|
8
|
+
only:
|
|
9
|
+
- main
|
|
10
|
+
script:
|
|
11
|
+
- bun install
|
|
12
|
+
- bun run build
|
|
13
|
+
- bunx surge ./build --domain {{projectName}}.surge.sh
|
|
14
|
+
variables:
|
|
15
|
+
SURGE_LOGIN: $SURGE_LOGIN
|
|
16
|
+
SURGE_TOKEN: $SURGE_TOKEN
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
image: debian/latest
|
|
2
|
+
packages:
|
|
3
|
+
- curl
|
|
4
|
+
- git
|
|
5
|
+
sources:
|
|
6
|
+
- https://git.sr.ht/~{{userName}}/{{projectName}}
|
|
7
|
+
tasks:
|
|
8
|
+
- setup: |
|
|
9
|
+
curl -fsSL https://bun.sh/install | bash
|
|
10
|
+
export PATH=$HOME/.bun/bin:$PATH
|
|
11
|
+
- install: |
|
|
12
|
+
export PATH=$HOME/.bun/bin:$PATH
|
|
13
|
+
cd {{projectName}}
|
|
14
|
+
bun install
|
|
15
|
+
- build: |
|
|
16
|
+
export PATH=$HOME/.bun/bin:$PATH
|
|
17
|
+
cd {{projectName}}
|
|
18
|
+
bun run build
|
|
19
|
+
- deploy: |
|
|
20
|
+
export PATH=$HOME/.bun/bin:$PATH
|
|
21
|
+
cd {{projectName}}
|
|
22
|
+
# Note: SURGE_LOGIN and SURGE_TOKEN must be added to your SourceHut build secrets
|
|
23
|
+
bunx surge ./build --domain {{projectName}}.surge.sh
|
|
24
|
+
environment:
|
|
25
|
+
SURGE_LOGIN: ""
|
|
26
|
+
SURGE_TOKEN: ""
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
kind: pipeline
|
|
2
|
+
name: deploy
|
|
3
|
+
|
|
4
|
+
steps:
|
|
5
|
+
- name: build
|
|
6
|
+
image: oven/bun:latest
|
|
7
|
+
commands:
|
|
8
|
+
- bun install
|
|
9
|
+
- bunx portosaur build
|
|
10
|
+
|
|
11
|
+
- name: deploy
|
|
12
|
+
image: appleboy/drone-git-push
|
|
13
|
+
settings:
|
|
14
|
+
branch: pages
|
|
15
|
+
remote: git@codeberg.org:${DRONE_REPO}.git
|
|
16
|
+
force: true
|
|
17
|
+
commit: true
|
|
18
|
+
path: build
|
|
19
|
+
when:
|
|
20
|
+
event: push
|
|
21
|
+
branch: main
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Attempts to detect the VCS provider by inspecting the current git repository's remotes.
|
|
5
|
+
* Matches against the domains defined in the provided registry.
|
|
6
|
+
*
|
|
7
|
+
* @param {Object} registry - The Portosaur registry containing vcs_providers.
|
|
8
|
+
* @returns {string|null} The canonical ID of the detected provider, or null if not found.
|
|
9
|
+
*/
|
|
10
|
+
export function detectVcsProvider(registry) {
|
|
11
|
+
try {
|
|
12
|
+
const remotes = execSync("git remote -v", {
|
|
13
|
+
stdio: "pipe",
|
|
14
|
+
encoding: "utf8",
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
for (const [id, cfg] of Object.entries(registry.vcs_providers)) {
|
|
18
|
+
if (remotes.includes(cfg.domain)) {
|
|
19
|
+
return id;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
} catch {}
|
|
23
|
+
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Retrieves the current git configuration (local and global) as a key-value object.
|
|
29
|
+
*
|
|
30
|
+
* @returns {Object} A map of git configuration keys and their values.
|
|
31
|
+
*/
|
|
32
|
+
export function getGitConfig() {
|
|
33
|
+
const config = {};
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const output = execSync("git config --list", {
|
|
37
|
+
stdio: "pipe",
|
|
38
|
+
encoding: "utf8",
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const lines = output.split("\n");
|
|
42
|
+
|
|
43
|
+
for (const line of lines) {
|
|
44
|
+
const [key, ...values] = line.split("=");
|
|
45
|
+
if (key && values.length > 0) {
|
|
46
|
+
config[key] = values.join("=");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
} catch {}
|
|
50
|
+
|
|
51
|
+
return config;
|
|
52
|
+
}
|