Skip to content

Commit

Permalink
setup GH release, update docker image, use depot in CI
Browse files Browse the repository at this point in the history
  • Loading branch information
Yshayy committed Jul 31, 2023
1 parent 1a943b0 commit cd16b0c
Show file tree
Hide file tree
Showing 5 changed files with 131 additions and 26 deletions.
8 changes: 8 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,17 @@
.git
.devcontainer
node_modules
**/node_modules
packages/*/dist
/tunnel-server
/site
Dockerfile*
tsconfig.tsbuildinfo
packages/*/tsconfig.tsbuildinfo
dist/**
out/**
preevy-bin
preevy-build.tar
.dockerignore
.github
.devcontainer
55 changes: 55 additions & 0 deletions .github/workflows/gh-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# release package
name: Github Release

on:
workflow_dispatch:
push:
tags:
- "v*.*.*"

jobs:
build-binaries:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
strategy:
matrix:
arch: [x64,arm64]
platform: [linux,macos,win]
exclude:
- platform: win # need to debug it
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: depot/setup-action@v1
with:
oidc: true
- name: Build using Docker (with depot)
run: depot build --project ${{ vars.DEPOT_PROJECT_ID }} --build-arg CLI_TARGET=${{ matrix.platform }}-${{ matrix.arch }} -f Dockerfile.cli --target=cli --output=type=local,dest=./preevy-bin --progress=plain --platform=linux/${{ matrix.arch == 'x64' && 'amd64' || matrix.arch }} .
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: preevy-bin
path: ./preevy-bin/**

release:
runs-on: ubuntu-latest
needs: build-binaries
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: depot/setup-action@v1
- name: Download artifacts
uses: actions/download-artifact@v3
with:
name: preevy-bin
path: ./preevy-bin
- name: Release
uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
draft: ${{ !startsWith(github.ref, 'refs/tags/') }}
prerelease: ${{ !startsWith(github.ref, 'refs/tags/') }}
files: |
./preevy-bin/**
33 changes: 25 additions & 8 deletions Dockerfile.cli
Original file line number Diff line number Diff line change
@@ -1,18 +1,35 @@
FROM node:18-bullseye as builder
FROM node:18-bullseye as base
FROM base as deps-files
WORKDIR /app
COPY --link yarn.lock package.json .
COPY --link packages packages
RUN find . -type f -not -iname "yarn.lock" -not -iname "package.json" -delete && find . -type l -delete && find . -type d -empty -delete

FROM alpine as ldid
RUN wget -q https://github.com/ProcursusTeam/ldid/releases/download/v2.1.5-procursus7/ldid_linux_aarch64 -O /usr/bin/ldid
RUN chmod +x /usr/bin/ldid

FROM base as builder
WORKDIR /app
COPY --link . /app/
COPY --link --from=deps-files /app /app
RUN --mount=type=cache,id=livecycle/preevy-cli/yarn-cache,target=/yarn/cache \
yarn --cache-folder=/yarn/cache

RUN yarn clean && yarn build
COPY --link . .
RUN yarn build

FROM builder as pkg
ARG CLI_TARGET=macos-arm64
WORKDIR /app/packages/cli
ENV PKG_CACHE_PATH=/pkg/cache
COPY --from=ldid --link /usr/bin/ldid /usr/bin/ldid
RUN --mount=type=cache,id=livecycle/preevy-cli/pkg-cache,target=/pkg/cache \
yarn pkg --public --public-packages tslib --options max_old_space_size=4096 -t node18-alpine-arm64 .
yarn pkg --compress GZip --no-dict --public --public-packages tslib --options max_old_space_size=4096 -t node18-${CLI_TARGET} .

FROM scratch as cli
ARG CLI_TARGET=macos-arm64
COPY --link --from=pkg /app/packages/cli/preevy /preevy-${CLI_TARGET}
# use docker buildx build -f Dockerfile.cli --target=cli . --output=type=local,dest=./dist

# FROM docker:24-cli
# COPY --from=pkg /app/packages/cli/preevy /usr/bin/
# CMD [ "preevy" ]
FROM docker:24-cli as release
COPY --from=pkg /app/packages/cli/preevy /usr/bin/
CMD [ "preevy" ]
3 changes: 2 additions & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@
"topicSeparator": " "
},
"pkg": {
"assets": ["../*/static/**/*", "../compose-tunnel-agent/out/**/*", "../compose-tunnel-agent/package.json"]
"assets": ["../*/static/**/*", "../compose-tunnel-agent/out/**/*", "../compose-tunnel-agent/package.json", "../compose-tunnel-agent/Dockerfile", "../compose-tunnel-agent/.dockerignore" ],
"scripts": ["dist/commands/**/*.js", "dist/hooks/**/*.js"]
},
"scripts": {
"build": "yarn clean && tsc -b",
Expand Down
58 changes: 41 additions & 17 deletions packages/core/src/compose-tunnel-agent-client.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,63 @@
import path from 'path'
import fetch from 'node-fetch'
import retry from 'p-retry'
import { mapValues } from 'lodash'
import { mapValues, memoize } from 'lodash'
import { copyFileSync, existsSync, mkdirSync, mkdtempSync, readdirSync, statSync } from 'fs'
import { tmpdir } from 'os'
import { ComposeModel, ComposeService } from './compose/model'
import { TunnelOpts } from './ssh/url'
import { Tunnel } from './tunneling'
import { withBasicAuthCredentials } from './url'

export const COMPOSE_TUNNEL_AGENT_SERVICE_NAME = 'preevy_proxy'
export const COMPOSE_TUNNEL_AGENT_SERVICE_PORT = 3000
const COMPOSE_TUNNEL_AGENT_DIR = path.join(__dirname, '../../compose-tunnel-agent')

const baseDockerProxyService: ComposeService = {
build: {
context: COMPOSE_TUNNEL_AGENT_DIR,
},
labels: {
'preevy.access': 'private',
},
const COMPOSE_TUNNEL_AGENT_DIR = path.join(path.dirname(require.resolve('@preevy/compose-tunnel-agent')), '..')
declare let process : {
pkg?: {}
}

export const minimalModelWithDockerProxyService = (name: string): ComposeModel => ({
name,
services: {
[COMPOSE_TUNNEL_AGENT_SERVICE_NAME]: baseDockerProxyService,
},
const pkgComposeTunnelAgentDirFromSnapshot = memoize(() => {
// can't use fs.cpSync because it's not patched by pkg (https://github.com/vercel/pkg/blob/bb042694e4289a1cbc530d2938babe35ccc84a93/prelude/bootstrap.js#L600)
const copyDirRecursive = (sourceDir: string, targetDir:string) => {
if (!existsSync(targetDir)) {
mkdirSync(targetDir)
}
const files = readdirSync(sourceDir)
for (const file of files) {
const sourcePath = path.join(sourceDir, file)
const targetPath = path.join(targetDir, file)
const stat = statSync(sourcePath)
if (stat.isDirectory()) {
copyDirRecursive(sourcePath, targetPath)
} else {
copyFileSync(sourcePath, targetPath)
}
}
}
const dest = mkdtempSync(path.join(tmpdir(), 'compose-tunnel-agent'))
copyDirRecursive(path.join(__dirname, '../../compose-tunnel-agent'), dest)
return dest
})

const baseDockerProxyService = () => {
const contextDir = process?.pkg ? pkgComposeTunnelAgentDirFromSnapshot() : COMPOSE_TUNNEL_AGENT_DIR
return {
build: {
context: contextDir,
},
labels: {
'preevy.access': 'private',
},
} as ComposeService
}

export const addBaseComposeTunnelAgentService = (
model: ComposeModel,
): ComposeModel => ({
...model,
services: {
...model.services,
[COMPOSE_TUNNEL_AGENT_SERVICE_NAME]: baseDockerProxyService,
[COMPOSE_TUNNEL_AGENT_SERVICE_NAME]: baseDockerProxyService(),
},
})

Expand All @@ -52,7 +76,7 @@ export const addComposeTunnelAgentService = (
services: {
...model.services,
[COMPOSE_TUNNEL_AGENT_SERVICE_NAME]: {
...baseDockerProxyService,
...baseDockerProxyService(),
restart: 'always',
networks: Object.keys(model.networks || {}),
ports: [
Expand Down

0 comments on commit cd16b0c

Please sign in to comment.