-
Notifications
You must be signed in to change notification settings - Fork 0
193 lines (164 loc) · 7.16 KB
/
package.yml
File metadata and controls
193 lines (164 loc) · 7.16 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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
name: Package for Chrome Web Store
on:
# バージョンタグがプッシュされた時にトリガー (例: v1.0.0, v0.1.0)
push:
tags:
- 'v*'
# 手動実行を可能にする
workflow_dispatch:
inputs:
version:
description: 'Version to package (optional, uses manifest.json if empty)'
required: false
type: string
jobs:
package:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Get version from tag or input
id: version
run: |
if [[ "${{ github.event_name }}" == "push" && "${{ github.ref_type }}" == "tag" ]]; then
# タグから実行された場合
VERSION=${GITHUB_REF#refs/tags/v}
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "source=tag" >> $GITHUB_OUTPUT
elif [[ -n "${{ github.event.inputs.version }}" ]]; then
# 手動実行で版数が指定された場合
VERSION="${{ github.event.inputs.version }}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "source=manual" >> $GITHUB_OUTPUT
else
# manifest.jsonから取得
VERSION=$(jq -r '.version' manifest.json)
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "source=manifest" >> $GITHUB_OUTPUT
fi
echo "Version: $VERSION (source: $(echo ${{ github.output.source }} || echo 'manifest'))"
- name: Validate manifest.json
run: |
# manifest.jsonの基本検証
if ! jq empty manifest.json; then
echo "Error: manifest.json is not valid JSON"
exit 1
fi
# 必須フィールドの確認
NAME=$(jq -r '.name' manifest.json)
MANIFEST_VERSION=$(jq -r '.version' manifest.json)
if [[ "$NAME" == "null" || -z "$NAME" ]]; then
echo "Error: name field is missing in manifest.json"
exit 1
fi
if [[ "$MANIFEST_VERSION" == "null" || -z "$MANIFEST_VERSION" ]]; then
echo "Error: version field is missing in manifest.json"
exit 1
fi
echo "Manifest validation passed: $NAME v$MANIFEST_VERSION"
- name: Create package directory
run: |
mkdir -p package
- name: Copy extension files
run: |
# Chrome拡張機能に必要なファイルのみをコピー
cp manifest.json package/
cp background.js package/
cp popup.html package/
cp popup.js package/
cp popup.css package/
cp options.html package/
cp options.js package/
cp options.css package/
cp shared.js package/
cp -r icons package/
# ファイル一覧を表示
echo "Packaged files:"
find package -type f | sort
- name: Remove development files from package
run: |
# 開発用ファイルが紛れ込んでいないか確認して削除
find package -name "*.tmp" -delete
find package -name "*.log" -delete
find package -name ".DS_Store" -delete
- name: Validate package structure
run: |
# パッケージの必須ファイル確認
REQUIRED_FILES=("manifest.json" "background.js" "popup.html" "popup.js" "popup.css" "options.html" "options.js" "options.css" "shared.js")
for file in "${REQUIRED_FILES[@]}"; do
if [[ ! -f "package/$file" ]]; then
echo "Error: Required file $file is missing from package"
exit 1
fi
done
# アイコンディレクトリの確認
if [[ ! -d "package/icons" ]]; then
echo "Error: icons directory is missing from package"
exit 1
fi
echo "Package structure validation passed"
- name: Create Chrome Web Store package
run: |
VERSION="${{ steps.version.outputs.version }}"
PACKAGE_NAME="jumpmark-dock-v${VERSION}.zip"
# パッケージディレクトリの内容を確認
echo "=================================="
echo "Package Directory Contents:"
echo "=================================="
ls -la package/
echo ""
# zipファイルを作成(絶対パスで指定)
FULL_PACKAGE_PATH="$(pwd)/$PACKAGE_NAME"
cd package
echo "Creating zip file: $FULL_PACKAGE_PATH"
echo "From directory: $(pwd)"
echo "Files to include:"
ls -la
echo ""
zip -r "$FULL_PACKAGE_PATH" . -x "*.DS_Store"
cd ..
# パッケージ情報を表示
echo "=================================="
echo "Chrome Web Store Package Created"
echo "=================================="
echo "Package Name: $PACKAGE_NAME"
echo "Version: $VERSION"
echo "Package Size: $(du -h "$PACKAGE_NAME" | cut -f1)"
echo "Package Contents:"
unzip -l "$PACKAGE_NAME"
echo "=================================="
# manifest.jsonがルートにあることを確認
echo "Checking for manifest.json at root level:"
if unzip -l "$PACKAGE_NAME" | grep -E "^\s*[0-9]+.*manifest\.json$"; then
echo "✓ manifest.json found at root level"
else
echo "✗ manifest.json not found at root level"
echo "Full zip listing:"
unzip -l "$PACKAGE_NAME"
exit 1
fi
- name: Upload package as artifact
uses: actions/upload-artifact@v4
with:
name: jumpmark-dock-v${{ steps.version.outputs.version }}-chrome-store-package
path: jumpmark-dock-v${{ steps.version.outputs.version }}.zip
retention-days: 90
- name: Create release (for tag triggers)
if: github.event_name == 'push' && github.ref_type == 'tag'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
name: Jumpmark Dock v${{ steps.version.outputs.version }}
body: |
## Jumpmark Dock v${{ steps.version.outputs.version }}
Chrome Web Store用パッケージが自動生成されました。
### インストール方法
1. 下記のzipファイルをダウンロード
2. Chrome拡張機能管理画面で「パッケージ化されていない拡張機能を読み込む」
3. 解凍したフォルダを選択
### 変更点
詳細は[CHANGELOG](./CHANGELOG.md)をご確認ください。
draft: false
prerelease: ${{ contains(steps.version.outputs.version, 'alpha') || contains(steps.version.outputs.version, 'beta') || contains(steps.version.outputs.version, 'rc') }}
files: |
jumpmark-dock-v${{ steps.version.outputs.version }}.zip