Integrate with standard release pipeline

This commit is contained in:
Rory Powell 2022-02-15 13:24:06 +00:00
parent dbfc46c67d
commit ba57813674
18 changed files with 52 additions and 315 deletions

View File

@ -1,47 +0,0 @@
name: Budibase Release Staging (Pro)
# Temporary pipeline - eventualy this will be merged with the regular one
on:
push:
branches:
- pro-develop
paths:
- ".aws/**"
- ".github/**"
- "charts/**"
- "packages/**"
- "scripts/**"
- "package.json"
- "yarn.lock"
- "package.json"
- "yarn.lock"
env:
POSTHOG_TOKEN: ${{ secrets.POSTHOG_TOKEN }}
INTERCOM_TOKEN: ${{ secrets.INTERCOM_TOKEN }}
POSTHOG_URL: ${{ secrets.POSTHOG_URL }}
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 14.x
- run: yarn
- run: yarn bootstrap
- run: yarn lint
- run: yarn build
- run: yarn test
- name: Build/release Docker images (Pro)
run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
yarn build:docker:develop:pro
yarn release:docker:pro develop
env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }}

View File

@ -1,41 +0,0 @@
name: Budibase Release Selfhost (Pro)
# Temporary pipeline - eventualy this will be merged with the regular one
on:
workflow_dispatch:
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
node-version: 14.x
fetch_depth: 0
- name: Tag and release Docker images (Pro) (Self Host)
run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
# Get latest release version
release_version=$(cat lerna.json | jq -r '.version')
echo "RELEASE_VERSION=$release_version" >> $GITHUB_ENV
release_tag=v$release_version
# Pull apps and worker images
docker pull budibase/apps-pro:$release_tag
docker pull budibase/worker-pro:$release_tag
# Tag apps and worker images
docker tag budibase/apps-pro:$release_tag budibase/apps-pro:$SELFHOST_TAG
docker tag budibase/worker-pro:$release_tag budibase/worker-pro:$SELFHOST_TAG
# Push images
docker push budibase/apps-pro:$SELFHOST_TAG
docker push budibase/worker-pro:$SELFHOST_TAG
env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }}
SELFHOST_TAG: latest

View File

@ -1,53 +0,0 @@
name: Budibase Release (Pro)
# Temporary pipeline - eventualy this will be merged with the regular one
on:
push:
branches:
- pro-master
paths:
- ".aws/**"
- ".github/**"
- "charts/**"
- "packages/**"
- "scripts/**"
- "package.json"
- "yarn.lock"
- "package.json"
- "yarn.lock"
env:
POSTHOG_TOKEN: ${{ secrets.POSTHOG_TOKEN }}
INTERCOM_TOKEN: ${{ secrets.INTERCOM_TOKEN }}
POSTHOG_URL: ${{ secrets.POSTHOG_URL }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 14.x
- run: yarn
- run: yarn bootstrap
- run: yarn lint
- run: yarn build
- run: yarn test
- name: "Get Previous tag"
id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@v1"
- name: Build/release Docker images
run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
yarn build:docker:pro
yarn release:docker:pro ${BUDIBASE_RELEASE_VERSION}
env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }}
BUDIBASE_RELEASE_VERSION: ${{ steps.previoustag.outputs.tag }}

View File

