Skip to content

Commit

Permalink
Luoluo/feat/linux and mac build (#1785)
Browse files Browse the repository at this point in the history
* cib打包mac和Linux

* feat:mac 解压内置引擎区分arch

* feat:下载引擎和社区版mac和linux区分arm64和amd64

* feat:asyncFetchCheckYaklangSource:区分arm64和amd64

* feat:抽离校验引擎是否为官方的方法为getCheckTextUrl;feat:检测引擎版本升级的立即更新区分arm64和amd64

* feat:getCheckTextUrl增加获取可用域的逻辑,使用可用域

* doc:ci取消上传yakit-version.txt的注释
  • Loading branch information
luoluoTH authored Jul 8, 2024
1 parent 0e94b03 commit ca2493c
Show file tree
Hide file tree
Showing 6 changed files with 233 additions and 77 deletions.
79 changes: 64 additions & 15 deletions .github/workflows/yakit-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,19 @@ jobs:
- name: "Download Yak Engine via wget(MacOS)"
id: download-darwin-engine
run: wget -O bins/yak_darwin_amd64 https://yaklang.oss-accelerate.aliyuncs.com/yak/latest/yak_darwin_amd64 && zip ./bins/yak_darwin_amd64.zip ./bins/yak_darwin_amd64 && rm ./bins/yak_darwin_amd64

- name: "Download Yak Engine via wget(MacOS-arm64)"
id: download-darwin-engine-arm64
run: wget -O bins/yak_darwin_arm64 https://yaklang.oss-accelerate.aliyuncs.com/yak/latest/yak_darwin_arm64 && zip ./bins/yak_darwin_arm64.zip ./bins/yak_darwin_arm64 && rm ./bins/yak_darwin_arm64

- name: "Download Yak Engine via wget(Linux)"
id: download-linux-engine
run: wget -O bins/yak_linux_amd64 https://yaklang.oss-accelerate.aliyuncs.com/yak/latest/yak_linux_amd64 && zip ./bins/yak_linux_amd64.zip ./bins/yak_linux_amd64 && rm ./bins/yak_linux_amd64

- name: "Download Yak Engine via wget(Linux-arm64)"
id: download-linux-engine-arm64
run: wget -O bins/yak_linux_arm64 https://yaklang.oss-accelerate.aliyuncs.com/yak/latest/yak_linux_arm64 && zip ./bins/yak_linux_arm64.zip ./bins/yak_linux_arm64 && rm ./bins/yak_linux_arm64

- name: "Download Yak Engine via wget(Windows)"
id: download-windows-engine
run: wget -O bins/yak_windows_amd64.exe https://yaklang.oss-accelerate.aliyuncs.com/yak/latest/yak_windows_amd64.exe && zip ./bins/yak_windows_amd64.zip ./bins/yak_windows_amd64.exe && rm ./bins/yak_windows_amd64.exe
Expand Down Expand Up @@ -141,13 +151,21 @@ jobs:
# Yakit-1.0.3-beta24-win32-x64.exe
name: Yakit-${{ steps.extract_version.outputs.version }}-darwin-x64.dmg
path: ./release/Yakit-${{ steps.extract_version.outputs.version }}-darwin-x64.dmg
- name: Upload Yakit(Community) Artifacts Linux
- name: Upload Yakit(Community) Artifacts Linux(amd64)
uses: actions/upload-artifact@v2
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci/community-') }}
with:
# Yakit-1.0.3-beta24-win32-x64.exe
name: Yakit-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage
path: ./release/Yakit-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage

- name: Upload Yakit(Community) Artifacts Linux(arm64)
uses: actions/upload-artifact@v2
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci/community-') }}
with:
name: Yakit-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage
path: ./release/Yakit-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage

# start Enterprise Edition
- name: Upload Yakit(Enterprise) Artifacts Windows
uses: actions/upload-artifact@v2
Expand Down Expand Up @@ -177,7 +195,13 @@ jobs:
# Yakit-1.0.3-beta24-win32-x64.exe
name: EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage
path: ./release/EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage

- name: Upload Yakit(Enterprise) Artifacts Linux(arm64)
uses: actions/upload-artifact@v2
if: ${{ startsWith(github.ref, 'refs/heads/ci/yakit-ee') }}
with:
# Yakit-1.0.3-beta24-win32-x64.exe
name: EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage
path: ./release/EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage
# start Special Edition
- name: Upload Yakit(Special) Artifacts Windows
uses: actions/upload-artifact@v2
Expand Down Expand Up @@ -207,6 +231,13 @@ jobs:
# Yakit-1.0.3-beta24-win32-x64.exe
name: EnpriTraceAgent-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage
path: ./release/EnpriTraceAgent-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage
- name: Upload Yakit(Special) Artifacts Linux(arm64)
uses: actions/upload-artifact@v2
if: ${{ startsWith(github.ref, 'refs/heads/ci/yakit-se') }}
with:
# Yakit-1.0.3-beta24-win32-x64.exe
name: EnpriTraceAgent-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage
path: ./release/EnpriTraceAgent-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage

publish_yakit_ee_to_oss:
if: ${{ startsWith(github.ref, 'refs/heads/ci/yakit-ee') && !endsWith(github.ref, '/no-release') }}
Expand Down Expand Up @@ -244,6 +275,10 @@ jobs:
uses: actions/download-artifact@v2
with:
name: EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage
- name: Download Yakit (Linux arm64)
uses: actions/download-artifact@v2
with:
name: EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage
- run: ls
name: Ls Published Artifacts...

Expand All @@ -263,6 +298,7 @@ jobs:
Yakit-${{ steps.extract_version.outputs.version }}-darwin-x64.dmg:/yak/${{ steps.extract_version.outputs.version }}/EnpriTrace-${{ steps.extract_version.outputs.version }}-darwin-x64.dmg
Yakit-${{ steps.extract_version.outputs.version }}-darwin-arm64.dmg:/yak/${{ steps.extract_version.outputs.version }}/EnpriTrace-${{ steps.extract_version.outputs.version }}-darwin-arm64.dmg
Yakit-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage:/yak/${{ steps.extract_version.outputs.version }}/EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage
Yakit-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage:/yak/${{ steps.extract_version.outputs.version }}/EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage
# special edition
publish_yakit_se_to_oss:
if: ${{ startsWith(github.ref, 'refs/heads/ci/yakit-se') && !endsWith(github.ref, '/no-release') }}
Expand Down Expand Up @@ -349,7 +385,10 @@ jobs:
uses: actions/download-artifact@v2
with:
name: Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-amd64.AppImage

- name: Download Yakit (Linux arm64)
uses: actions/download-artifact@v2
with:
name: Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-arm64.AppImage
- run: ls
name: Ls Published Artifacts...

Expand Down Expand Up @@ -409,7 +448,16 @@ jobs:
asset_path: ./Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-amd64.AppImage
asset_name: Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-amd64.AppImage
asset_content_type: application/octet-stream

- name: Upload Release Asset (Linux-arm64)
uses: actions/upload-release-asset@v1
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
asset_path: ./Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-arm64.AppImage
asset_name: Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-arm64.AppImage
asset_content_type: application/octet-stream
- name: Run
run: ls
# - name: Upload yak to oss Latest
Expand Down Expand Up @@ -449,15 +497,16 @@ jobs:
Yakit-${{ steps.fetchtag_release.outputs.value }}-darwin-x64.dmg:/yak/${{ steps.fetchtag_release.outputs.value }}/Yakit-${{ steps.fetchtag_release.outputs.value }}-darwin-x64.dmg
Yakit-${{ steps.fetchtag_release.outputs.value }}-darwin-arm64.dmg:/yak/${{ steps.fetchtag_release.outputs.value }}/Yakit-${{ steps.fetchtag_release.outputs.value }}-darwin-arm64.dmg
Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-amd64.AppImage:/yak/${{ steps.fetchtag_release.outputs.value }}/Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-amd64.AppImage
Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-arm64.AppImage:/yak/${{ steps.fetchtag_release.outputs.value }}/Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-arm64.AppImage
# - name: Update OSS latest file
# run: echo ${{ steps.fetchtag_release.outputs.value }} > ./yakit-version.txt
# - name: Upload Yakit Version to oss
# uses: tvrcgo/upload-to-oss@master
# with:
# key-id: ${{ secrets.OSS_KEY_ID }}
# key-secret: ${{ secrets.OSS_KEY_SECRET }}
# region: oss-accelerate
# bucket: yaklang
# assets: |
# ./yakit-version.txt:/yak/latest/yakit-version.txt
- name: Update OSS latest file
run: echo ${{ steps.fetchtag_release.outputs.value }} > ./yakit-version.txt
- name: Upload Yakit Version to oss
uses: tvrcgo/upload-to-oss@master
with:
key-id: ${{ secrets.OSS_KEY_ID }}
key-secret: ${{ secrets.OSS_KEY_SECRET }}
region: oss-accelerate
bucket: yaklang
assets: |
./yakit-version.txt:/yak/latest/yakit-version.txt
29 changes: 12 additions & 17 deletions app/main/handlers/upgradeUtil.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const {
const {
cancelRequestWithProgress
} = require("./utils/requestWithProgress");
const { getCheckTextUrl } = require("../handlers/utils/network")

const userChromeDataDir = path.join(YakitProjectPath, "chrome-profile");
const authMeta = [];
Expand Down Expand Up @@ -361,23 +362,12 @@ module.exports = {
const dest = path.join(yaklangEngineDir, version.startsWith('dev/') ? 'yak-' + version.replace('dev/', 'dev-') : `yak-${version}`);
return new Promise((resolve, reject) => {
try {
let url = ''
switch (process.platform) {
case "darwin":
url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_darwin_amd64.sha256.txt`
break
case "win32":
url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_windows_amd64.exe.sha256.txt`
break
case "linux":
url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_linux_amd64.sha256.txt`
break
}
const url = getCheckTextUrl()

if (url === "") {
reject(`Unsupported platform: ${process.platform}`)
}

if (fs.existsSync(dest)) {
let rsp = https.get(url)
rsp.on("response", (rsp) => {
Expand Down Expand Up @@ -412,7 +402,7 @@ module.exports = {
ipcMain.handle("cancel-download-yak-engine-version", async (e, version) => {
return await cancelRequestWithProgress(version)
})

// asyncDownloadLatestYakit wrapper
async function asyncDownloadLatestYakit(version, isEnterprise) {
return new Promise(async (resolve, reject) => {
Expand Down Expand Up @@ -510,7 +500,7 @@ module.exports = {
}
}
}

}
tryUnlink(2);
childProcess.exec(isWindows ? `copy "${origin}" "${dest}"` : `cp "${origin}" "${dest}" && chmod +x "${dest}"`, err => {
Expand All @@ -526,7 +516,7 @@ module.exports = {
resolve()
})
})

}

ipcMain.handle("install-yak-engine", async (e, version) => {
Expand Down Expand Up @@ -609,7 +599,12 @@ module.exports = {
const extractedFile = (() => {
switch (os.platform()) {
case "darwin":
return "bins/yak_darwin_amd64"
switch (os.arch()) {
case "arm64":
return "bins/yak_darwin_arm64"
default:
return "bins/yak_darwin_amd64"
}
case "win32":
return "bins/yak_windows_amd64.exe"
case "linux":
Expand Down
57 changes: 49 additions & 8 deletions app/main/handlers/utils/network.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
const axios = require("axios");
const url = require("url");
const process = require("process");
const {requestWithProgress} = require("./requestWithProgress");
const { requestWithProgress } = require("./requestWithProgress");
const events = require("events");
const { async } = require("node-stream-zip");

const ossDomains = ["aliyun-oss.yaklang.com", "yaklang.oss-cn-beijing.aliyuncs.com", "yaklang.oss-accelerate.aliyuncs.com"];

Expand Down Expand Up @@ -55,7 +56,7 @@ async function getAvailableOSSDomain() {
const url = `https://${domain}/yak/latest/version.txt`;
try {
console.info(`start to do axios.get to ${url}`)
const response = await axios.get(url, {httpsAgent: getHttpsAgentByDomain(domain)});
const response = await axios.get(url, { httpsAgent: getHttpsAgentByDomain(domain) });
if (response.status !== 200) {
console.error(`Failed to access (StatusCode) ${url}: ${response.status}`);
continue
Expand All @@ -82,10 +83,37 @@ async function getAvailableOSSDomain() {
}
}

/**获取校验url */
const getCheckTextUrl = async () => {
const domain = await getAvailableOSSDomain();
let url = ''
switch (process.platform) {
case "darwin":
if (process.arch === "arm64") {
url = `https://${domain}/yak/${version}/yak_darwin_arm64.sha256.txt`
} else {
url = `https://${domain}/yak/${version}/yak_darwin_amd64.sha256.txt`
}
break
case "win32":
url = `https://${domain}/yak/${version}/yak_windows_amd64.exe.sha256.txt`
break
case "linux":
if (process.arch === "arm64") {
url = `https://${domain}.com/yak/${version}/yak_linux_arm64.sha256.txt`
} else {
url = `https://${domain}.com/yak/${version}/yak_linux_amd64.sha256.txt`
}
break
default:
break
}
return url
}
const fetchLatestYakEngineVersion = async () => {
const domain = await getAvailableOSSDomain();
const versionUrl = `https://${domain}/yak/latest/version.txt`;
return axios.get(versionUrl, {httpsAgent: getHttpsAgentByDomain(domain)}).then(response => {
return axios.get(versionUrl, { httpsAgent: getHttpsAgentByDomain(domain) }).then(response => {
const versionData = `${response.data}`.trim()
if (versionData.length > 0) {
return versionData.startsWith("v") ? versionData : `v${versionData}`
Expand All @@ -98,7 +126,7 @@ const fetchLatestYakEngineVersion = async () => {
const fetchLatestYakitVersion = async () => {
const domain = await getAvailableOSSDomain();
const versionUrl = `https://${domain}/yak/latest/yakit-version.txt`;
return axios.get(versionUrl, {httpsAgent: getHttpsAgentByDomain(domain)}).then(response => {
return axios.get(versionUrl, { httpsAgent: getHttpsAgentByDomain(domain) }).then(response => {
const versionData = `${response.data}`.trim()
if (versionData.length > 0) {
return versionData.startsWith("v") ? versionData : `v${versionData}`
Expand All @@ -111,7 +139,7 @@ const fetchLatestYakitVersion = async () => {
const fetchLatestYakitEEVersion = async () => {
const domain = await getAvailableOSSDomain();
const versionUrl = `https://${domain}/yak/latest/yakit-ee-version.txt`;
return axios.get(versionUrl, {httpsAgent: getHttpsAgentByDomain(domain)}).then(response => {
return axios.get(versionUrl, { httpsAgent: getHttpsAgentByDomain(domain) }).then(response => {
const versionData = `${response.data}`.trim()
if (versionData.length > 0) {
return versionData.startsWith("v") ? versionData : `v${versionData}`
Expand All @@ -125,11 +153,19 @@ const getYakEngineDownloadUrl = async (version) => {
const domain = await getAvailableOSSDomain();
switch (process.platform) {
case "darwin":
return `https://${domain}/yak/${version}/yak_darwin_amd64`
if (process.arch === "arm64") {
return `https://${domain}/yak/${version}/yak_darwin_arm64`
} else {
return `https://${domain}/yak/${version}/yak_darwin_amd64`
}
case "win32":
return `https://${domain}/yak/${version}/yak_windows_amd64.exe`
case "linux":
return `https://${domain}/yak/${version}/yak_linux_amd64`
if (process.arch === "arm64") {
return `https://${domain}/yak/${version}/yak_linux_arm64`
} else {
return `https://${domain}/yak/${version}/yak_linux_amd64`
}
default:
throw new Error(`Unsupported platform: ${process.platform}`)
}
Expand All @@ -147,7 +183,11 @@ const getYakitCommunityDownloadUrl = async (version) => {
case "win32":
return `https://${domain}/yak/${version}/Yakit-${version}-windows-amd64.exe`
case "linux":
return `https://${domain}/yak/${version}/Yakit-${version}-linux-amd64.AppImage`
if (process.arch === "arm64") {
return `https://${domain}/yak/${version}/Yakit-${version}-linux-arm64.AppImage`
} else {
return `https://${domain}/yak/${version}/Yakit-${version}-linux-amd64.AppImage`
}
}
throw new Error(`Unsupported platform: ${process.platform}`)
}
Expand Down Expand Up @@ -188,6 +228,7 @@ const downloadYakitEE = async (version, destination, progressHandler, onFinished
}

module.exports = {
getCheckTextUrl,
fetchLatestYakEngineVersion,
fetchLatestYakitVersion,
fetchLatestYakitEEVersion,
Expand Down
14 changes: 2 additions & 12 deletions app/main/uiOperate/yaklangAndYakit.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const https = require("https")
const process = require("process");
const { getLocalYaklangEngine, loadExtraFilePath } = require("../filePath")
const { fetchLatestYakEngineVersion } = require("../handlers/utils/network")
const { getCheckTextUrl } = require("../handlers/utils/network")

module.exports = (win, getClient) => {
/** yaklang引擎是否安装 */
Expand Down Expand Up @@ -90,18 +91,7 @@ module.exports = (win, getClient) => {

const asyncFetchCheckYaklangSource = (version) => {
return new Promise((resolve, reject) => {
let url = ''
switch (process.platform) {
case "darwin":
url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_darwin_amd64.sha256.txt`
break
case "win32":
url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_windows_amd64.exe.sha256.txt`
break
case "linux":
url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_linux_amd64.sha256.txt`
break
}
let url = getCheckTextUrl()
if (url === '') {
reject(`Unsupported platform: ${process.platform}`)
}
Expand Down
Loading

0 comments on commit ca2493c

Please sign in to comment.