diff --git a/.github/workflows/ci-workflow.yaml b/.github/workflows/ci-workflow.yaml new file mode 100644 index 0000000..372fd60 --- /dev/null +++ b/.github/workflows/ci-workflow.yaml @@ -0,0 +1,95 @@ +name: CI Workflow + +on: + push: + branches: + - '**' + pull_request: + branches: + - '**' + +jobs: + setup_and_test: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: ['18.x', '20.x'] + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: 'yarn' + + - name: Check Node.js version + run: node -v + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Lint code + run: yarn lint:all + + - name: Build projects + run: yarn build:all + + - name: Test projects + run: yarn test:all + + validate_commit_messages: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Ensure full git history + run: | + if [ -f $(git rev-parse --git-dir)/shallow ]; then + git fetch --prune --unshallow + else + git fetch --prune origin + fi + - name: Validate Commit Messages + run: | + commit_messages=$(git log --format=%B origin/main..HEAD) + echo "Checking commit messages: $commit_messages" + IFS=$'\n' + for message in $commit_messages; do + if [[ "$message" =~ ^Merge ]]; then + echo "Skipping merge commit: $message" + elif ! echo "$message" | grep -Pq '^(ADD:|FIX:|DEL:|UPD:) .+'; then + echo "Invalid commit message: '$message'" + echo "Commit messages must start with ADD:, FIX:, DEL:, or UPD:" + exit 1 + fi + done + echo "All commit messages adhere to the format." + + validate_branch_names: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Validate Branch Names + run: | + if [ "${{ github.event_name }}" == "pull_request" ]; then + if [ -z "${{ github.head_ref }}" ]; then + branch_name=$(echo $GITHUB_REF | sed -n 's/refs\/heads\/\([^/]*\)/\1/p') + echo "Extracted branch name from ref: $branch_name" + else + branch_name=${{ github.head_ref }} + echo "Running in a fork pull request with branch: $branch_name" + fi + else + branch_name=$(git rev-parse --abbrev-ref HEAD) + echo "Current branch: $branch_name" + fi + if ! echo "$branch_name" | grep -Eq '^(main|feature/.+|hotfix/.+)$'; then + echo "Error: Branch name $branch_name does not fit the naming convention." + exit 1 + fi + echo "Branch name fits the naming convention." diff --git a/.github/workflows/create-user-mongo-db.yml b/.github/workflows/create-user-mongo-db.yml new file mode 100644 index 0000000..0d48e3a --- /dev/null +++ b/.github/workflows/create-user-mongo-db.yml @@ -0,0 +1,10 @@ +name: Create User Mongo DB +on: + push: + branches: + - feat/atlas-mongo-db-gh-action + workflow_dispatch: + inputs: + email: + description: where to send the email + required: true diff --git a/app-config.yaml b/app-config.yaml index ad0e38e..432bc21 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -19,8 +19,8 @@ backend: client: pg connection: host: ${POSTGRES_HOST} - port: ${POSTGRES_PORT} - user: ${POSTGRES_USER} + port: ${POSTGRES_PORT} + user: ${POSTGRES_USER} password: ${POSTGRES_PASSWORD} integrations: @@ -35,7 +35,6 @@ techdocs: publisher: type: 'local' # Alternatives - 'googleGcs' or 'awsS3'. Read documentation for using alternatives. - catalog: import: entityFilename: catalog-info.yaml @@ -64,13 +63,18 @@ catalog: rules: - allow: [Template] + - type: file + target: ../../packages/backend/src/templates/initiate-deployment.yaml + rules: + - allow: [Template] + auth: # see https://backstage.io/docs/auth/ to learn about auth providers environment: development - providers: + providers: github: development: - clientId: ${GITHUB_CLIENT_ID} + clientId: ${GITHUB_CLIENT_ID} clientSecret: ${GITHUB_CLIENT_SECRET} kubernetes: @@ -80,7 +84,7 @@ kubernetes: - type: config clusters: - url: ${K8S_URL} - name: "k8s" + name: 'k8s' authProvider: serviceAccount skipTLSVerify: false skipMetricsLookup: true diff --git a/packages/app/src/components/search/SearchPage.tsx b/packages/app/src/components/search/SearchPage.tsx index 975f7ff..1788dde 100644 --- a/packages/app/src/components/search/SearchPage.tsx +++ b/packages/app/src/components/search/SearchPage.tsx @@ -27,14 +27,15 @@ import { useApi } from '@backstage/core-plugin-api'; const useStyles = makeStyles((theme: Theme) => ({ bar: { - padding: theme.spacing(2), + padding: theme.spacing(1, 0), }, filters: { padding: theme.spacing(2), + marginTop: theme.spacing(2), }, filter: { '& + &': { - marginTop: theme.spacing(2), + marginTop: theme.spacing(2.5), }, }, })); diff --git a/packages/backend/src/templates/initiate-deployment.yaml b/packages/backend/src/templates/initiate-deployment.yaml new file mode 100644 index 0000000..40c09a5 --- /dev/null +++ b/packages/backend/src/templates/initiate-deployment.yaml @@ -0,0 +1,48 @@ +apiVersion: scaffolder.backstage.io/v1beta3 +# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-template +kind: Template +metadata: + name: GKE-cluster + title: Initiate Deployment. + description: Deploy application to google cloud for the first time or update an existing deployment. +spec: + owner: user:guest + type: service + + # These parameters are used to generate the input form in the frontend, and are + # used to gather input data for the execution of the template. + parameters: + - title: Public github repo link to deploy + required: + - repoUrl + properties: + repoUrl: + title: Public github Repo to deploy + description: Provide the github repository link in the following format + pattern: ^https:\/\/github\.com\/[a-zA-Z0-9_-]+\/[a-zA-Z0-9_-] + type: string + ui:options: + allowedHosts: + - github.com + action: + title: Action + default: create + # Note changing these paramters will lead to not triggering the github actions, it must be create or update. + description: Action to perform (create new deployment for application/Update for updating an already deployed application) + enum: + - create + - update + + # These steps are executed in the scaffolder backend, using data that we gathered + # via the parameters above. + steps: + # Start a github Action to build a GKE cluster with Terraform + - id: github-action + name: Trigger Github Action + action: github:actions:dispatch + input: + workflowId: ${{parameters.action}}-image.yml + repoUrl: 'github.com?repo=idp-hosted-projects&owner=codeuniversity' + branchOrTagName: 'main' + workflowInputs: + githubRepo: ${{ parameters.repoUrl }}