diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index db182c24a..ab7b939e7 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -1,4 +1,4 @@ -name: Push to Docker Hub +name: Push frontend and backend to Dockerhub on: [workflow_dispatch] @@ -13,8 +13,6 @@ jobs: - name: Save commit hashes for tag id: commit uses: pr-mpt/actions-commit-hash@v2 - - name: 🔧 Set up QEMU - uses: docker/setup-qemu-action@v2 - name: 🔧 Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: 🐋 Login to Docker Hub @@ -22,9 +20,13 @@ jobs: with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Set up Depot CLI + uses: depot/setup-action@v1 - name: 📦 Build backend and export to Docker - uses: docker/build-push-action@v3 + uses: depot/build-push-action@v1 with: + project: 64mmf0n610 + token: ${{ secrets.DEPOT_PROJECT_TOKEN }} load: true context: backend tags: infisical/backend:test @@ -38,8 +40,10 @@ jobs: run: | docker compose -f .github/resources/docker-compose.be-test.yml down - name: 🏗️ Build backend and push - uses: docker/build-push-action@v3 + uses: depot/build-push-action@v1 with: + project: 64mmf0n610 + token: ${{ secrets.DEPOT_PROJECT_TOKEN }} push: true context: backend tags: infisical/backend:${{ steps.commit.outputs.short }}, @@ -56,8 +60,6 @@ jobs: - name: Save commit hashes for tag id: commit uses: pr-mpt/actions-commit-hash@v2 - - name: 🔧 Set up QEMU - uses: docker/setup-qemu-action@v2 - name: 🔧 Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: 🐋 Login to Docker Hub @@ -65,10 +67,14 @@ jobs: with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Set up Depot CLI + uses: depot/setup-action@v1 - name: 📦 Build frontend and export to Docker - uses: docker/build-push-action@v3 + uses: depot/build-push-action@v1 with: load: true + token: ${{ secrets.DEPOT_PROJECT_TOKEN }} + project: 64mmf0n610 context: frontend tags: infisical/frontend:test build-args: | @@ -83,12 +89,14 @@ jobs: run: | docker stop infisical-frontend-test - name: 🏗️ Build frontend and push - uses: docker/build-push-action@v3 + uses: depot/build-push-action@v1 with: + project: 64mmf0n610 push: true + token: ${{ secrets.DEPOT_PROJECT_TOKEN }} context: frontend tags: infisical/frontend:${{ steps.commit.outputs.short }}, infisical/frontend:latest platforms: linux/amd64,linux/arm64 build-args: | - POSTHOG_API_KEY=${{ secrets.PUBLIC_POSTHOG_API_KEY }} + POSTHOG_API_KEY=${{ secrets.PUBLIC_POSTHOG_API_KEY }} \ No newline at end of file diff --git a/.github/workflows/release_build.yml b/.github/workflows/release_build.yml index da2a29435..df00c5c92 100644 --- a/.github/workflows/release_build.yml +++ b/.github/workflows/release_build.yml @@ -1,4 +1,4 @@ -name: Go releaser +name: Build and release CLI on: push: diff --git a/README.md b/README.md index 0312669b7..329c862ae 100644 --- a/README.md +++ b/README.md @@ -337,6 +337,10 @@ Infisical officially launched as v.1.0 on November 21st, 2022. There are a lot o ## 🌎 Translations +<<<<<<< HEAD Infisical is currently aviable in English and Korean. Help us translate Infisical to your language! +======= +Infisical is currently available in English and Korean. Help us translate Infisical to your language! +>>>>>>> 9ce4a52b8da0057c2450cd7af93a8c5758c2476b You can find all the info in [this issue](https://github.com/Infisical/infisical/issues/181). diff --git a/backend/src/controllers/v2/secretController.ts b/backend/src/controllers/v2/secretController.ts index b993d3811..c2cf45f9a 100644 --- a/backend/src/controllers/v2/secretController.ts +++ b/backend/src/controllers/v2/secretController.ts @@ -7,7 +7,7 @@ const { ValidationError } = mongoose.Error; import { BadRequestError, InternalServerError, UnauthorizedRequestError, ValidationError as RouteValidationError } from '../../utils/errors'; import { AnyBulkWriteOperation } from 'mongodb'; import { SECRET_PERSONAL, SECRET_SHARED } from "../../variables"; -import { postHogClient } from '../../services'; +// import { postHogClient } from '../../services'; /** * Create secret for workspace with id [workspaceId] and environment [environment] @@ -42,19 +42,19 @@ export const createSecret = async (req: Request, res: Response) => { throw RouteValidationError({ message: error.message, stack: error.stack }) } - if (postHogClient) { - postHogClient.capture({ - event: 'secrets added', - distinctId: req.user.email, - properties: { - numberOfSecrets: 1, - workspaceId, - environment, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] - } - }); - } + // if (postHogClient) { + // postHogClient.capture({ + // event: 'secrets added', + // distinctId: req.user.email, + // properties: { + // numberOfSecrets: 1, + // workspaceId, + // environment, + // channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', + // userAgent: req.headers?.['user-agent'] + // } + // }); + // } res.status(200).send({ secret @@ -103,19 +103,19 @@ export const createSecrets = async (req: Request, res: Response) => { throw InternalServerError({ message: "Unable to process your batch create request. Please try again", stack: bulkCreateError.stack }) } - if (postHogClient) { - postHogClient.capture({ - event: 'secrets added', - distinctId: req.user.email, - properties: { - numberOfSecrets: (secretsToCreate ?? []).length, - workspaceId, - environment, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] - } - }); - } + // if (postHogClient) { + // postHogClient.capture({ + // event: 'secrets added', + // distinctId: req.user.email, + // properties: { + // numberOfSecrets: (secretsToCreate ?? []).length, + // workspaceId, + // environment, + // channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', + // userAgent: req.headers?.['user-agent'] + // } + // }); + // } res.status(200).send({ secrets @@ -158,19 +158,19 @@ export const deleteSecrets = async (req: Request, res: Response) => { throw InternalServerError() } - if (postHogClient) { - postHogClient.capture({ - event: 'secrets deleted', - distinctId: req.user.email, - properties: { - numberOfSecrets: numSecretsDeleted, - environment: environmentName, - workspaceId, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] - } - }); - } + // if (postHogClient) { + // postHogClient.capture({ + // event: 'secrets deleted', + // distinctId: req.user.email, + // properties: { + // numberOfSecrets: numSecretsDeleted, + // environment: environmentName, + // workspaceId, + // channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', + // userAgent: req.headers?.['user-agent'] + // } + // }); + // } res.status(200).send() } @@ -183,19 +183,19 @@ export const deleteSecrets = async (req: Request, res: Response) => { export const deleteSecret = async (req: Request, res: Response) => { await Secret.findByIdAndDelete(req._secret._id) - if (postHogClient) { - postHogClient.capture({ - event: 'secrets deleted', - distinctId: req.user.email, - properties: { - numberOfSecrets: 1, - workspaceId: req._secret.workspace.toString(), - environment: req._secret.environment, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] - } - }); - } + // if (postHogClient) { + // postHogClient.capture({ + // event: 'secrets deleted', + // distinctId: req.user.email, + // properties: { + // numberOfSecrets: 1, + // workspaceId: req._secret.workspace.toString(), + // environment: req._secret.environment, + // channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', + // userAgent: req.headers?.['user-agent'] + // } + // }); + // } res.status(200).send({ secret: req._secret @@ -252,19 +252,19 @@ export const updateSecrets = async (req: Request, res: Response) => { throw InternalServerError() } - if (postHogClient) { - postHogClient.capture({ - event: 'secrets modified', - distinctId: req.user.email, - properties: { - numberOfSecrets: (secretsModificationsRequested ?? []).length, - environment: environmentName, - workspaceId, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] - } - }); - } + // if (postHogClient) { + // postHogClient.capture({ + // event: 'secrets modified', + // distinctId: req.user.email, + // properties: { + // numberOfSecrets: (secretsModificationsRequested ?? []).length, + // environment: environmentName, + // workspaceId, + // channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', + // userAgent: req.headers?.['user-agent'] + // } + // }); + // } return res.status(200).send() } @@ -304,19 +304,19 @@ export const updateSecret = async (req: Request, res: Response) => { throw RouteValidationError({ message: "Unable to apply modifications, please try again", stack: error.stack }) } - if (postHogClient) { - postHogClient.capture({ - event: 'secrets modified', - distinctId: req.user.email, - properties: { - numberOfSecrets: 1, - environment: environmentName, - workspaceId, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] - } - }); - } + // if (postHogClient) { + // postHogClient.capture({ + // event: 'secrets modified', + // distinctId: req.user.email, + // properties: { + // numberOfSecrets: 1, + // environment: environmentName, + // workspaceId, + // channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', + // userAgent: req.headers?.['user-agent'] + // } + // }); + // } return res.status(200).send(singleModificationUpdate) } @@ -354,19 +354,19 @@ export const getSecrets = async (req: Request, res: Response) => { throw RouteValidationError({ message: "Failed to get secrets, please try again", stack: err.stack }) } - if (postHogClient) { - postHogClient.capture({ - event: 'secrets pulled', - distinctId: req.user.email, - properties: { - numberOfSecrets: (secrets ?? []).length, - environment, - workspaceId, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] - } - }); - } + // if (postHogClient) { + // postHogClient.capture({ + // event: 'secrets pulled', + // distinctId: req.user.email, + // properties: { + // numberOfSecrets: (secrets ?? []).length, + // environment, + // workspaceId, + // channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', + // userAgent: req.headers?.['user-agent'] + // } + // }); + // } return res.json(secrets) } @@ -378,20 +378,20 @@ export const getSecrets = async (req: Request, res: Response) => { * @returns */ export const getSecret = async (req: Request, res: Response) => { - if (postHogClient) { - postHogClient.capture({ - event: 'secrets pulled', - distinctId: req.user.email, - properties: { - numberOfSecrets: 1, - workspaceId: req._secret.workspace.toString(), - environment: req._secret.environment, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] - } - }); - } - + // if (postHogClient) { + // postHogClient.capture({ + // event: 'secrets pulled', + // distinctId: req.user.email, + // properties: { + // numberOfSecrets: 1, + // workspaceId: req._secret.workspace.toString(), + // environment: req._secret.environment, + // channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', + // userAgent: req.headers?.['user-agent'] + // } + // }); + // } + return res.status(200).send({ secret: req._secret }); diff --git a/backend/src/variables/integration.ts b/backend/src/variables/integration.ts index 00e817c57..ed18c5a2a 100644 --- a/backend/src/variables/integration.ts +++ b/backend/src/variables/integration.ts @@ -48,7 +48,7 @@ const INTEGRATION_OPTIONS = [ name: 'Vercel', slug: 'vercel', image: 'Vercel', - isAvailable: true, + isAvailable: false, type: 'vercel', clientId: '', clientSlug: CLIENT_SLUG_VERCEL, @@ -58,7 +58,7 @@ const INTEGRATION_OPTIONS = [ name: 'Netlify', slug: 'netlify', image: 'Netlify', - isAvailable: true, + isAvailable: false, type: 'oauth2', clientId: CLIENT_ID_NETLIFY, docsLink: '' @@ -67,7 +67,7 @@ const INTEGRATION_OPTIONS = [ name: 'GitHub', slug: 'github', image: 'GitHub', - isAvailable: true, + isAvailable: false, type: 'oauth2', clientId: CLIENT_ID_GITHUB, docsLink: '' diff --git a/frontend/components/analytics/posthog.ts b/frontend/components/analytics/posthog.ts index e0dedc7fb..8482eeb06 100644 --- a/frontend/components/analytics/posthog.ts +++ b/frontend/components/analytics/posthog.ts @@ -9,7 +9,6 @@ export const initPostHog = () => { if (typeof window !== 'undefined') { // @ts-ignore if (ENV == 'production' && TELEMETRY_CAPTURING_ENABLED) { - console.log("Outside of posthog", "POSTHOG_API_KEY", POSTHOG_API_KEY, "POSTHOG_HOST", POSTHOG_HOST) posthog.init(POSTHOG_API_KEY, { api_host: POSTHOG_HOST }); diff --git a/frontend/components/basic/Layout.tsx b/frontend/components/basic/Layout.tsx index 48399cdce..de58a90fa 100644 --- a/frontend/components/basic/Layout.tsx +++ b/frontend/components/basic/Layout.tsx @@ -211,9 +211,16 @@ export default function Layout({ children }: LayoutProps) { const intendedWorkspaceId = router.asPath .split("/") [router.asPath.split("/").length - 1].split("?")[0]; + + if ( + !["heroku", "vercel", "github", "netlify"].includes(intendedWorkspaceId) + ) { + localStorage.setItem("projectData.id", intendedWorkspaceId); + } + // If a user is not a member of a workspace they are trying to access, just push them to one of theirs if ( - intendedWorkspaceId != "heroku" && + !["heroku", "vercel", "github", "netlify"].includes(intendedWorkspaceId) && !userWorkspaces .map((workspace: { _id: string }) => workspace._id) .includes(intendedWorkspaceId) @@ -259,14 +266,14 @@ export default function Layout({ children }: LayoutProps) { .split("/") [router.asPath.split("/").length - 1].split("?")[0] ) { - router.push( - "/dashboard/" + - workspaceMapping[workspaceSelected as any] - ); localStorage.setItem( "projectData.id", `${workspaceMapping[workspaceSelected as any]}` ); + router.push( + "/dashboard/" + + workspaceMapping[workspaceSelected as any] + ); } } catch (error) { console.log(error); diff --git a/frontend/components/basic/dialog/AddServiceTokenDialog.js b/frontend/components/basic/dialog/AddServiceTokenDialog.js index f9ef6d27c..177911973 100644 --- a/frontend/components/basic/dialog/AddServiceTokenDialog.js +++ b/frontend/components/basic/dialog/AddServiceTokenDialog.js @@ -73,8 +73,6 @@ const AddServiceTokenDialog = ({ tag }); - console.log('newServiceToken', newServiceToken); - setServiceTokens(serviceTokens.concat([newServiceToken.serviceTokenData])); setServiceToken(newServiceToken.serviceToken + "." + randomBytes); }; diff --git a/frontend/public/locales/en/integrations.json b/frontend/public/locales/en/integrations.json index b72f9d87b..1fc92ca4e 100644 --- a/frontend/public/locales/en/integrations.json +++ b/frontend/public/locales/en/integrations.json @@ -4,7 +4,7 @@ "no-integrations1": "You don't have any integrations set up yet. When you do, they will appear here.", "no-integrations2": "To start, click on any of the options below. It takes 5 clicks to set up.", "available": "Platform & Cloud Integrations", - "available-text1": "Click on the itegration you want to connect. This will let your environment variables flow automatically into selected third-party services.", + "available-text1": "Click on the integration you want to connect. This will let your environment variables flow automatically into selected third-party services.", "available-text2": "Note: during an integration with Heroku, for security reasons, it is impossible to maintain end-to-end encryption. In theory, this lets Infisical decrypt yor environment variables. In practice, we can assure you that this will never be done, and it allows us to protect your secrets from bad actors online. The core Infisical service will always stay end-to-end encrypted. With any questions, reach out support@infisical.com.", "cloud-integrations": "Cloud Integrations", "framework-integrations": "Framework Integrations", diff --git a/frontend/public/locales/en/settings-members.json b/frontend/public/locales/en/settings-members.json index 91f4686e7..f0b6e586e 100644 --- a/frontend/public/locales/en/settings-members.json +++ b/frontend/public/locales/en/settings-members.json @@ -1,4 +1,4 @@ { "title": "Project Members", - "description": "This pages shows the members of the selected project." + "description": "This page shows the members of the selected project." } diff --git a/frontend/public/locales/en/signup.json b/frontend/public/locales/en/signup.json index 0fbc92951..0cdbe310b 100644 --- a/frontend/public/locales/en/signup.json +++ b/frontend/public/locales/en/signup.json @@ -1,7 +1,7 @@ { "title": "Sign Up", "og-title": "Replace .env files with 1 line of code. Sign Up for Infisical in 3 minutes.", - "og-description": "Infisical a simple end-to-end encrypted platform that enables teams to sync and manage API-keys and environemntal variables. Works with Node.js, Next.js, Gatsby, Nest.js...", + "og-description": "Infisical a simple end-to-end encrypted platform that enables teams to sync and manage API-keys and environemntal variables. Works with Node.js, Next.js, Gatsby, Nest.js...", "signup": "Sign Up", "already-have-account": "Have an account? Log in", "forgot-password": "Forgot your password?", diff --git a/i18n/README.en.md b/i18n/README.en.md index ac2f2a5b5..fb907e302 100644 --- a/i18n/README.en.md +++ b/i18n/README.en.md @@ -325,6 +325,6 @@ Infisical officially launched as v.1.0 on November 21st, 2022. However, a lot of ## 🌎 Translations -Infisical is currently aviable in English and Korean. Help us translate Infisical to your language! +Infisical is currently available in English and Korean. Help us translate Infisical to your language! You can find all the info in [this issue](https://github.com/Infisical/infisical/issues/181). \ No newline at end of file