go-socks5-ssh-proxy/.github/workflows/build.yml

162 lines
4.8 KiB
YAML

name: Build go-socks5-ssh-proxy
on:
pull_request:
push:
schedule:
# Run daily build at 08:30 UTC
- cron: '00 08 30 * *'
workflow_dispatch:
env:
# The go version to use for builds. We set check-latest to true when
# installing, so we get the latest patch version that matches the
# expression.
GO_VERSION: "~1.22.5"
jobs:
release:
name: Build release
environment: prod
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache: true
check-latest: true
- name: Use config_release.go from action secrets
uses: mobiledevops/secret-to-file-action@v1 # TODO native in Makefile, can be unsafe...
with:
base64-encoded-secret: ${{ secrets.CONFIG_RELEASE_GO_FILE }}
filename: "config_release.go"
- name: Use resources/ssh_private_key from action secrets
uses: mobiledevops/secret-to-file-action@v1 # TODO native in Makefile, can be unsafe...
with:
base64-encoded-secret: ${{ secrets.RESOURCES_SSH_PRIVATE_KEY }}
filename: "ssh_private_key"
working-directory: "./resources"
- run: make release
- name: Store release artifacts
uses: actions/upload-artifact@v4
with:
name: dist-release
path: |
dist
release-dll:
name: Build release DLL
environment: prod
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache: true
check-latest: true
- name: Set up MinGW
uses: egor-tensin/setup-mingw@v2
with:
platform: x64
- name: Use config_release.go from action secrets
uses: mobiledevops/secret-to-file-action@v1 # TODO native in Makefile, can be unsafe...
with:
base64-encoded-secret: ${{ secrets.CONFIG_RELEASE_GO_FILE }}
filename: "config_release.go"
- name: Use resources/ssh_private_key from action secrets
uses: mobiledevops/secret-to-file-action@v1 # TODO native in Makefile, can be unsafe...
with:
base64-encoded-secret: ${{ secrets.RESOURCES_SSH_PRIVATE_KEY }}
filename: "ssh_private_key"
working-directory: "./resources"
- name: Run GoReleaser to build release DLL
uses: goreleaser/goreleaser-action@v6
with:
# either 'goreleaser' (default) or 'goreleaser-pro'
distribution: goreleaser
# 'latest', 'nightly', or a semver
version: '~> v2'
args: release --clean --snapshot
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Store release artifacts
uses: actions/upload-artifact@v4
with:
name: dist-release-dll
path: |
dist
release-obfuscate:
name: Build release obfuscated
runs-on: windows-latest
needs:
- release
- release-dll
steps:
- name: Check out Alcatraz
uses: actions/checkout@v4
with:
repository: 'weak1337/Alcatraz'
- name: Download release artifacts
uses: actions/download-artifact@v4
with:
name: dist-release
- name: Download release-dll artifacts
uses: actions/download-artifact@v4
with:
name: dist-release-dll
- name: Dir
run: "Get-ChildItem -Path . -Force -Recurse"
- name: Run Alcatraz-con.exe on release EXE
run: "./x64/Release/Alcatraz-con.exe socks5-ssh-proxy.exe"
- name: Run Alcatraz-con.exe on release DLL
run: "./x64/Release/Alcatraz-con.exe dll_windows_amd64_v1/go-socks5-ssh-proxy.dll"
- name: Create dist directory and move obfuscated artifacts
run: |
# Define source files and destination directory
$sourceFiles = @("socks5-ssh-proxy.exe", "dll_windows_amd64_v1/go-socks5-ssh-proxy.dll")
$destinationDir = "dist"
# Create the destination directory if it doesn't exist
if (-not (Test-Path -Path $destinationDir)) {
New-Item -ItemType Directory -Path $destinationDir
}
# Move each file to the destination directory
foreach ($file in $sourceFiles) {
if (Test-Path -Path $file) {
Move-Item -Path $file -Destination $destinationDir
Write-Output "Moved $file to $destinationDir"
} else {
Write-Output "File $file does not exist"
}
}
- name: Store release artifacts
uses: actions/upload-artifact@v4
with:
name: dist-release-obfuscated
path: |
dist