如何在GitHub Actions中让发布的二进制文件保持可执行权限?
解决GitHub Release中二进制文件丢失可执行权限的问题
问题原因
GitHub的Artifact和Release上传机制不会保留文件的POSIX权限位,所以即便你在Action流程中执行了chmod +x,文件上传后再下载时,可执行权限仍会被清除。
可行解决方案
方案1:打包成压缩包(推荐)
将二进制文件打包成tar.gz格式,压缩包会完整保留文件的权限信息,用户解压后即可直接运行。修改你的Action配置如下:
- name: Build python script into a stand-alone binary (ubuntu) if: startsWith(matrix.os, 'ubuntu') uses: Nuitka/Nuitka-Action@main with: working-directory: src nuitka-version: main script-name: directory/main.py onefile: true output-file: main.bin - name: Make binary executable run: chmod +x ./src/build/main.bin - name: Package binary into tar.gz run: tar -czf main-ubuntu.tar.gz -C src/build main.bin - name: Upload Artifact uses: actions/upload-artifact@v3 with: name: ${{ matrix.os }} build path: main-ubuntu.tar.gz - name: Release uses: softprops/action-gh-release@v1 with: files: main-ubuntu.tar.gz
用户下载main-ubuntu.tar.gz后,执行tar -xzf main-ubuntu.tar.gz解压,得到的main.bin会自动保留可执行权限。
方案2:在Release说明中提示用户手动添加权限
如果不想打包,可以在Release的描述中添加操作提示,告诉用户下载后执行权限赋予命令:
- name: Release uses: softprops/action-gh-release@v1 with: files: src/build/main.bin body: | 使用步骤: 1. 下载main.bin文件 2. 执行 `chmod +x main.bin` 添加可执行权限 3. 运行 `./main.bin`
方案3:验证权限设置是否生效(排查基础问题)
可以在chmod步骤后添加一个验证步骤,确认权限是否成功设置:
- name: Verify executable permission run: ls -l ./src/build/main.bin
查看Action日志,如果输出中包含-rwxr-xr-x前缀,则说明权限设置成功,问题确实出在上传环节,此时优先选择方案1解决。
内容的提问来源于stack exchange,提问作者Drphoton
相关产品推荐
相关产品推荐

