Initial release production build with github actions for Darwin AMD64 and Windows AMD64

This commit is contained in:
Jerry Jacobs 2024-07-26 08:57:53 +02:00
parent c322d01d29
commit db1d1443cf
4 changed files with 50 additions and 21 deletions

View File

@ -1,5 +1,4 @@
name: GitHub Actions Demo name: Build go-socks5-ssh-proxy
run-name: ${{ github.actor }} is testing out GitHub Actions 🚀
on: on:
pull_request: pull_request:
@ -13,28 +12,41 @@ env:
# The go version to use for builds. We set check-latest to true when # 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 # installing, so we get the latest patch version that matches the
# expression. # expression.
GO_VERSION: "~1.22.3" GO_VERSION: "~1.22.5"
jobs: jobs:
Explore-GitHub-Actions: build-release:
name: Build release
environment: prod
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code - name: Check out repository code
uses: actions/checkout@v4 uses: actions/checkout@v4
- uses: actions/setup-go@v5 - uses: actions/setup-go@v5
with: with:
go-version: ${{ env.GO_VERSION }} go-version: ${{ env.GO_VERSION }}
cache: true cache: true
check-latest: true check-latest: true
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner." - name: Use config_release.go from action secrets
- name: List files in the repository uses: mobiledevops/secret-to-file-action@v1 # TODO native in Makefile, can be unsafe...
run: | with:
ls ${{ github.workspace }} base64-encoded-secret: ${{ secrets.CONFIG_RELEASE_GO_FILE }}
- run: echo "🍏 This job's status is ${{ job.status }}." filename: "config_release.go"
- run: make ci
env: - name: Use resources/ssh_private_key from action secrets
CONFIG_RELEASE_GO_FILE: ${{ secrets.CONFIG_RELEASE_GO_FILE }} 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-folder
path: |
dist

4
.gitignore vendored
View File

@ -1,7 +1,9 @@
.DS_Store .DS_Store
socks5-ssh-proxy socks5-ssh-proxy
resources/ssh_* resources/ssh_*
config_release.go config_release*.go
config_template_*.go
socks5-ssh-proxy.release socks5-ssh-proxy.release
*.base64
*.exe *.exe
*.zip *.zip

View File

@ -4,10 +4,10 @@ GO_ENV_VARS = CGO_ENABLED=0
all: socks5-ssh-proxy all: socks5-ssh-proxy
ci: secrets release ci: release
secrets:
cat $(CONFIG_RELEASE_GO_FILE) > config_release.go
release: socks5-ssh-proxy.release socks5-ssh-proxy.exe release: socks5-ssh-proxy.release socks5-ssh-proxy.exe
mkdir -v -p dist
cp -v $^ dist
test: socks5-ssh-proxy test: socks5-ssh-proxy
cp socks5-ssh-proxy ~/.ssh; cd ~/.ssh; ~/.ssh/socks5-ssh-proxy cp socks5-ssh-proxy ~/.ssh; cd ~/.ssh; ~/.ssh/socks5-ssh-proxy
@ -16,7 +16,8 @@ test-release: socks5-ssh-proxy.release
socks5-ssh-proxy: $(SOURCES) socks5-ssh-proxy: $(SOURCES)
go build -o $@ go build -o $@
socks5-ssh-proxy.release: resources $(SOURCES) socks5-ssh-proxy.release: resources $(SOURCES)
$(GO_ENV_VARS) go build -tags release -o $@ GOOS=darwin GOARCH=amd64 $(GO_ENV_VARS) go build -tags release -o $@
upx $@
win: socks5-ssh-proxy.exe win: socks5-ssh-proxy.exe
socks5-ssh-proxy.exe: resources $(GARBLE_BIN) $(SOURCES) socks5-ssh-proxy.exe: resources $(GARBLE_BIN) $(SOURCES)
GOOS=windows GOARCH=amd64 $(GARBLE_BIN) build -ldflags -H=windowsgui -tags release -o $@ GOOS=windows GOARCH=amd64 $(GARBLE_BIN) build -ldflags -H=windowsgui -tags release -o $@
@ -41,6 +42,8 @@ clean-key:
config_release.go: config_release.go:
cp config_template.go $@ cp config_template.go $@
sed -i '' 's/!release/release/g' $@ sed -i '' 's/!release/release/g' $@
config_release.go.base64: config_release.go
base64 -i $< -o $@
resources: resources/ssh_private_key resources: resources/ssh_private_key
resources/ssh_private_key: resources/ssh_private_key:
@ -49,5 +52,9 @@ resources/ssh_private_key:
@echo "=====================================" @echo "====================================="
@cat $@.pub @cat $@.pub
@echo "=====================================" @echo "====================================="
resources/ssh_private_key.base64: resources/ssh_private_key
base64 -i $< -o $@
secrets: config_release.go.base64 resources/ssh_private_key.base64
.phony: clean test win .phony: clean test win

View File

@ -0,0 +1,8 @@
# release management with github actions
* Generate `resources/ssh_private_key` with `make resources/ssh_private_key`
* Base64 encode `resources/ssh_private_key` with base64
## See also
* <https://github.com/marketplace/actions/secret-to-file>