🦾Como automatizar seu currículo utilizando R, R markdown, Github Actions
Tags: beginners, braziliandevs, tutorial, githubactions
Published: 2023-07-28 04:31:04

## Geral

Automatizar a criação do seu currículo é uma maneira inteligente de economizar tempo e manter suas informações sempre atualizadas. Neste artigo, vou te guiar por um processo simples usando ferramentas como Rmarkdown, GitHub Actions para automatizar a geração do seu currículo.

## Entendendo as Ferramentas 🧰

Antes de mergulharmos no processo, é importante entender as ferramentas que vamos utilizar:

- **R**: Uma linguagem de programação focada em análise estatística e visualização de dados. Vamos usar o R para criar e manipular nosso currículo.

- **Rmarkdown**: Uma extensão do R que permite combinar código, texto e elementos visuais em um único documento. Usaremos o Rmarkdown para criar o currículo de maneira estruturada.

- **GitHub Actions**: Um serviço de automação fornecido pelo GitHub que nos permite criar fluxos de trabalho personalizados. Vamos aproveitar o GitHub Actions para automatizar a geração do currículo.

- **Docker**: Uma plataforma que permite empacotar, distribuir e executar aplicativos em contêineres. Usaremos o Docker para criar um ambiente consistente para executar nosso processo de geração de currículo.

Agora que entendemos as ferramentas envolvidas, vamos seguir para o processo de automação:

## Começando

