From c93840af5ffc0c6e9f9f3c262769a2764a6d69fd Mon Sep 17 00:00:00 2001 From: PuqiAR Date: Sun, 4 Jan 2026 00:51:11 +0800 Subject: [PATCH] =?UTF-8?q?[VER]=20v0.3.6-alpha=20[Feat]=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=8E=A7=E5=88=B6=E5=8F=B0=E5=9C=A8=E7=BA=BF=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=99=A8=20!=20[Impl]=20=E4=BF=AE=E6=94=B9ExampleCode?= =?UTF-8?q?s=E7=9A=84=E4=B8=80=E4=BA=9B=E5=AE=9E=E7=8E=B0=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=9C=80=E6=96=B0=E5=BA=93=20std.io?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/build.yml | 52 ++++++- ExampleCodes/2-Function.fig | 7 +- ExampleCodes/SpeedTest/fib.fig | 4 +- ExampleCodes/SpeedTest/fibLoopTest.fig | 13 +- Installer/ConsoleInstaller/logo.ico | Bin 0 -> 16095 bytes Installer/ConsoleInstaller/main.py | 153 ++++++++++++++++++++ Installer/ConsoleInstaller/requirements.txt | 4 +- Logo/Logo1024x1024.ico | Bin 0 -> 16095 bytes src/Core/core.hpp | 2 +- xmake.lua | 2 + 10 files changed, 223 insertions(+), 14 deletions(-) create mode 100644 Installer/ConsoleInstaller/logo.ico create mode 100644 Logo/Logo1024x1024.ico diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 592c71e..b7779cb 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -46,9 +46,26 @@ jobs: xmake build -j$(nproc) echo "Linux构建成功。" + # 🔧 新增:构建Linux平台安装器 + - name: 构建Linux安装器 + run: | + echo "开始构建Linux安装器..." + cd Installer/ConsoleInstaller + # 确保pip已安装 + if ! command -v pip3 &> /dev/null; then + echo "安装pip3..." + apt-get update && apt-get install -y python3-pip + fi + # 安装依赖并构建 + pip3 install --upgrade pip + pip3 install -r requirements.txt + python3 -m PyInstaller -F -n fig-setup --distpath ./dist/linux main.py + echo "Linux安装器构建完成" + - name: 打包Linux发布文件 run: | - PACKAGE_NAME="Fig-${{ env.VERSION }}-linux-x86_64" + VERSION="${{ env.VERSION }}" + PACKAGE_NAME="Fig-${VERSION}-linux-x86_64" mkdir -p "${PACKAGE_NAME}" cp build/linux/x86_64/release/Fig "${PACKAGE_NAME}/" if [ -d "src/Module/Library" ]; then @@ -88,6 +105,7 @@ jobs: echo "使用发布 ID: $RELEASE_ID 进行上传" + # 上传语言包 curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/octet-stream" \ --data-binary @Fig-$VERSION-linux-x86_64.tar.gz \ @@ -98,6 +116,15 @@ jobs: --data-binary @Fig-$VERSION-linux-x86_64.sha256 \ "$API/releases/$RELEASE_ID/assets?name=Fig-$VERSION-linux-x86_64.sha256" + # 🔧 新增:上传Linux安装器 + if [ -f "Installer/ConsoleInstaller/dist/linux/fig-setup" ]; then + echo "正在上传Linux安装器..." + curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @Installer/ConsoleInstaller/dist/linux/fig-setup \ + "$API/releases/$RELEASE_ID/assets?name=fig-setup" + fi + echo "✅ Linux版本发布完成!" build-windows-x64: @@ -143,6 +170,16 @@ jobs: xmake build -j $env:NUMBER_OF_PROCESSORS Write-Host 'Windows构建成功。' + # 🔧 新增:构建Windows平台安装器 + - name: 构建Windows安装器 + run: | + [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + Write-Host "开始构建Windows安装器..." + cd Installer\ConsoleInstaller + pip install -r requirements.txt + pyinstaller -F -i logo.ico -n FigSetup --distpath .\dist\windows main.py + Write-Host "Windows安装器构建完成" + - name: 打包Windows发布文件 run: | [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 @@ -203,8 +240,6 @@ jobs: $API = "https://git.fig-lang.cn/api/v1/repos/$REPO" $TOKEN = $env:GITEA_TOKEN - $TOKEN = $env:GITEA_TOKEN - Write-Host "正在上传Windows版本到发布 $VERSION ..." # 1. 尝试通过标签获取 Release ID @@ -233,4 +268,15 @@ jobs: Write-Host '正在上传校验文件...' Invoke-RestMethod -Method Post -Uri "$API/releases/$RELEASE_ID/assets?name=Fig-$VERSION-windows-x86_64.sha256" -Headers @{Authorization = "token $TOKEN"; 'Content-Type' = 'text/plain' } -InFile "Fig-$VERSION-windows-x86_64.sha256" + # 🔧 新增:上传Windows安装器 + $InstallerPath = "Installer\ConsoleInstaller\dist\windows\FigSetup.exe" + if (Test-Path $InstallerPath) { + Write-Host '正在上传Windows安装器...' + Invoke-RestMethod -Method Post -Uri "$API/releases/$RELEASE_ID/assets?name=FigSetup.exe" ` + -Headers @{ + Authorization = "token $TOKEN" + 'Content-Type' = 'application/octet-stream' + } -InFile $InstallerPath + } + Write-Host '✅ Windows版本发布完成!' \ No newline at end of file diff --git a/ExampleCodes/2-Function.fig b/ExampleCodes/2-Function.fig index 9f3620c..35497c4 100644 --- a/ExampleCodes/2-Function.fig +++ b/ExampleCodes/2-Function.fig @@ -1,10 +1,11 @@ +import std.io; + func greeting(name:String) -> String { return "Hello " + name + "!"; } -const print := __fstdout_println; // link to std out -print(greeting("Fig")); +io.println(greeting("Fig")); func adder(x) { @@ -12,4 +13,4 @@ func adder(x) } const add2 = adder(2); -print(add2(3)); \ No newline at end of file +io.println(add2(3)); \ No newline at end of file diff --git a/ExampleCodes/SpeedTest/fib.fig b/ExampleCodes/SpeedTest/fib.fig index 2f36a15..c4be4ee 100644 --- a/ExampleCodes/SpeedTest/fib.fig +++ b/ExampleCodes/SpeedTest/fib.fig @@ -1,3 +1,5 @@ +import std.io; + func fib(x:Int) -> Int { if (x <= 1) @@ -8,4 +10,4 @@ func fib(x:Int) -> Int } var result := fib(25); -__fstdout_println("result: ", result); \ No newline at end of file +io.println("result: ", result); \ No newline at end of file diff --git a/ExampleCodes/SpeedTest/fibLoopTest.fig b/ExampleCodes/SpeedTest/fibLoopTest.fig index 676f316..b7795e0 100644 --- a/ExampleCodes/SpeedTest/fibLoopTest.fig +++ b/ExampleCodes/SpeedTest/fibLoopTest.fig @@ -1,3 +1,6 @@ +import std.io; +import std.value; + var callCnt:Int = 0; func fib(x:Int) -> Int { @@ -10,15 +13,15 @@ func fib(x:Int) -> Int } var fibx:Int; -__fstdout_print("input an index of fib "); -fibx = __fvalue_int_parse(__fstdin_read()); +io.print("input an index of fib "); +fibx = value.int_parse(io.read()); var cnt:Int = 0; -__fstdout_println("test forever"); +io.println("test forever"); while (true) { cnt = cnt + 1; - __fstdout_println("test ", cnt,",result: ", fib(fibx)); - __fstdout_println("func `fib` called ", callCnt); + io.println("test ", cnt,",result: ", fib(fibx)); + io.println("func `fib` called ", callCnt); callCnt = 0; } \ No newline at end of file diff --git a/Installer/ConsoleInstaller/logo.ico b/Installer/ConsoleInstaller/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..dba9ecae15cc5f585c9bff9c7126b9278a024902 GIT binary patch literal 16095 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 mDz@m1cSDnEYJP^2htk*j%DG-T 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 V5Ulp`K1Q1ks3~bFR?AyO{6FLw!(IRY literal 0 HcmV?d00001 diff --git a/Installer/ConsoleInstaller/main.py b/Installer/ConsoleInstaller/main.py index 0d44677..26f0643 100644 --- a/Installer/ConsoleInstaller/main.py +++ b/Installer/ConsoleInstaller/main.py @@ -1,3 +1,156 @@ +# Fig online installer - Python + +# Copyright (C) 2020-2026 PuqiAR + from tqdm import tqdm import requests +import json +import zipfile +import platform +from os import path as ospath +from os import mkdir,chdir + +from sys import exit, argv + +VERSION = '1.0.0' +GITEA_URL = 'https://git.fig-lang.cn' + +Windows = 0 +Linux = 2 +Darwin = 3 + +def getOSName() -> int|str: + name = platform.system() + if name == 'Windows': + return Windows + elif name == 'Linux': + return Linux + elif name == 'Darwin': + return Darwin + else: + return name + +def resolveInstallPath(os: int): + default_path = { + Windows : r'C:\Program Files\Fig', + Linux : r'/opt/Fig' + } + if os not in default_path: + raise + + return default_path[os] + +def getReleases(): + api_postfix = '/api/v1/repos/PuqiAR/Fig/releases' + api_url = GITEA_URL + api_postfix + + rel = requests.get(api_url).text + # print(rel) + return rel + +def install(url, path:str) -> None: + if not ospath.exists(path): + mkdir(path) + + filename = path.split('/')[-1] + + response = requests.get(url, stream=True) + total_size = int(response.headers.get('content-length', 0)) + + with tqdm(total=total_size, unit='B', unit_scale=True, desc=filename) as b: + with open(filename, 'wb') as f: + for data in response.iter_content(chunk_size=1024): + f.write(data) + b.update(len(data)) + + print(f'{filename} download completed.') + print(f'unziping to {path} ...') + with zipfile.ZipFile(filename) as zip: + zip.extractall(path) + + print('unziping completed') + + +def main() -> None: + print(f'== Fig Online Installer v{VERSION} ==') + + osName = getOSName() + if osName is int or osName == 'Darwin': + print(f'Unsupport os: {osName}') + exit(1) + + dpath = resolveInstallPath(osName) + print(f'Install to (default: {dpath}): ', end='') + + path = input() + if path.isspace(): + path = dpath + print() + + releases = json.loads(getReleases()) + # print(type(releases)) + if not isinstance(releases, list): + print('get releases failed!') + exit(1) + if len(releases) == 0: + print('No version has been released!') + exit(0) + + print('There are {} versions:' % len(releases)) + i = 1 + for release in releases: + print(f" {i} {release['name']} - {release['body']}") + print(f" @{release['published_at']}") + + if i >= 3: + print(f' .....') + break # 展示前3个 + + insVersion: dict = releases[0] + print(f"Which version do you want to install({insVersion['name']} if empty)(e.g. x.x.x/index)? ", end='') + usrInput = input() + + print() + + version = insVersion + if not usrInput.isspace(): + + if '.' in usrInput: + for release in releases: + if release['tag_name'].find(usrInput) != -1: + version = release + else: + try: + index = int(usrInput) + if index > 3 or index < 1 or (index > len(releases)): + print(f'Invalid index {usrInput} to install') + exit(1) + version = releases[index - 1] + except Exception: + print('Invalid input') + exit(1) + + print('\n================================') + print(f"Installing Fig-{version['tag_name']}") + + url = None + for asset in version['assets']: + if asset['name'].find(osName) != -1: + url = asset['browser_download_url'] + break + + if url: + install(url, path) + else: + print('Could not find artifact:') + print(version['assets']) + exit(1) + + print(f"Fig-{version['tag_name']} install successfully to {path} !") + exit(0) + +if __name__ == '__main__': + path = ospath.realpath(ospath.dirname(argv[0])) + chdir(path) + main() \ No newline at end of file diff --git a/Installer/ConsoleInstaller/requirements.txt b/Installer/ConsoleInstaller/requirements.txt index 2c8b74e..1bd1e34 100644 --- a/Installer/ConsoleInstaller/requirements.txt +++ b/Installer/ConsoleInstaller/requirements.txt @@ -1,2 +1,4 @@ requests -tqdm \ No newline at end of file +tqdm +pyinstaller +json diff --git a/Logo/Logo1024x1024.ico b/Logo/Logo1024x1024.ico new file mode 100644 index 0000000000000000000000000000000000000000..dba9ecae15cc5f585c9bff9c7126b9278a024902 GIT binary patch literal 16095 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 mDz@m1cSDnEYJP^2htk*j%DG-T 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 V5Ulp`K1Q1ks3~bFR?AyO{6FLw!(IRY literal 0 HcmV?d00001 diff --git a/src/Core/core.hpp b/src/Core/core.hpp index c842c27..058907c 100644 --- a/src/Core/core.hpp +++ b/src/Core/core.hpp @@ -4,7 +4,7 @@ #include #include -#define __FCORE_VERSION "0.3.5-alpha" +#define __FCORE_VERSION "0.3.6-alpha" #if defined(_WIN32) #define __FCORE_PLATFORM "Windows" diff --git a/xmake.lua b/xmake.lua index 6fbcdaf..c905785 100644 --- a/xmake.lua +++ b/xmake.lua @@ -7,6 +7,8 @@ target("Fig") set_kind("binary") set_languages("c++23") + + add_ldflags("-static", {force = true}) if is_plat("linux") then -- Linux: clang + libc++ set_toolchains("clang")