-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.gitlab-ci.yml
More file actions
120 lines (106 loc) · 3.11 KB
/
Copy path.gitlab-ci.yml
File metadata and controls
120 lines (106 loc) · 3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
stages:
- verify
- deploy
- publish
# Global cache for Bun dependencies
cache:
key:
files:
- bun.lock
paths:
- .bun-cache/
- node_modules/
variables:
BUN_INSTALL_CACHE_DIR: .bun-cache
# Common setup for most jobs
.setup_tools:
image: oven/bun:latest
before_script:
- apt-get update && apt-get install -y git
- bun install --frozen-lockfile
# --- Stage: verify ---
lint-test:
extends: .setup_tools
stage: verify
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
script:
- git config --global user.email "ci@portosaur.org"
- git config --global user.name "Portosaur CI"
- bun run format:check
- bun run test:all
smoke-test:
extends: .setup_tools
stage: verify
rules:
- if: $CI_COMMIT_TAG =~ /^v/ && $CI_COMMIT_TAG !~ /-(beta|alpha)/
- if: $CI_PIPELINE_SOURCE == "web"
script:
- git config --global user.email "ci@portosaur.org"
- git config --global user.name "Portosaur CI"
- bun run test:smoke
# --- Stage: deploy ---
pages:
image: oven/bun:latest
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
changes:
- "docs/**/*"
- "packages/cli/src/commands/schema.*"
- "packages/core/src/index.mjs"
- "packages/core/src/generators/docusaurusConfig.mjs"
- "package.json"
- "bun.lock"
script:
- bun install --cwd docs
- bun install --cwd packages/cli
- bun run --cwd docs build
- bun run packages/cli/bin/porto.mjs schema -o docs/.vitepress/dist/user/config/schema.json
- mv docs/.vitepress/dist public
artifacts:
paths:
- public
deploy-proxy:
image: oven/bun:latest
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
changes:
- "proxy/**/*"
script:
- cd proxy
- bun install
- bunx wrangler deploy
# --- Stage: publish ---
publish-npm:
extends: .setup_tools
stage: publish
environment:
name: npm
needs: ["smoke-test"]
rules:
- if: $CI_COMMIT_TAG =~ /^v/ && $CI_COMMIT_TAG !~ /-(beta|alpha)/
script:
- |
git config --global user.email "ci@portosaur.org"
git config --global user.name "Portosaur CI"
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
for dir in packages/*; do
if [ -d "$dir" ] && [ -f "$dir/package.json" ]; then
pkg_name=$(bun -e "import pkg from './$dir/package.json' with { type: 'json' }; console.log(pkg.name)")
pkg_version=$(bun -e "import pkg from './$dir/package.json' with { type: 'json' }; console.log(pkg.version)")
echo "Checking $pkg_name@$pkg_version..."
if bunx npm view "$pkg_name@$pkg_version" > /dev/null 2>&1; then
echo "✓ $pkg_name@$pkg_version already published"
else
echo "Publishing $pkg_name@$pkg_version..."
sed -i "s/workspace:\*/^${pkg_version}/g" "$dir/package.json"
cd $dir
bunx npm publish --access public
cd ../..
git checkout "$dir/package.json"
fi
fi
done