Antes de tudo, você precisará de uma conta no GitHub. Caso ainda não tenha uma, crie uma [aqui](https://github.com/join). Também é necessário ter acesso a um navegador para configurar algumas coisas.

## Passo 1: Preparar o Repositório 📦

1. Crie um novo repositório no GitHub para o seu projeto.
2. [Clone](https://github.com/girordo/data-driven-cv) o repositório para o seu computador usando o Git.

## Passo 2: Adicione o Arquivo do Currículo 📄

1. Crie um arquivo chamado `data-driven-cv.Rmd` (ou utilize o nome que quiser, lembre-se de mudar na action e que deve ser .Rmd) na raiz do seu repositório.
2. Abra o arquivo no seu editor de texto favorito.
3. O arquivo deve ter esse cabeçalho

```yaml
---
name: Seu nome
surname: Seu sobrenome
address: "Seu endereço"
profilepic: "./imgs/zero-cool.jpeg"
position: "Engenheiro de Software | Desenvolvedor Frontend"
www: "seusite.dev"
email: "seuemail@email.com"
github: seugithub
linkedin: seulinkedin
date: "`r format(Sys.time(), '%B %Y')`"
headcolor: 7d34eb # Aqui você pode escolher sua cor favorita
aboutme: "Sou um engenheiro de software com mais de 6 anos de experiência no desenvolvimento de aplicativos web modernos. Minha paixão está em criar interfaces de usuário incríveis e funcionais."
docname: Currículo
output: vitae::awesomecv
---
```

Repare que no último atributo do YAML você tem o vitae::awesomecv.

Esse é um dos modelos apenas citados, os outros estão [aqui](https://pkg.mitchelloharawild.com/vitae/#templates).

Nesta parte, as informações pessoais e de formatação do currículo são definidas. Isso inclui o nome, sobrenome, posição, links para sites, informações de contato, data de criação do currículo, cor do cabeçalho e uma breve descrição sobre você.

O arquivo deve seguir esta estrutura:

```r
---
name: Seu nome
surname: Seu sobrenome
address: "Seu endereço"
profilepic: "./imgs/zero-cool.jpeg"
position: "Engenheiro de Software | Desenvolvedor Frontend"
www: "seusite.dev"
email: "seuemail@email.com"
github: seugithub
linkedin: seulinkedin
date: "`r format(Sys.time(), '%B %Y')`"
headcolor: 7d34eb # Aqui você pode escolher sua cor favorita
aboutme: "Sou um engenheiro de software com mais de 6 anos de experiência no desenvolvimento de aplicativos web modernos. Minha paixão está em criar interfaces de usuário incríveis e funcionais."
docname: Currículo
output: vitae::awesomecv
---

{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE,
                      warning = FALSE,
                      message = FALSE)

require(xfun)

packages <- c('vitae', 'tibble', 'magrittr', 'here', 'readr', 'glue')

xfun::pkg_attach2(packages, message = FALSE)

# Nesta parte definimos o caminho e qual arquivo queremos se você seguir o tutorial passo a passo, terá que mudar o segundo parâmetro para data.R
source(file = here("data","data-generic.R"))

# Experiência

{r EMPLOYMENT}

work %>%
  detailed_entries(
    with = title,
    what = unit,
    why = detail,
    when = glue::glue("{startMonth} {startYear} -- {endMonth} {endYear}", .na = ""),
    where = where
  )

# Educação

{r EDUCATION}

edu %>%
  detailed_entries(
    with = inst,
    what = degree,
    why = detail,
    when = glue::glue("{startYear} -- {endYear}", .na = ""),
    where = where
  )


\pagebreak

# Competências

{r SKILLS}

skills %>%
  detailed_entries(
    with = area,
    what = skills,
    why = detail
  )

\pagebreak

# Projetos

{r PROJECTS}

projects %>%
  detailed_entries(
    with = accomplishment,
    what = area,
    when = glue::glue("{year}", .na = ""),
    where = where,
    why = detail
  )

# Certificações

{r CERTIFICATIONS}

certifications %>%
  detailed_entries(
    with = accomplishment,
    what = area,
    when = glue::glue("{year}", .na = ""),
    where = where,
    why = detail
  )

# Honras e Prêmios

{r HONORS}

honors %>%
  detailed_entries(
    with = accomplishment,
    what = area,
    when = glue::glue("{year}", .na = ""),
    where = where,
    why = detail
  )
```

## Passo 2: Criando arquivo data.R 📝

1. Crie a pasta data

2. Crie um arquivo data.R com a seguinte estrutura

```r
skills <- tribble(
  ~area, ~skills, ~detail,
  "Tecnologia", "Javascript", "Experiência com Javascript em projetos front-end usando React",
  "Tecnologia", "Javascript", "Redux, Redux Toolkit e Context API para gerencia de estados",
  "Tecnologia", "Javascript", "Jest e React Testing Library para testes unitários",
  NA, "Typescript", "Uso do Typescript com Prisma para acesso a bancos de dados.",
  NA, "Elixir", "Exploração de Elixir em projetos pessoais usando Phoenix e Ecto.",
  NA, "Elixir", "Utilizando LiveView para aplicações fullstack.",
  NA, "HTML", "Criação de páginas web semânticas e acessíveis.",
  NA, "CSS", "Estilização de projetos usando SASS e metodologia BEM.",
  NA, "Rust", "Aprendizado de Rust para projetos secundários.",
  NA, "Rust", "Seguindo o livro zero2prod",
  NA, "DevOps", "Experiência com virtualização e conteineres utilizando Docker",
  NA, "DevOps", "CI/CD com Github Actions e TravisCI",
  NA, "Bancos de Dados", "Trabalho com bancos de dados SQL e NoSQL.",
  NA, "Bancos de Dados", "MongoDB para bancos não relacionais",
  "Linguagens", "Português", "Língua nativa",
  "Linguagens", "Inglês", "Fluente",
)

edu <- tribble(
  ~degree, ~startYear, ~endYear, ~inst, ~where, ~detail,
  "Bacharelado em Ciência da Computação", 2015, 2019, "Universidade Imaginária", "Cidade Fictícia, Estado Fictício, País Fictício", "Estudos em algoritmos, estruturas de dados e programação orientada a objetos.",
  "Mestrado em Engenharia de Software", 2020, 2022, "Universidade Fictícia", "Cidade Fictícia, Estado Fictício, País Fictício", "Pesquisa em desenvolvimento de software, foco em metodologias ágeis e arquiteturas escaláveis.",
)

work <- tribble(
  ~title, ~unit, ~startMonth, ~startYear, ~endMonth, ~endYear, ~where, ~detail,
  "Engenheiro de Software", "TechSoft", "Janeiro", 2020, "Dezembro", 2022, "Cidade Fictícia, Estado Fictício", "Trabalhei como parte de uma equipe no desenvolvimento de aplicativos web usando React e Redux.",
  "Desenvolvedor Full Stack", "WebTech", "Março", 2018, "Novembro", 2019, "Cidade Fictícia, Estado Fictício", "Participei do desenvolvimento de um aplicativo full stack utilizando Node.js, React e MongoDB.",
  "Estagiário de Desenvolvimento", "ByteCorp", "Julho", 2017, "Dezembro", 2017, "Cidade Fictícia, Estado Fictício", "Ganhei experiência prática trabalhando em projetos de desenvolvimento de software.",
)

honors <- tribble(
  ~area, ~accomplishment, ~year, ~where, ~detail,
  "Hackathon", "Melhor Aluno de Computação", 2021, "Wall Street", "Premiado com 1 bilhão de dólares.",
  "Reconhecimento Acadêmico", "Melhor Aluno de Computação", 2019, "Universidade Imaginária", "Premiado por excelência acadêmica na área de Computação.",
  "Competição de Programação", "1º Lugar em Algoritmos", 2018, "Evento de Programação Fictício", "Conquista do primeiro lugar na competição de programação de algoritmos.",
)

projects <- tribble(
  ~area, ~accomplishment, ~year, ~where, ~detail,
  "Desenvolvimento de Software", "Sistema de Gerenciamento de Tarefas", 2022, "TechSoft", "Liderança na criação de um sistema de gerenciamento de tarefas usando React e Redux.",
  "Desenvolvimento de Software", "Plataforma de E-Commerce", 2021, "Empresa Fictícia", "Participação na equipe de desenvolvimento de uma plataforma de comércio eletrônico.",
)

certifications <- tribble(
  ~area, ~accomplishment, ~year, ~where, ~detail,
  "Certificações Profissionais", "Certificação em React", 2021, "Plataforma de Ensino Online Fictícia", "Obtenção da certificação em React para comprovar habilidades na biblioteca.",
  "Certificações Profissionais", "Certificação em Docker", 2020, "Plataforma de Ensino Online Fictícia", "Conquista da certificação em Docker para demonstrar conhecimentos em contêineres.",
)
``` 

## Passo 3: Configurar a Automação 🤖

1. No GitHub, vá até a aba "Actions" no seu repositório.
2. Clique em "Set up a workflow yourself" para criar um arquivo de fluxo de trabalho.

Cole o seguinte código no arquivo e salve:

```yaml
name: CI for CV
on:
  push:
    paths:
    - .github/workflows/ci.yml
    - 'markdowns/**'
    - 'data/**'
    branches:
      - main        
permissions: write-all

jobs:
  build:
    name: Creation of resume in en and pt-br
    runs-on: ubuntu-latest
    container:
      image: mlampros/mycvitae:rstudiodev
    steps:
      - name: Set up Git repository
        uses: actions/checkout@v3

      - name: Installing texlive
        run: |
          sudo apt-get -y update
          sudo apt-get install -y texlive-base texlive-latex-base
          sudo apt-get install -y texlive-latex-recommended
          sudo apt-get install -y texlive-xetex
          sudo apt-get install -y texlive-fonts-extra

      - name: Render the resumes
        run: |
          Rscript -e "rmarkdown::render(input = file.path(getwd(), 'data-driven-resume.Rmd'), params = list(work_dir = getwd()))"
          Rscript -e "rmarkdown::render(input = file.path(getwd(), 'data-driven-resume-pt-br.Rmd'), params = list(work_dir = getwd()))"
      - name: Commit files
        run: |
          git config --local user.email "actions@github.com"
          git config --local user.name "GitHub Actions"
          git add .
          git commit -am "add the cv in english and pt-br files to the directory of the repository"
          git push
```

## Finalizando

Se você seguiu todos os passos corretamente provavelmente conseguirá ver o currículo com um cabeçalho mais ou menos assim

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oka87mdk18ki14dtb4yk.png)


## Conclusão 

Automatizar a criação do seu currículo usando Rmarkdown, GitHub Actions e Docker é uma maneira eficaz de manter suas informações atualizadas e relevantes. Os benefícios vão desde economizar tempo até demonstrar suas habilidades técnicas aos empregadores.

Qualquer dúvida me coloco a disposição para vocês!

Também se tiver qualquer contribuição, por favor abra o fork lá no PR que eu analiso.

Espero que este artigo tenha sido útil e que você esteja pronto para automatizar seu currículo. **Happy hacking! :)**