@ -1,38 +1,38 @@
name: Budibase Release Staging name: Budibase Release Staging
on: on:
push: push:
branches: branches:
- develop - develop
paths: paths:
- ".aws/**" - '.aws/**'
- ".github/**" - '.github/**'
- "charts/**" - 'charts/**'
- "packages/**" - 'packages/**'
- "scripts/**" - 'scripts/**'
- "package.json" - 'package.json'
- "yarn.lock" - 'yarn.lock'
- "package.json" - 'package.json'
- "yarn.lock" - 'yarn.lock'
env: env:
POSTHOG_TOKEN: ${{ secrets.POSTHOG_TOKEN }} POSTHOG_TOKEN: ${{ secrets.POSTHOG_TOKEN }}
INTERCOM_TOKEN: ${{ secrets.INTERCOM_TOKEN }} INTERCOM_TOKEN: ${{ secrets.INTERCOM_TOKEN }}
POSTHOG_URL: ${{ secrets.POSTHOG_URL }} POSTHOG_URL: ${{ secrets.POSTHOG_URL }}
jobs: jobs:
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: actions/setup-node@v1 - uses: actions/setup-node@v1
with: with:
node-version: 14.x node-version: 14.x
- run: yarn - run: yarn
- run: yarn bootstrap - run: yarn bootstrap
- run: yarn lint - run: yarn lint
- run: yarn build - run: yarn build
- run: yarn test - run: yarn test
- name: Configure AWS Credentials - name: Configure AWS Credentials
@ -45,7 +45,7 @@ jobs:
- name: Publish budibase packages to NPM - name: Publish budibase packages to NPM
env: env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: | run: |
# setup the username and email. I tend to use 'GitHub Actions Bot' with no email by default # setup the username and email. I tend to use 'GitHub Actions Bot' with no email by default
git config user.name "Budibase Staging Release Bot" git config user.name "Budibase Staging Release Bot"
git config user.email "<>" git config user.email "<>"
@ -53,10 +53,10 @@ jobs:
yarn release:develop yarn release:develop
- name: Build/release Docker images - name: Build/release Docker images
run: | run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
yarn build
yarn build:docker:develop yarn build:docker:develop
yarn release:docker develop
env: env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }} DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }} DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }}

View File

@ -1,19 +1,19 @@
name: Budibase Release name: Budibase Release
on: on:
push: push:
branches: branches:
- master - master
paths: paths:
- ".aws/**" - '.aws/**'
- ".github/**" - '.github/**'
- "charts/**" - 'charts/**'
- "packages/**" - 'packages/**'
- "scripts/**" - 'scripts/**'
- "package.json" - 'package.json'
- "yarn.lock" - 'yarn.lock'
- "package.json" - 'package.json'
- "yarn.lock" - 'yarn.lock'
env: env:
POSTHOG_TOKEN: ${{ secrets.POSTHOG_TOKEN }} POSTHOG_TOKEN: ${{ secrets.POSTHOG_TOKEN }}
@ -53,15 +53,15 @@ jobs:
echo //registry.npmjs.org/:_authToken=${NPM_TOKEN} >> .npmrc echo //registry.npmjs.org/:_authToken=${NPM_TOKEN} >> .npmrc
yarn release yarn release
- name: "Get Previous tag" - name: 'Get Previous tag'
id: previoustag id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@v1" uses: "WyriHaximus/github-action-get-previous-tag@v1"
- name: Build/release Docker images - name: Build/release Docker images
run: | run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
yarn build
yarn build:docker yarn build:docker
yarn release:docker ${BUDIBASE_RELEASE_VERSION}
env: env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }} DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }} DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }}

View File

@ -31,34 +31,6 @@ services:
- worker-service - worker-service
- redis-service - redis-service
app-service-pro:
restart: always
image: app-service-pro
container_name: bbapps-pro
ports:
- "${APP_PORT}:4002"
environment:
SELF_HOSTED: 1
COUCH_DB_URL: http://${COUCH_DB_USER}:${COUCH_DB_PASSWORD}@couchdb-service:5984
WORKER_URL: http://worker-service:4003
MINIO_URL: http://minio-service:9000
MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY}
MINIO_SECRET_KEY: ${MINIO_SECRET_KEY}
INTERNAL_API_KEY: ${INTERNAL_API_KEY}
BUDIBASE_ENVIRONMENT: ${BUDIBASE_ENVIRONMENT}
PORT: 4002
JWT_SECRET: ${JWT_SECRET}
LOG_LEVEL: info
SENTRY_DSN: https://a34ae347621946bf8acded18e5b7d4b8@o420233.ingest.sentry.io/5338131
ENABLE_ANALYTICS: "true"
REDIS_URL: redis-service:6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
volumes:
- ./logs:/logs
depends_on:
- worker-service
- redis-service
worker-service: worker-service:
restart: always restart: always
image: budibase.docker.scarf.sh/budibase/worker image: budibase.docker.scarf.sh/budibase/worker

