diff --git a/.github/workflows/budibase_ci.yml b/.github/workflows/budibase_ci.yml index 96db14b77a..0380f92253 100644 --- a/.github/workflows/budibase_ci.yml +++ b/.github/workflows/budibase_ci.yml @@ -7,12 +7,10 @@ on: branches: - master - develop - - next pull_request: branches: - master - develop - - next jobs: build: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1f2cb80d1d..fa06e31a72 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,34 +1,22 @@ name: Budibase Release on: - workflow_dispatch: - inputs: - name: - description: 'Version' - required: false - default: '0.8' - - # Trigger the workflow on push with tags, - # but only for the master branch push: - tags: - - 'v*' + branches: + - master + pull_request: + branches: + - master jobs: release: - runs-on: ${{ matrix.os }} - - # Platforms to build on/for - strategy: - matrix: - os: [macos-latest, ubuntu-latest, windows-latest] - node-version: [12.x] + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: - node-version: ${{ matrix.node-version }} + node-version: 12.x - run: yarn - run: yarn lint - run: yarn bootstrap @@ -39,42 +27,14 @@ jobs: SENTRY_DSN: ${{ secrets.SENTRY_DSN }} - run: yarn test - - name: Prepare for app notarization (macOS) - if: startsWith(matrix.os, 'macos') - # Import Apple API key for app notarization on macOS - run: | - xattr -cr * - mkdir -p ~/private_keys/ - echo '${{ secrets.api_key }}' > ~/private_keys/AuthKey_${{ secrets.api_key_id }}.p8 - - - - name: Build/release Electron app - uses: samuelmeuli/action-electron-builder@v1 - with: - package_root: packages/server - - # GitHub token, automatically provided to the action - # (No need to define this secret in the repo settings) - github_token: ${{ secrets.github_token }} - - mac_certs: ${{ secrets.mac_certs }} - mac_certs_password: ${{ secrets.mac_certs_password }} - windows_certs: ${{ secrets.windows_certs }} - windows_certs_password: ${{ secrets.windows_certs_password }} - - # release the app after building - release: ${{ startsWith(github.ref, 'refs/tags/v') }} - env: - # macOS notarization API key - API_KEY_ID: ${{ secrets.api_key_id }} - API_KEY_ISSUER_ID: ${{ secrets.api_key_issuer_id }} + # - name: Publish budibase packages to NPM + # env: + # NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + # run: yarn release - name: Build/release Docker images - # only run the docker image build on linux, easiest way - if: startsWith(matrix.os, 'ubuntu') env: DOCKER_USER: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }} - run: | - docker login -u $DOCKER_USER -p $DOCKER_PASSWORD - yarn build:docker + run: docker login -u $DOCKER_USER -p $DOCKER_PASSWORD + run: yarn build:docker \ No newline at end of file diff --git a/hosting/bootstrap.sh b/hosting/bootstrap.sh deleted file mode 100755 index 4e15481e64..0000000000 --- a/hosting/bootstrap.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -GITHUB_BASE_URL=https://raw.githubusercontent.com/Budibase/budibase/master/hosting - -if ! [ -x "$(command -v wget)" ]; then - echo 'Error: wget is not installed. Please install it for your operating system.' >&2 - exit 1 -fi - -fetch_config_files() { - wget $GITHUB_BASE_URL/docker-compose.yaml - wget $GITHUB_BASE_URL/envoy.yaml - wget $GITHUB_BASE_URL/hosting.properties - wget $GITHUB_BASE_URL/start.sh -} - -fetch_config_files - -# Start budibase -docker-compose --env-file hosting.properties up -d diff --git a/hosting/docker-compose.yaml b/hosting/docker-compose.yaml index 00c93ca1c6..73bbcfc39b 100644 --- a/hosting/docker-compose.yaml +++ b/hosting/docker-compose.yaml @@ -48,6 +48,7 @@ services: REDIS_URL: redis-service:6379 REDIS_PASSWORD: ${REDIS_PASSWORD} depends_on: + - redis-service - minio-service - couch-init diff --git a/hosting/scripts/linux/release-to-docker-hub.sh b/hosting/scripts/linux/release-to-docker-hub.sh index 1661fed9f0..c66faf1b89 100755 --- a/hosting/scripts/linux/release-to-docker-hub.sh +++ b/hosting/scripts/linux/release-to-docker-hub.sh @@ -3,13 +3,20 @@ tag=$1 tag=${tag:-latest} + pushd ../../build docker-compose build --force app-service docker-compose build --force worker-service -docker tag build_app-service budibase/budibase-apps:$tag -docker tag build_worker-service budibase/budibase-worker:$tag +echo "Tagging images with SHA: $GITHUB_SHA and version: $BUDIBASE_VERSION" -docker push budibase/budibase-apps -docker push budibase/budibase-worker +docker tag build_app-service budibase/apps:$tag +docker tag build_worker-service budibase/worker:$tag + +# Tag with git sha +docker tag build_app-service budibase/apps:$GITHUB_SHA +docker tag build_worker-service budibase/worker:$GITHUB_SHA + +docker push budibase/apps +docker push budibase/worker popd diff --git a/hosting/start.sh b/hosting/start.sh deleted file mode 100755 index b32098a3b7..0000000000 --- a/hosting/start.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -docker-compose --env-file hosting.properties up diff --git a/hosting/update.sh b/hosting/update.sh deleted file mode 100644 index 3ccd5e59d0..0000000000 --- a/hosting/update.sh +++ /dev/null @@ -1 +0,0 @@ -docker-compose --env-file hosting.properties pull && ./start.sh diff --git a/package.json b/package.json index 4d26be9941..e2ca53a5dc 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "initialise": "lerna run initialise", "publishdev": "lerna run publishdev", "publishnpm": "yarn build && lerna publish --force-publish", + "release": "lerna publish --force-publish --yes", "restore": "yarn run clean && yarn run bootstrap && yarn run build", "nuke": "yarn run nuke:packages && yarn run nuke:docker", "nuke:packages": "yarn run restore", diff --git a/packages/builder/src/stores/portal/auth.js b/packages/builder/src/stores/portal/auth.js index baf5f1bfb4..c642a5708d 100644 --- a/packages/builder/src/stores/portal/auth.js +++ b/packages/builder/src/stores/portal/auth.js @@ -8,11 +8,11 @@ export function createAuthStore() { subscribe: store.subscribe, checkAuth: async () => { const response = await api.get("/api/admin/users/self") - const user = await response.json() - if (response.status === 200) { - store.update(state => ({ ...state, user })) - } else { + if (response.status !== 200) { store.update(state => ({ ...state, user: null })) + } else { + const user = await response.json() + store.update(state => ({ ...state, user })) } }, login: async creds => { diff --git a/packages/cli/src/analytics/Client.js b/packages/cli/src/analytics/Client.js index d97fb1abfa..a3b43b5ea1 100644 --- a/packages/cli/src/analytics/Client.js +++ b/packages/cli/src/analytics/Client.js @@ -15,7 +15,7 @@ class AnalyticsClient { } capture(event) { - if (this.manager.config.analyticsDisabled) return + if (this.configManager.config.analyticsDisabled) return this.client.capture(event) } diff --git a/packages/cli/src/analytics/index.js b/packages/cli/src/analytics/index.js index 3d8ea8c5a7..d85323d1d0 100644 --- a/packages/cli/src/analytics/index.js +++ b/packages/cli/src/analytics/index.js @@ -11,13 +11,13 @@ async function optOut() { client.disable() console.log( success( - "Successfully opted out of budibase analytics. You can opt in at any time by running 'budi analytics opt-in'" + "Successfully opted out of Budibase analytics. You can opt in at any time by running 'budi analytics opt-in'" ) ) } catch (err) { console.log( error( - "Error opting out of budibase analytics. Please try again later.", + "Error opting out of Budibase analytics. Please try again later.", err ) ) @@ -30,12 +30,12 @@ async function optIn() { client.enable() console.log( success( - "Successfully opted in to budibase analytics. Thank you for helping us make budibase better!" + "Successfully opted in to Budibase analytics. Thank you for helping us make Budibase better!" ) ) } catch (err) { console.log( - error("Error opting in to budibase analytics. Please try again later.") + error("Error opting in to Budibase analytics. Please try again later.") ) } } @@ -51,12 +51,12 @@ async function status() { } const command = new Command(`${CommandWords.ANALYTICS}`) - .addHelp("Control the analytics you send to budibase.") - .addSubOption("--optin", "Opt in to sending analytics to budibase", optIn) - .addSubOption("--optout", "Opt out of sending analytics to budibase.", optOut) + .addHelp("Control the analytics you send to Budibase.") + .addSubOption("--optin", "Opt in to sending analytics to Budibase", optIn) + .addSubOption("--optout", "Opt out of sending analytics to Budibase.", optOut) .addSubOption( "--status", - "Check whether you are currently opted in to budibase analytics.", + "Check whether you are currently opted in to Budibase analytics.", status ) diff --git a/packages/cli/src/constants.js b/packages/cli/src/constants.js index a5d24514b8..fe7c61f4fa 100644 --- a/packages/cli/src/constants.js +++ b/packages/cli/src/constants.js @@ -16,4 +16,4 @@ exports.AnalyticsEvents = { } exports.BUDIBASE_POSTHOG_URL = "https://posthog.budi.live" -exports.BUDIBASE_POSTHOG_TOKEN = process.env.BUDIBASE_POSTHOG_TOKEN +exports.BUDIBASE_POSTHOG_TOKEN = "Oeq9KzIpZYaNsXIvHw5QTZWNpfiG_EOjAOpjTyAiitY" diff --git a/packages/server/src/api/controllers/dev.js b/packages/server/src/api/controllers/dev.js index 86b9a11c23..2e90fb83e7 100644 --- a/packages/server/src/api/controllers/dev.js +++ b/packages/server/src/api/controllers/dev.js @@ -16,7 +16,9 @@ async function redirect(ctx, method) { body: ctx.request.body, }) ) - ctx.body = await response.json() + if (response.status !== 200) { + ctx.throw(response.status, response.statusText) + } const cookie = response.headers.get("set-cookie") if (cookie) { ctx.set("set-cookie", cookie) diff --git a/packages/server/src/utilities/queue/inMemoryQueue.js b/packages/server/src/utilities/queue/inMemoryQueue.js index 6c1d73801d..1a9fc90d5c 100644 --- a/packages/server/src/utilities/queue/inMemoryQueue.js +++ b/packages/server/src/utilities/queue/inMemoryQueue.js @@ -73,6 +73,14 @@ class InMemoryQueue { this._messages.push(newJob(this._name, msg)) this._emitter.emit("message") } + + /** + * This removes a cron which has been implemented, this is part of Bull API. + * @param {string} cronJobId The cron which is to be removed. + */ + removeRepeatableByKey(cronJobId) { + // TODO: implement for testing + } } module.exports = InMemoryQueue