Skip to content

Offline Package

Offline Package #21

Workflow file for this run

name: Offline Package
on:
workflow_dispatch:
inputs:
docker_version:
description: Docker static binary version
required: false
default: "29.5.0"
package_version:
description: Optional package version directory in OSS
required: false
default: ""
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
package:
strategy:
fail-fast: false
matrix:
include:
- arch: amd64
artifact: monkeycode-offline-linux-amd64
- arch: arm64
artifact: monkeycode-offline-linux-arm64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.25.8"
cache-dependency-path: backend/go.sum
- uses: pnpm/action-setup@v4
with:
version: 9
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "pnpm"
cache-dependency-path: frontend/pnpm-lock.yaml
- name: Build frontend dist
working-directory: frontend
run: |
pnpm install --frozen-lockfile
pnpm run build:offline
rm -rf docker/dist
mkdir -p docker/dist
cp -R dist/. docker/dist/
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build offline package
working-directory: backend
env:
ARCH: ${{ matrix.arch }}
DOCKER_VERSION: ${{ inputs.docker_version || '29.0.4' }}
PACKAGE_TGZ: "true"
AWS_ACCESS_KEY_ID: ${{ secrets.OSS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.OSS_ACCESS_KEY_SECRET }}
AWS_DEFAULT_REGION: ${{ secrets.OSS_REGION || 'us-east-1' }}
AWS_EC2_METADATA_DISABLED: "true"
AWS_REQUEST_CHECKSUM_CALCULATION: when_required
AWS_RESPONSE_CHECKSUM_VALIDATION: when_required
OSS_ENDPOINT: ${{ secrets.OSS_ENDPOINT }}
OSS_ADDRESSING_STYLE: ${{ secrets.OSS_ADDRESSING_STYLE || 'virtual' }}
run: ./scripts/build-offline-package.sh
- name: Upload package to private OSS
env:
AWS_ACCESS_KEY_ID: ${{ secrets.OSS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.OSS_ACCESS_KEY_SECRET }}
AWS_DEFAULT_REGION: ${{ secrets.OSS_REGION || 'us-east-1' }}
AWS_EC2_METADATA_DISABLED: "true"
AWS_REQUEST_CHECKSUM_CALCULATION: when_required
AWS_RESPONSE_CHECKSUM_VALIDATION: when_required
OSS_ENDPOINT: ${{ secrets.OSS_ENDPOINT }}
OSS_BUCKET: ${{ secrets.OSS_BUCKET }}
OSS_PREFIX: ${{ secrets.OSS_PREFIX }}
OSS_ADDRESSING_STYLE: ${{ secrets.OSS_ADDRESSING_STYLE || 'virtual' }}
PACKAGE_VERSION: ${{ inputs.package_version }}
ARTIFACT_NAME: ${{ matrix.artifact }}
run: |
set -eu
for required in AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY OSS_ENDPOINT OSS_BUCKET; do
eval "value=\${$required:-}"
if [ -z "$value" ]; then
echo "::error::$required is required"
exit 1
fi
done
package_file="backend/dist/offline/${ARTIFACT_NAME}.tgz"
if [ ! -f "$package_file" ]; then
echo "::error::package file not found: $package_file"
exit 1
fi
version="${PACKAGE_VERSION:-}"
if [ -z "$version" ]; then
version="${GITHUB_SHA}"
fi
object_prefix="${OSS_PREFIX:-monkeycode/offline-package}"
object_prefix="${object_prefix%/}/$version"
object_uri="s3://${OSS_BUCKET}/${object_prefix}/${ARTIFACT_NAME}.tgz"
aws configure set default.s3.addressing_style "$OSS_ADDRESSING_STYLE"
aws s3 cp "$package_file" "$object_uri" --endpoint-url "$OSS_ENDPOINT" --only-show-errors
echo "package uploaded: $object_uri"