View File

@ -1,16 +0,0 @@
#!/bin/bash
tag=$1
if [[ ! "$tag" ]]; then
echo "No tag present. You must pass a tag to this script"
exit 1
fi
echo "Tagging images with tag: $tag"
docker tag app-service-pro budibase/apps-pro:$tag
docker tag worker-service-pro budibase/worker-pro:$tag
docker push --all-tags budibase/apps-pro
docker push --all-tags budibase/worker-pro

View File

@ -1,52 +0,0 @@
const fetch = require('node-fetch')
const fs = require('fs')
const util = require('util')
const streamPipeline = util.promisify(require('stream').pipeline)
async function download (url, opts, path) {
const response = await fetch(url, opts)
if (!response.ok) throw new Error(`unexpected response ${response.statusText}`)
await streamPipeline(response.body, fs.createWriteStream(path))
}
const install = async () => {
// get github token
const token = process.env.GITHUB_TOKEN
if (!token) {
throw new Error("Missing token")
}
// get version from package.json
let packageJson = JSON.parse(fs.readFileSync('package.json'))
let version = packageJson.dependencies['@budibase/pro']
if (version.startsWith('^')) {
version = version.substring(1)
}
const ghVersion = `v${version}`
// get the package url
// TODO: Add semver support
// TODO: Potentially can use yarn to download directly from github if pro becomes a non monorepo
const resp = await fetch(`https://api.github.com/repos/budibase/budibase-pro/releases`, {
headers: {
Authorization: `token ${token}`,
Accept: "application/vnd.github.v3.raw"
}
})
if (!resp.ok) {
throw new Error("Failed to get release info. Aborting")
}
const releases = await resp.json()
const release = releases.filter(r => r.name === ghVersion)[0]
const url = release.assets.filter(a => a.name === "pro.zip")[0].url
console.log("Downloading pro package")
// download the package
await download(url, { headers: { Authorization: `token ${token}`, Accept: 'application/octet-stream' }}, './pro.zip')
}
install().catch(e => {
console.error(e)
process.exit(1)
})

View File

@ -1,8 +0,0 @@
#!/bin/bash
if [[ ! -z "${PRO}" ]]; then
echo "Installing pro package"
rm -rf node_modules/@budibase/pro
unzip pro.zip -d node_modules/@budibase
rm pro.zip
fi

View File

