name: build on: workflow_dispatch: env: GO_VERSION: 1.19 FLUTTER_VERSION: 3.10.6 permissions: contents: write jobs: get-release: runs-on: ubuntu-latest outputs: tag_name: ${{ steps.get-release.outputs.tag_name }} upload_url: ${{ steps.get-release.outputs.upload_url }} steps: - uses: monkeyWie/get-latest-release@v1 id: get-release with: myToken: ${{ github.token }} build-windows: runs-on: windows-latest needs: [get-release] steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v4 with: go-version: ${{ env.GO_VERSION }} - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} - name: Build env: VERSION: ${{ needs.get-release.outputs.tag_name }} run: | Invoke-WebRequest -Uri "https://github.com/jrsoftware/issrc/raw/main/Files/Languages/Unofficial/ChineseSimplified.isl" -OutFile "ChineseSimplified.isl" mv ChineseSimplified.isl "C:\Program Files (x86)\Inno Setup 6\Languages\" go build -tags nosqlite -ldflags="-w -s" -buildmode=c-shared -o ui/flutter/windows/libgopeed.dll github.com/GopeedLab/gopeed/bind/desktop cd ui/flutter flutter build windows $mingw = "C:\ProgramData\Chocolatey\lib\mingw\tools\install\mingw64\bin" $system = "C:\Windows\System32" $release = "build\windows\runner\Release\" cp $mingw\libstdc++-6.dll $release cp $mingw\libgcc_s_seh-1.dll $release cp $mingw\libwinpthread-1.dll $release cp $system\msvcp140.dll $release cp $system\vcruntime140.dll $release cp $system\vcruntime140_1.dll $release New-Item -Path build\windows\Output -ItemType Directory Compress-Archive -Path "$release*" -DestinationPath "build\windows\Output\Gopeed-$env:VERSION-windows-amd64-portable.zip" cd build/windows echo @" ; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "Gopeed" #define MyAppVersion "$($env:VERSION.substring(1))" #define MyAppPublisher "monkeyWie" #define MyAppURL "https://gopeed.com" #define MyAppExeName "gopeed.exe" [Setup] ; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{5960F34D-1E42-402C-8C85-DE2FF24CBAE4} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={autopf}\gopeed DisableProgramGroupPage=yes LicenseFile=..\..\..\..\LICENSE ; Remove the following line to run in administrative install mode (install for all users.) PrivilegesRequired=lowest OutputBaseFilename=gopeed SetupIconFile=..\..\assets\icon\icon.ico Compression=lzma SolidCompression=yes WizardStyle=modern LanguageDetectionMethod=uilanguage ShowLanguageDialog=yes [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "chinesesimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: ".\runner\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [UninstallDelete] Type: filesandordirs; Name: "{app}" [Icons] Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon [Run] Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent "@ > setup.iss iscc.exe setup.iss mv "Output\gopeed.exe" "Output\Gopeed-$env:VERSION-windows-amd64.exe" Compress-Archive -Path "Output\Gopeed-$env:VERSION-windows-amd64.exe" -DestinationPath "Output\Gopeed-$env:VERSION-windows-amd64.zip" Remove-Item -Path "Output\Gopeed-$env:VERSION-windows-amd64.exe" - name: Upload uses: shogo82148/actions-upload-release-asset@v1 with: upload_url: ${{ needs.get-release.outputs.upload_url }} asset_path: ui/flutter/build/windows/Output/* overwrite: true build-macos-arm64-lib: runs-on: ubuntu-latest needs: [get-release] steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v4 with: go-version: ${{ env.GO_VERSION }} - name: Build run: | docker pull techknowlogick/xgo:go-1.19.x go install src.techknowlogick.com/xgo@latest xgo --targets=darwin/arm64 -tags="nosqlite" -ldflags="-w -s" -buildmode=c-shared -pkg=bind/desktop -out=libgopeed . mv libgopeed-*.dylib libgopeed.dylib - uses: actions/upload-artifact@v3 with: name: macos-arm64-lib path: libgopeed.dylib build-macos: runs-on: macos-latest needs: [get-release, build-macos-arm64-lib] steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v4 with: go-version: ${{ env.GO_VERSION }} - uses: actions/setup-node@v3 with: node-version: 16 - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} - name: Install appdmg run: npm install -g appdmg - uses: actions/download-artifact@v3 with: name: macos-arm64-lib path: ui/flutter/lib-arm64 - name: Build env: VERSION: ${{ needs.get-release.outputs.tag_name }} run: | PROJECT_DIR=$(pwd) # amd64 lib go build -tags nosqlite -ldflags="-w -s" -buildmode=c-shared -o ui/flutter/lib-amd64/libgopeed.dylib github.com/GopeedLab/gopeed/bind/desktop # universal binary mkdir -p ui/flutter/macos/Frameworks cp ui/flutter/lib-amd64/libgopeed.dylib ui/flutter/macos/Frameworks/amd64-lib cp ui/flutter/lib-arm64/libgopeed.dylib ui/flutter/macos/Frameworks/arm64-lib cd ui/flutter/macos/Frameworks lipo -create -output libgopeed.dylib amd64-lib arm64-lib cd $PROJECT_DIR/ui/flutter flutter build macos cd build/macos/Build/Products/Release cat>appdmg.json<debian/debian.yaml<debian/gui/gopeed.desktop< android/app/upload-keystore.jks flutter build apk mkdir dist cp build/app/outputs/flutter-apk/app-release.apk dist/Gopeed-$VERSION-android.apk - name: Upload uses: shogo82148/actions-upload-release-asset@v1 with: upload_url: ${{ needs.get-release.outputs.upload_url }} asset_path: ui/flutter/dist/* overwrite: true build-web: runs-on: ubuntu-latest needs: [get-release] steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v4 with: go-version: ${{ env.GO_VERSION }} - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} - name: Build env: VERSION: ${{ needs.get-release.outputs.tag_name }} run: | cd ui/flutter flutter build web --web-renderer html cd ../../ cp -r ui/flutter/build/web cmd/web/dist mkdir -p dist/zip goos_arr=(windows darwin linux) goarch_arr=(386 amd64 arm64) export CGO_ENABLED=0 for goos in "${goos_arr[@]}"; do for goarch in "${goarch_arr[@]}"; do goos_name=$goos if [ $goos = "darwin" ]; then goos_name="macos" fi name=gopeed-web-$VERSION-$goos_name-$goarch dir="dist/$name/" (GOOS=$goos GOARCH=$goarch go build -tags nosqlite,web -ldflags="-s -w" -o $dir github.com/GopeedLab/gopeed/cmd/web \ && cd $dir \ && file=$(ls -AU | head -1) \ && mkdir $name \ && mv $file $name/$(echo $file | sed -e "s/web/gopeed/g") \ && zip -r ../zip/$name.zip * \ && cd ../..) \ || true done done - name: Upload uses: shogo82148/actions-upload-release-asset@v1 with: upload_url: ${{ needs.get-release.outputs.upload_url }} asset_path: dist/zip/* overwrite: true build-docker: runs-on: ubuntu-latest needs: [get-release] steps: - uses: actions/checkout@v3 - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to DockerHub uses: docker/login-action@v1 with: username: liwei2633 password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push uses: docker/build-push-action@v2 env: VERSION: ${{ needs.get-release.outputs.tag_name }} with: push: true platforms: | linux/386 linux/amd64 linux/arm64 tags: | liwei2633/gopeed:latest liwei2633/gopeed:${{ env.VERSION }}