247 lines
13 KiB
Go
247 lines
13 KiB
Go
package maker
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"gitea.loveuer.com/yizhisec/pkg3/logger"
|
|
"yizhisec.com/hsv2/forge/internal/opt"
|
|
"yizhisec.com/hsv2/forge/pkg/resource"
|
|
)
|
|
|
|
func (m *maker) AppClient(ctx context.Context, replica int) error {
|
|
const (
|
|
_config = `Version: "3"
|
|
APNs: /yizhisec/hs_nginx/data/443/oem/data.json
|
|
BackupSeafile:
|
|
Host: hs-resource-server
|
|
Port: 19980
|
|
ClientDir:
|
|
CompatibleAppFile: /yizhisec/hs_nginx/resource/compatible_apps.csv
|
|
OEMFilePath: /yizhisec/hs_nginx/data/443/oem/data.json
|
|
StorageDir: /data/storage/client_pkg
|
|
WindowsClient:
|
|
App7zDir: app7z_0
|
|
Dir: windows
|
|
Database:
|
|
Elastic:
|
|
Address: http://es-service.db-es:9200
|
|
IPDBFile: /etc/client_server/ipv4.ipdb
|
|
Mysql:
|
|
Address: mysql.db-mysql:3306
|
|
DBName: mie
|
|
Password: L0hMysql.
|
|
UserName: root
|
|
Redis:
|
|
Address: redis-master.db-redis:6379
|
|
Password: HybridScope0xRed1s.
|
|
DisabledFeatureFilePath: /etc/yizhisec/disabled_features
|
|
ExportWithBlindWatermark: 1
|
|
ExternalOA:
|
|
Host: ""
|
|
Port: 0
|
|
ExternalOASecret:
|
|
HsID: ""
|
|
HsSecret: ""
|
|
GatewayLinkPort: 23209
|
|
Key:
|
|
Token: TtKVnSzEHO3jRv/GWg3f5k3H1OVfMnPZ1Ke9E6MSCXk=
|
|
LicensePubKey: /etc/yizhisec/license/pub_key
|
|
Log:
|
|
Dir: ./log
|
|
Level: 1
|
|
Name: client_server
|
|
MQTTServer:
|
|
Host: emqx-service.db-emqx
|
|
Port: 1883
|
|
NginxEnvFilePath: /yizhisec/hs_nginx/.env
|
|
Pipelines:
|
|
- processor:
|
|
Script: diA9IGpzb24uZGVjb2RlKGV2ZW50KQpjID0ganNvbi5kZWNvZGUoR2V0UmVzb3VyY2VDb25maWcoImNvbnRyb2xsZXIiKSkKY3B1dCA9IGNbImhhcmR3YXJlX3Jlc291cmNlX3RocmVob2xkIl1bImNwdSJdCm1lbXQgPSBjWyJoYXJkd2FyZV9yZXNvdXJjZV90aHJlaG9sZCJdWyJtZW1vcnkiXQpkaXNrdCA9IGNbImhhcmR3YXJlX3Jlc291cmNlX3RocmVob2xkIl1bImRpc2siXQpzd2l0Y2ggPSBjWyJzd2l0Y2giXQpkZWJ1Z19pbmZvID0ge30KZGVmIGNoZWNrKGNwdSwgbWVtb3J5LCBkaXNrKToKICBpZiBzd2l0Y2ggPT0gRmFsc2U6CiAgICByZXR1cm4KICBtc2cgPSAiIgogIGV2dCA9IHt9CiAgaWYgY3B1ID4gY3B1dDoKICAgICAgbXNnID0gIkNQVeWNoOeUqOi2hei/hyIgKyBzdHIoY3B1dCkgKyAiJSIKICBpZiBtZW1vcnkgPiBtZW10OgogICAgaWYgbGVuKG1zZykgIT0gMDoKICAgICAgbXNnID0gbXNnICsgIu+8jCAiCiAgICBtc2cgPSBtc2cgKyAi5YaF5a2Y5Y2g55So6LaF6L+HIiArIHN0cihtZW10KSArICIlIgogIGlmIGRpc2sgPiBkaXNrdDoKICAgIGlmIGxlbihtc2cpICE9IDA6CiAgICAgIG1zZyA9IG1zZyArICLvvIwgIgogICAgbXNnID0gbXNnICsgIuejgeebmOWNoOeUqOi2hei/hyIgKyBzdHIoZGlza3QpICsgIiUiCiAgaWYgbGVuKG1zZykgIT0gMDoKICAgIG1zZyA9IG1zZyArICLjgILor7flj4rml7bmn6XnnIvmnI3liqHlmajnmoTkvb/nlKjmg4XlhrXmiJbph43mlrDosIPmlbTpmIjlgLzjgIIiCiAgaWYgbGVuKG1zZykgPT0gMDoKICAgIHJldHVybiBldnQKICBpZ25vcmUgPSBDb21wYXJlQW5kU2V0KCJfcGlwZWxpbmVfbHN0X2N0IiwgR2V0VGltZVNlYygpLCA2MCo2MCkKICBpZiBpZ25vcmUgPT0gMDoKICAgIGRlYnVnX2luZm9bImluZm8iXSA9ICJyYXRlIGxpbWl0IGlnbm9yZSIKICAgIHJldHVybgogIG1zZyA9ICLnrZbnlaXmjqfliLblmajnmoQiICsgbXNnCiAgZXZ0WyJkZXRhaWwiXSA9IG1zZwogIGV2dFsiZG9tYWluX2lkIl0gPSAwCiAgZXZ0WyJtZXNzYWdlX3R5cGUiXSA9IDEwMQogIGV2dFsiY3JlYXRlX3RpbWUiXSA9IEdldFRpbWVTZWMoKQogIHJldHVybiBldnQKCm91dHB1dCA9IGpzb24uZW5jb2RlKGNoZWNrKHZbImNwdSJdWyJwZXJjZW50Il0sIHZbIm1lbSJdWyJwZXJjZW50Il0sIHZbImRpc2siXVsicGVyY2VudCJdKSk=
|
|
Type: starlark
|
|
sink:
|
|
Cols:
|
|
- create_time
|
|
- detail
|
|
- domain_id
|
|
- message_type
|
|
DB: mie
|
|
Host: mysql.db-mysql:3306
|
|
Pwd: L0hMysql.
|
|
Table: message_content
|
|
Type: mysql_sink
|
|
User: root
|
|
source:
|
|
Host: redis-master.db-redis:6379
|
|
Key: evt_server_state:controller
|
|
Pwd: HybridScope0xRed1s.
|
|
Tick: 3
|
|
Type: redis_source
|
|
- processor:
|
|
Script: diA9IGpzb24uZGVjb2RlKGV2ZW50KQpjID0ganNvbi5kZWNvZGUoR2V0UmVzb3VyY2VDb25maWcoImdhdGV3YXkiKSkKY3B1dCA9IGNbImhhcmR3YXJlX3Jlc291cmNlX3RocmVob2xkIl1bImNwdSJdCm1lbXQgPSBjWyJoYXJkd2FyZV9yZXNvdXJjZV90aHJlaG9sZCJdWyJtZW1vcnkiXQpkaXNrdCA9IGNbImhhcmR3YXJlX3Jlc291cmNlX3RocmVob2xkIl1bImRpc2siXQpzd2l0Y2ggPSBjWyJzd2l0Y2giXQpkZWJ1Z19pbmZvID0ge30KZGVmIGNoZWNrKCk6CiAgaWYgc3dpdGNoID09IEZhbHNlOgogICAgcmV0dXJuCiAga3MgPSB2LmtleXMoKQogIGlmIGxlbihrcykgPiAwOgogICAgayA9IGtzWzBdCiAgY3B1ID0gdltrXVsiY3B1Il0KICBtZW0gPSB2W2tdWyJtZW0iXQogIGRpc2sgPSB2W2tdWyJkaXNrIl0KICBtc2cgPSAiIgogIGV2dCA9IHt9CiAgaWYgY3B1ID4gY3B1dDoKICAgICAgbXNnID0gIkNQVeWNoOeUqOi2hei/hyIgKyBzdHIoY3B1dCkgKyAiJSIKICBpZiBtZW0gPiBtZW10OgogICAgaWYgbGVuKG1zZykgIT0gMDoKICAgICAgbXNnID0gbXNnICsgIu+8jCAiCiAgICBtc2cgPSBtc2cgKyAi5YaF5a2Y5Y2g55So6LaF6L+HIiArIHN0cihtZW10KSArICIlIgogIGlmIGRpc2sgPiBkaXNrdDoKICAgIGlmIGxlbihtc2cpICE9IDA6CiAgICAgIG1zZyA9IG1zZyArICLvvIwgIgogICAgbXNnID0gbXNnICsgIuejgeebmOWNoOeUqOi2hei/hyIgKyBzdHIoZGlza3QpICsgIiUiCiAgaWYgbGVuKG1zZykgIT0gMDoKICAgIG1zZyA9IG1zZyArICLjgILor7flj4rml7bmn6XnnIvmnI3liqHlmajnmoTkvb/nlKjmg4XlhrXmiJbph43mlrDosIPmlbTpmIjlgLzjgIIiCiAgaWYgbGVuKG1zZykgPT0gMDoKICAgIHJldHVybiBldnQKICBpZ25vcmUgPSBDb21wYXJlQW5kU2V0KCJfcGlwZWxpbmVfbHN0X2d0IiwgR2V0VGltZVNlYygpLCA2MCo2MCkKICBpZiBpZ25vcmUgPT0gMDoKICAgIGRlYnVnX2luZm9bImluZm8iXSA9ICJyYXRlIGxpbWl0IGlnbm9yZSIKICAgIHJldHVybgogIG1zZyA9ICLnvZHlhbPnmoQiICsgbXNnCiAgZXZ0WyJkZXRhaWwiXSA9IG1zZwogIGV2dFsiZG9tYWluX2lkIl0gPSAwCiAgZXZ0WyJtZXNzYWdlX3R5cGUiXSA9IDEwMgogIGV2dFsiY3JlYXRlX3RpbWUiXSA9IEdldFRpbWVTZWMoKQogIHJldHVybiBldnQKCm91dHB1dCA9IGpzb24uZW5jb2RlKGNoZWNrKCkp
|
|
Type: starlark
|
|
sink:
|
|
Cols:
|
|
- create_time
|
|
- detail
|
|
- domain_id
|
|
- message_type
|
|
DB: mie
|
|
Host: mysql.db-mysql:3306
|
|
Pwd: L0hMysql.
|
|
Table: message_content
|
|
Type: mysql_sink
|
|
User: root
|
|
source:
|
|
Host: redis-master.db-redis:6379
|
|
Key: evt_server_state:gateway
|
|
Pwd: HybridScope0xRed1s.
|
|
Tick: 3
|
|
Type: redis_source
|
|
- processor:
|
|
Script: diA9IGpzb24uZGVjb2RlKGV2ZW50KQpjID0ganNvbi5kZWNvZGUoR2V0TGljZW5zZUNvbmZpZygibGljZW5zZSIpKQpsZWZ0ID0gY1sibGljZW5zZV90aHJlaG9sZCJdWyJyZW1haW5pbmdfZGF5Il0Kc3dpdGNoID0gY1sic3dpdGNoIl0KZGVidWdfaW5mbyA9IHt9CmRlZiBjaGVjaygpOgogIGlmIHN3aXRjaCA9PSBGYWxzZToKICAgIHJldHVybgogIAogIGV0ID0gdlsiZXhwaXJlX3RpbWUiXQogIGV2dCA9IHt9CiAgY3VyID0gR2V0VGltZVNlYygpCiAgaWYgZXQgPCAoY3VyICsgbGVmdCAqIDg2NDAwKToKICAgIGlnbm9yZSA9IENvbXBhcmVBbmRTZXQoIl9waXBlbGluZV9sc3RfbCIsIEdldFRpbWVTZWMoKSwgNjAqNjAqMjQpCiAgICBpZiBpZ25vcmUgPT0gMDoKICAgICAgZGVidWdfaW5mb1siaW5mbyJdID0gInJhdGUgbGltaXQgaWdub3JlIgogICAgICByZXR1cm4KICAgIGV2dFsiZGV0YWlsIl0gPSAi5Lqn5ZOB5o6I5p2D5Ymp5L2Z5aSp5pWw5bCP5LqOIiArIHN0cihsZWZ0KSArICLlpKnjgILor7flj4rml7bmn6XnnIvkvb/nlKjmg4XlhrXjgIHph43mlrDosIPmlbTpmIjlgLzmiJbogZTns7vnrqHnkIblkZjmt7vliqDmjojmnYPjgIIiCiAgICBldnRbImRvbWFpbl9pZCJdID0gMAogICAgZXZ0WyJtZXNzYWdlX3R5cGUiXSA9IDIwMgogICAgZXZ0WyJjcmVhdGVfdGltZSJdID0gR2V0VGltZVNlYygpCiAgICByZXR1cm4gZXZ0Cm91dHB1dCA9IGpzb24uZW5jb2RlKGNoZWNrKCkp
|
|
Type: starlark
|
|
sink:
|
|
Cols:
|
|
- create_time
|
|
- detail
|
|
- domain_id
|
|
- message_type
|
|
DB: mie
|
|
Host: mysql.db-mysql:3306
|
|
Pwd: L0hMysql.
|
|
Table: message_content
|
|
Type: mysql_sink
|
|
User: root
|
|
source:
|
|
Host: redis-master.db-redis:6379
|
|
Key: license_state_cache:expire
|
|
Pwd: HybridScope0xRed1s.
|
|
Tick: 3
|
|
Type: redis_source
|
|
- processor:
|
|
Script: diA9IGpzb24uZGVjb2RlKGV2ZW50KQpjID0ganNvbi5kZWNvZGUoR2V0TGljZW5zZUNvbmZpZygibGljZW5zZV9kZXZpY2UiKSkKY2wgPSBjWyJsaWNlbnNlX2RldmljZV90aHJlaG9sZCJdWyJjbGllbnRfbGVmdCJdCm1sID0gY1sibGljZW5zZV9kZXZpY2VfdGhyZWhvbGQiXVsibW9iaWxlX2xlZnQiXQptYyA9IHZbIm1heF9jbGllbnRfY291bnQiXQptYiA9IHZbIm1heF9tb2JpbGVfY2xpZW50X2NvdW50Il0KY2MgPSB2WyJjdXJyZW50X2NsaWVudF9jb3VudCJdCmNtID0gdlsiY3VycmVudF9tb2JpbGVfY2xpZW50X2NvdW50Il0Kc3dpdGNoID0gY1sic3dpdGNoIl0KZGVidWdfaW5mbyA9IHt9CmRlZiBjaGVjaygpOgogIGlmIHN3aXRjaCA9PSBGYWxzZToKICAgIHJldHVybgogIGV2dCA9IHt9CiAgbXNnID0gIiIKICBpZiAobWMtY2MpIDwgY2w6CiAgICBtc2cgPSBtc2cgKyAi5a6i5oi356uv5L2/55So5pWw6YeP5bCR5LqOIitzdHIoY2wpKyLkuKoiCiAgaWYgbGVuKG1zZykgPiAwOgogICAgbXNnID0gbXNnICsgIu+8jCIKICBpZiAobWItY20pIDwgbWw6CiAgICBtc2cgPSBtc2cgKyAi56e75Yqo56uv5L2/55So5pWw6YeP5bCR5LqOIitzdHIobWwpKyLkuKrjgIIiCiAgaWYgbGVuKG1zZykgPiAwOgogICAgaWdub3JlID0gQ29tcGFyZUFuZFNldCgiX3BpcGVsaW5lX2xzdF9sZCIsIEdldFRpbWVTZWMoKSwgNjAqNjApCiAgICBpZiBpZ25vcmUgPT0gMDoKICAgICAgZGVidWdfaW5mb1siaW5mbyJdID0gInJhdGUgbGltaXQgaWdub3JlIgogICAgICByZXR1cm4KICAgIGV2dFsiZGV0YWlsIl0gPSBtc2cgKyAi6K+35Y+K5pe25p+l55yL5L2/55So5oOF5Ya144CB6YeN5paw6LCD5pW06ZiI5YC85oiW6IGU57O7566h55CG5ZGY5re75Yqg5o6I5p2D44CCIgogICAgZXZ0WyJkb21haW5faWQiXSA9IDAKICAgIGV2dFsibWVzc2FnZV90eXBlIl0gPSAyMDIKICAgIGV2dFsiY3JlYXRlX3RpbWUiXSA9IEdldFRpbWVTZWMoKQogICAgcmV0dXJuIGV2dApvdXRwdXQgPSBqc29uLmVuY29kZShjaGVjaygpKQ==
|
|
Type: starlark
|
|
sink:
|
|
Cols:
|
|
- create_time
|
|
- detail
|
|
- domain_id
|
|
- message_type
|
|
DB: mie
|
|
Host: mysql.db-mysql:3306
|
|
Pwd: L0hMysql.
|
|
Table: message_content
|
|
Type: mysql_sink
|
|
User: root
|
|
source:
|
|
Host: redis-master.db-redis:6379
|
|
Key: license_state_cache:online
|
|
Pwd: HybridScope0xRed1s.
|
|
Tick: 3
|
|
Type: redis_source
|
|
- processor:
|
|
Script: diA9IGpzb24uZGVjb2RlKGV2ZW50KQpkZWJ1Z19pbmZvID0ge30KZGVmIGNoZWNrKCk6CiAgZXZ0ID0ge30KICBtc2cgPSAiIgogIAogIGRpZCA9IHZbImRvbWFpbl9pZCJdCiAgdWlkID0gdlsidXNlcl9pZCJdCiAgdW5hbWUgPSBHZXRVc2VyTmFtZSh1aWQpCiAgbGltaXQgPSB2WyJsaW1pdCJdCiAgcmFuZ2UgPSB2WyJyYW5nZSJdCiAgcnUgPSB2WyJyYW5nZV91bml0Il0KICBzdSA9IHZbInNpemVfdW5pdCJdCiAgZSA9IHZbImV2dCJdCiAgaWYgZSA9PSAiY291bnQiOgogICAgZXZ0WyJtZXNzYWdlX3R5cGUiXSA9IDMwMQogICAgdW5pdCA9IHN0cihyYW5nZSkKICAgIGlmIHJ1ID09ICJIIiBvciBydSA9PSAiaCI6CiAgICAgICAgdW5pdCA9IHVuaXQgKyAi5bCP5pe2IgogICAgaWYgcnUgPT0gIkQiIG9yIHJ1ID09ICJkIjoKICAgICAgICB1bml0ID0gdW5pdCArICLlpKkiCiAgICBtc2cgPSAi5ZyoIiArIHVuaXQgKyAi5YaF77yMIiArIHVuYW1lICsgIueahOWfn+WGheaWh+S7tuWvvOWHuuaVsOmHj+i2hei/hyIgKyBzdHIobGltaXQpICsgIuS4qu+8jCIKICBpZiBlID09ICJzaXplIjoKICAgIGV2dFsibWVzc2FnZV90eXBlIl0gPSAzMDIKICAgIHVuaXQgPSBzdHIocmFuZ2UpCiAgICBpZiBydSA9PSAiSCIgb3IgcnUgPT0gImgiOgogICAgICAgIHVuaXQgPSB1bml0ICsgIuWwj+aXtiIKICAgIGlmIHJ1ID09ICJEIiBvciBydSA9PSAiZCI6CiAgICAgICAgdW5pdCA9IHVuaXQgKyAi5aSpIgogICAgbXNnID0gIuWcqCIgKyB1bml0ICsgIuWGhe+8jCIgKyB1bmFtZSArICLnmoTln5/lhoXmlofku7blr7zlh7rlpKflsI/otoXov4ciICsgc3RyKGxpbWl0KQogICAgaWYgc3UgPT0gIk0iIG9yIHN1ID09ICJtIjoKICAgICAgICBtc2cgPSBtc2cgKyAiTULvvIwiCiAgICBpZiBzdSA9PSAiRyIgb3Igc3UgPT0gImciOgogICAgICAgIG1zZyA9IG1zZyArICJHQu+8jCIKICAgIGlmIHN1ID09ICJUIiBvciBzdSA9PSAidCI6CiAgICAgICAgbXNnID0gbXNnICsgIlRC77yMIgoKICBpZiBsZW4obXNnKSA+IDA6CiAgICBldnRbImRldGFpbCJdID0gbXNnICsgIuivt+WPiuaXtui3n+i4quWvvOWHuuaWh+S7tueahOaVj+aEn+eoi+W6puaIlumHjeaWsOiwg+aVtOmYiOWAvOOAgiIKICAgIGV2dFsiZG9tYWluX2lkIl0gPSBkaWQKICAgIGV2dFsiY3JlYXRlX3RpbWUiXSA9IEdldFRpbWVTZWMoKQogICAgcmV0dXJuIGV2dApvdXRwdXQgPSBqc29uLmVuY29kZShjaGVjaygpKQ==
|
|
Type: starlark
|
|
sink:
|
|
Cols:
|
|
- create_time
|
|
- detail
|
|
- domain_id
|
|
- message_type
|
|
DB: mie
|
|
Host: mysql.db-mysql:3306
|
|
Pwd: L0hMysql.
|
|
Table: message_content
|
|
Type: mysql_sink
|
|
User: root
|
|
source:
|
|
DB: mie
|
|
Host: mysql.db-mysql:3306
|
|
Pwd: L0hMysql.
|
|
Table: evt_export_file_over
|
|
Type: mysql_source
|
|
User: root
|
|
Sentry:
|
|
TracesSampleRate: 1
|
|
StaticURLPathPrefix:
|
|
NetworkAppIcon: /user/avatar
|
|
Storage:
|
|
PublicFolderFileDir: /data/storage/public_folder_file
|
|
TmpDir: /data/storage/tmp
|
|
UploadedFilesDir: /data/storage/uploaded_files
|
|
TranslationPath: translation.csv
|
|
UpgradeCheckFilePath: /yizhisec/hs_nginx/resource/release_version_record.csv
|
|
UserManagement:
|
|
Host: user-service
|
|
Port: 9013
|
|
WatermarkServer:
|
|
Host: hs-watermark
|
|
Port: 9014
|
|
Web:
|
|
Host: 0.0.0.0
|
|
Mode: release
|
|
Port: 9129
|
|
Web2:
|
|
Host: 0.0.0.0
|
|
Mode: release
|
|
Port: 9024
|
|
WebMessages:
|
|
Host: 0.0.0.0
|
|
Mode: release
|
|
Port: 9025
|
|
WorkDir: /yizhisec/client_server
|
|
YosGuard:
|
|
Host: 172.17.0.1
|
|
Port: 7788`
|
|
_upsert = `#!/bin/bash
|
|
|
|
kubectl create configmap config-client --namespace hsv2 --from-file=config.yml=./config.yml --dry-run=client -o yaml | kubectl apply -f -
|
|
kubectl apply -f deployment.yaml
|
|
kubectl rollout restart deployment client-deployment -n hsv2`
|
|
)
|
|
var (
|
|
err error
|
|
workdir = filepath.Join(opt.Cfg.Make.Dir, "app", "client")
|
|
)
|
|
|
|
logger.Info("☑️ maker.AppClient: 开始构建 client 应用..., dir = %s", workdir)
|
|
logger.Debug("☑️ maker.AppClient: 开始创建工作目录 = %s", workdir)
|
|
if err = os.MkdirAll(workdir, 0755); err != nil {
|
|
logger.Debug("❌ maker.AppClient: 创建目录失败: %v", err)
|
|
return err
|
|
}
|
|
logger.Debug("✅ maker.AppClient: 创建工作目录成功 = %s", workdir)
|
|
|
|
if replica < 1 {
|
|
replica = 1
|
|
}
|
|
|
|
logger.Debug("☑️ maker.AppClient: 开始构建 yaml 资源文件")
|
|
content := []byte(fmt.Sprintf(resource.YAMLAppClient, replica))
|
|
if err = os.WriteFile(filepath.Join(workdir, "deployment.yaml"), content, 0644); err != nil {
|
|
logger.Debug("❌ maker.AppClient: 写入 deployment.yaml 失败: %v", err)
|
|
return err
|
|
}
|
|
logger.Debug("✅ maker.AppClient: 开始 yaml 资源文件成功")
|
|
|
|
logger.Debug("☑️ maker.AppClient: 开始构建 config 文件")
|
|
if err = os.WriteFile(filepath.Join(workdir, "config.yml"), []byte(_config), 0644); err != nil {
|
|
logger.Debug("❌ maker.AppClient: 写入 config.yml 失败: %v", err)
|
|
return err
|
|
}
|
|
logger.Debug("✅ maker.AppClient: 构建 config 文件成功")
|
|
|
|
logger.Debug("☑️ maker.AppClient: 开始构建 upsert.sh 脚本")
|
|
if err = os.WriteFile(filepath.Join(workdir, "upsert.sh"), []byte(_upsert), 0755); err != nil {
|
|
logger.Debug("❌ maker.AppClient: 写入 upsert.sh 失败: %v", err)
|
|
return err
|
|
}
|
|
logger.Debug("✅ maker.AppClient: 构建 upsert.sh 脚本成功")
|
|
|
|
logger.Info("✅ maker.AppClient: 构建 client 应用成功!!!")
|
|
return nil
|
|
}
|