一、编译IOS镜像 1.1 编译 起因是公司电脑使用的Win11 23H2
的预览版,这个预览版系统的生命周期只到2024-09-18
,到期后就会强制每两小时重启 。这是Windows强制升级系统的一种手段。
虽然公司里的台式电脑目前用不到,但是里面还保留许多旧项目的资料,所以为了保留数据,我需要尽快转为正式版。
目前Windows 11
系统正式版已经更新到了24H2
版本,不过总体体验并不好。很多自带功能是强制捆绑给用户使用的,且没有开放给用户关闭或者切换开关。
我需要保留新系统的新特性,并且我还不要强制捆绑给用户使用的那些功能。结合自己的使用经历、以及查阅官方文档,确定了要制作Win11 22H2 22621.2283
这个版本的镜像。
访问UUPdump 这个平台,根据自己的架构,选择对应的系统版本。
UUPdump 是一个社区驱动的网站和工具,旨在帮助用户下载和生成 Windows 更新包,注意这并不是由官方维护的!
下载工具后,完成IOS镜像的编译。
之后进行镜像的安装。
等待安装完毕即可。
1.2 参考致谢 2023 年 9 月 12 日 — KB5030219 (OS 内部版本 22621.2283) - Microsoft 支持
UUP dump
二、文件分片与合并 编译后的镜像,想从上海传给武汉的电脑,就需要一个不限速的服务作为媒介。我尝试了123网盘,但是这个盘下载时的网络经常断不稳定,故使用了小米云盘,但是小米云盘又限制单个文件大小。
由此我编写了文件分片与合并服务 。
单线程顺序将文件进行分片与合并 使用内存缓冲区技术。即使操作很大的文件,运行内存也只会在1MB
左右 通过命令行选项使用 放一张运行图。
这种工具使用Go
来写会好很多,但是Go
本身又不熟悉,用不精通。就比如如何在运行时,更精巧地压榨程序内存、发挥更大性能,在这一块上没有Java
用得精。
想把Jar
编译成EXE
,发现Java
的Graalvm
好垃圾,居然不支持日志组件SLFJ
,我排查了后,发现是因为SLFJ
中用到了好多反射,导致Graalvm
失效。
三、配置GithubActions 3.1 Java 我的需求是按照如下图实现功能。
创建目录.github/workflows
,在该目录下随意创建一个yml文件。比如build.yml
,内容如下。
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 name: Build, Package, and Release Java Project on: push: tags: - 'v*' jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 8 uses: actions/setup-java@v3 with: java-version: '8' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn package -DskipTests - run: mkdir staging && cp target/*.jar staging - name: Upload JAR artifact uses: actions/upload-artifact@v4 with: name: ${{ github.ref_name }} path: staging retention-days: 1 - name: Create GitHub Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: Release-${{ github.ref }} draft: false prerelease: false - run: zip ${{ github.ref_name }}.zip staging/* - name: Upload JAR to Release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ${{ github.ref_name }}.zip asset_name: ${{ github.ref_name }}.zip asset_content_type: application/zip
期间,遇到了 Resource not accessible by integration
这个错误,是因为 Actions
没有写权限导致的,按照下图进行授权即可。
最终执行结果
3.2 Go 踩坑相关的,参照上面Java的Action即可。下面放一个Golang多平台编译的Action,更直观的学习Action。
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 name: Build, Package, and Release Go Binaries on: push: tags: - 'v*' jobs: create-release: runs-on: ubuntu-latest steps: - name: Create GitHub Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: Release-${{ github.ref }} draft: false prerelease: false build: needs: create-release runs-on: ubuntu-latest strategy: matrix: os: [ windows,linux,darwin ] arch: [ amd64,arm64 ] steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.20.0' - name: Build binary env: GOOS: ${{ matrix.os }} GOARCH: ${{ matrix.arch }} run: | mkdir -p dist/ EXT="" if [ "${GOOS}" = "windows" ]; then EXT=".exe" fi echo "current GOOS: ${GOOS}" echo "EXT: ${EXT}" go build -o dist/hash-it_${{ github.ref_name }}_${{ matrix.os }}_${{ matrix.arch }}${EXT} . echo "$(ls dist)" - name: Create zip file env: GOOS: ${{ matrix.os }} GOARCH: ${{ matrix.arch }} run: | cd dist EXT="" if [ "${GOOS}" = "windows" ]; then EXT=".exe" fi echo "current GOOS: ${GOOS}" echo "EXT: ${EXT}" zip -r hash-it_${{ github.ref_name }}_${{ matrix.os }}_${{ matrix.arch }}.zip hash-it_${{ github.ref_name }}_${{ matrix.os }}_${{ matrix.arch }}${EXT} echo "$(ls)" - name: Upload artifacts uses: actions/upload-artifact@v4 env: GOOS: ${{ matrix.os }} GOARCH: ${{ matrix.arch }} with: name: hash-it_${{ github.ref_name }}_${{ matrix.os }}_${{ matrix.arch }} path: dist/hash-it_${{ github.ref_name }}_${{ matrix.os }}_${{ matrix.arch }}.zip retention-days: 1 - name: Upload zip files to Release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | for zip_file in dist/*.zip; do asset_name=$(basename $zip_file) gh release upload ${{ github.ref_name }} $zip_file --clobber done
3.3 参考致谢 Quickstart for GitHub Actions - GitHub Docs
Contexts - GitHub Docs
Create Release Error in Github Actions - Developers: Plugin & API - Obsidian Forum
Building and testing Java with Maven - GitHub Docs
starter-workflows/ci at main · actions/starter-workflows
actions/upload-release-asset: An Action to upload a release asset via the GitHub Release API