Skip to content
This repository has been archived by the owner on Feb 8, 2024. It is now read-only.

-- Arquivado por Foundation Platform dia 2024-02-08 (confirmado por leon.pereira@stone.com.br)

Notifications You must be signed in to change notification settings

stone-payments/stone-sreplatform-livecoding-challenge

Repository files navigation

SRE Platform Challenge

Bem vindo(a), e obrigado pelo seu interesse na Stone! Esse desafio será importante para te avaliarmos e para você entender melhor como é o nosso dia a dia. Por isso, pensamos em um desafio bem próximo a nossa realidade.

É importante ressaltar que nenhum código produzido por você nesse desafio será utilizado na Stone, tudo que for feito será utilizado apenas para te avaliar nesse desafio.

Essa base de código é a que utilizaremos para nosso livecoding. É importante que você se sinta confortável com ele e entenda os conceitos, além disso que esteja apto a modificar esse código durante o LiveCoding.

Resumo do Desafio

O produto do nosso time é uma plataforma interna para desenvolvedores. A plataforma é capaz de provisionar recursos para aplicações, como repositórios, pipelines de CI/CD e databases.

A plataforma é construída extendendo a API do Kubernetes usando o padrão Operator, assim ela pode ser consumida com uma abordagem de IaC (Infra as Code) ou integrada como uma API HTTP.

Você deverá implementar algumas funcionalidades em um operator que deve ser capaz de gerenciar o ciclo de vida de um Repositório do GitHub.

Um exemplo do manifesto Kubernetes que representa o CRD (Custom Resource Definition) é:

apiVersion: repositories.platform.buy4.io/v1alpha1
kind: Repository
metadata:
  name: example
spec:
  name: golang-best-practices
  owner: stone-payments
  type: OpenSource # or ClosedSource
  credentialsRef:
    name: github-credentials
    key: token

Os possíveis campos no spec do CRD são:

  • name (obrigatório): nome do repositório no GitHub.
  • owner (obrigatório): nome do owner do repositório no GitHub.
  • type (obrigatório): tipo do repositório a ser criado.
  • credentialsRef (obrigatório): referência para uma chave de um Secret que conterá um PAT (Personal Access Token) para se autenticar com a API do GitHub.
  • description (opcional): a descrição do repositório.

Como será o LiveCoding

O código neste repositório já apresenta uma implementação inicial incompleta. Você deve implementar as tarefas descritas nos entregáveis que os avaliadores te indicarem durante o LiveCoding.

Dentro deste repositório, existem duas principais pastas: client e controllers.

A pasta client contém todo código responsável por se comunicar com a API do GitHub.

A pasta controllers contém a implementação do operator Repository, que utiliza o pacote client.

É importante ressaltar que você deve utilizar o client que está neste repositório e não um sdk externo. A utilização, melhoria e implementação dele também fazem parte do desafio.

Testes também são importantes e vão ser levados em consideração no desafio.

Setup de desenvolvimento local

Durante o ciclo de desenvolvimento, recomendamos que utilize um cluster local. Isso evita faturas em cloud providers e torna o ciclo de desenvolvimento mais simples. Para isso, recomendamos que utilize qualquer uma das ferramentas abaixo:

Depois dessa instalação, siga o Quick Start do Kubebuilder para entender como utilizar o Makefile do repositório para auxiliar no seu processo de desenvolvimento.

O que é esperado do candidato para o momento da entrevista LiveCoding

Para que possamos ter uma entrevista produtiva e focar somente no código e não na configuração do ambiente, esperamos que:

  • O candidato tenha estudado e executado o código em sua estação local.
  • Que seja capaz de compartilhar sua tela (via Google Meet) para mostrar, trabalhar e executar o código de forma acompanhada pelos entrevistadores.
    • Isso implica na configuração adequada de seu enviroment Go e IDE para execução do código durante o LiveCoding.
  • Caso o candidato utilize o VisualStudio Code, sugerimos a realizar a preparação do recurso de Live Sharing do editor, que pode nos permitir uma interação mais dinâmica caso seja desejado.

Referências

Para ajudá-lo no processo de estudos sobre os assuntos, separamos alguns materiais de estudos:

Go

Kubernetes

Kubernetes Operator/Kubebuilder

Testes

About

-- Arquivado por Foundation Platform dia 2024-02-08 (confirmado por leon.pereira@stone.com.br)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published