@ -19,7 +19,6 @@
}, },
"scripts": { "scripts": {
"setup": "node ./hosting/scripts/setup.js && yarn && yarn bootstrap && yarn build && yarn dev", "setup": "node ./hosting/scripts/setup.js && yarn && yarn bootstrap && yarn build && yarn dev",
"install:pro": "lerna run install:pro --",
"bootstrap": "lerna link && lerna bootstrap", "bootstrap": "lerna link && lerna bootstrap",
"build": "lerna run build", "build": "lerna run build",
"publishnpm": "yarn build && lerna publish --force-publish", "publishnpm": "yarn build && lerna publish --force-publish",

File diff suppressed because one or more lines are too long

View File

@ -7,6 +7,4 @@ public/
db/dev.db/ db/dev.db/
dist dist
coverage/ coverage/
watchtower-hook.json watchtower-hook.json
pro.zip
scripts/pro/*

View File

@ -17,18 +17,11 @@ ENV BUDIBASE_ENVIRONMENT=PRODUCTION
COPY . ./ COPY . ./
RUN yarn RUN yarn
RUN apt-get install unzip
# add the pro package if PRO is set
ARG PRO
ENV PRO=$PRO
RUN yarn install:pro
# build # build
RUN yarn build RUN yarn build
# Install client for oracle datasource # Install client for oracle datasource
RUN apt-get install libaio1 RUN apt-get install unzip libaio1
RUN /bin/bash -e scripts/integrations/oracle/instantclient/linux/x86-64/install.sh RUN /bin/bash -e scripts/integrations/oracle/instantclient/linux/x86-64/install.sh
EXPOSE 4001 EXPOSE 4001

View File

@ -13,12 +13,8 @@
"postbuild": "copyfiles -u 1 src/**/*.svelte dist/ && copyfiles -u 1 src/**/*.hbs dist/ && copyfiles -u 1 src/**/*.json dist/", "postbuild": "copyfiles -u 1 src/**/*.svelte dist/ && copyfiles -u 1 src/**/*.hbs dist/ && copyfiles -u 1 src/**/*.json dist/",
"test": "jest --coverage --maxWorkers=2", "test": "jest --coverage --maxWorkers=2",
"test:watch": "jest --watch", "test:watch": "jest --watch",
"predocker": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client && copyfiles -f ../../hosting/scripts/pro/install.sh scripts/pro", "predocker": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client",
"build:docker": "yarn run predocker && docker build . -t app-service --label version=$BUDIBASE_RELEASE_VERSION", "build:docker": "yarn run predocker && docker build . -t app-service --label version=$BUDIBASE_RELEASE_VERSION",
"download:pro": "node ../../hosting/scripts/pro/download.js",
"predocker:pro": "yarn run predocker && yarn download:pro",
"build:docker:pro": "yarn run predocker:pro && docker build --build-arg PRO=1 . -t app-service-pro --label version=$BUDIBASE_RELEASE_VERSION",
"install:pro": "./scripts/pro/install.sh",
"build:docs": "node ./scripts/docs/generate.js open", "build:docs": "node ./scripts/docs/generate.js open",
"run:docker": "node dist/index.js", "run:docker": "node dist/index.js",
"dev:stack:up": "node scripts/dev/manage.js up", "dev:stack:up": "node scripts/dev/manage.js up",

View File

@ -3,24 +3,9 @@ import { ExtendableContext } from "koa"
import * as env from "./environment" import * as env from "./environment"
// check we can import pro types no matter the installation method (budibase-pro or budibase) // temp for testing
import * as pro from "@budibase/pro" import * as poc from "./pro-poc"
import { poc, License } from "@budibase/pro" poc.run()
// check we can use pro types no matter the installation
const license: License = { id: "123" }
console.log(license)
// log the difference between how pro is imported
// in budibase these will be undefined
// in budibase-pro these will be defined
console.log(poc)
console.log(pro)
if (env.PRO) {
// check only pro logic runs in pro
console.log("PRO")
}
const CouchDB = require("./db") const CouchDB = require("./db")
require("@budibase/backend-core").init(CouchDB) require("@budibase/backend-core").init(CouchDB)

View File

@ -50,7 +50,6 @@ module.exports = {
JEST_WORKER_ID: process.env.JEST_WORKER_ID, JEST_WORKER_ID: process.env.JEST_WORKER_ID,
BUDIBASE_ENVIRONMENT: process.env.BUDIBASE_ENVIRONMENT, BUDIBASE_ENVIRONMENT: process.env.BUDIBASE_ENVIRONMENT,
DISABLE_ACCOUNT_PORTAL: process.env.DISABLE_ACCOUNT_PORTAL, DISABLE_ACCOUNT_PORTAL: process.env.DISABLE_ACCOUNT_PORTAL,
PRO: process.env.PRO,
// minor // minor
SALT_ROUNDS: process.env.SALT_ROUNDS, SALT_ROUNDS: process.env.SALT_ROUNDS,
LOGGER: process.env.LOGGER, LOGGER: process.env.LOGGER,

View File

@ -0,0 +1,12 @@
import * as pro from "@budibase/pro"
import { poc, License } from "@budibase/pro"
export const run = () => {
if (process.env.PRO) {
const license: License = { id: "123" }
console.log(license)
console.log(poc)
console.log(pro)
console.log("PRO")
}
}