La guia de platanus
  • README
  • Acuerdos
    • Guía de Estilo
      • Ejemplo: Módulo para variables de entorno
  • Stack
    • Getting Started
    • Nuestro MVC extendido
    • Ruby/Rails
      • Power Types
        • General
        • Patrones
          • Commands
          • Utils
          • Services
          • Values
          • Observers
      • Potassium
      • Power API
      • Active Admin
        • General
        • Active Admin Addons
      • Pundit
      • Shrine
        • General
        • Manejo y procesamiento de imágenes
      • Pry
      • Strong Migrations
      • Data Migrate
      • Active Job
      • Gems
      • Engines - Modularización en Rails
    • JavaScript
      • Vue
        • General
        • Testing
      • AlpineJS
    • CSS
    • Mobile
      • Expo
      • React Navigation
      • Redux
        • Crear y conectar una slice en Redux
      • Styling
        • Usando Tailwind en React Native
      • Recursos
    • Resolviendo problemas (debugging)
    • Machine Learning
  • Setup
    • Configuración de tu entorno local
      • Instalación Base
        • OSX
        • Windows
        • Linux
      • Tecnologías
        • Ruby
        • Docker
        • Node
      • Herramientas
        • Linters
        • Editores
          • IDE/Editores de Código
            • Visual Studio Code
            • Sublime Text
        • Git
    • Configuración de proyectos
      • Getting Started
      • Heroku
      • Rails
      • Circle CI
      • Vue
      • Apple App Store
      • Google Play
      • Expo
      • S3
      • Git
      • Cloudflare
      • Sendgrid
      • Dominio + Mailing
      • Google Tag Manager, Analytics, Search Console, etc.
        • Google Tag Manager
          • Configurar Google Tag Manager
        • Google Analytics
        • Indexación en Google
        • Google Ads
      • Crear un bucket de S3
      • SlackBot
      • Google BigQuery
  • Deployment
    • Rails
    • Ruby Gems
    • Browser and Node (Open Source)
    • Mobile
      • Mobile Resources
      • Apple App Storage
      • Google Play
  • Upgrades
    • Upgrade de Vue 2 a Vue 3
    • Migración Hound → reviewdog
    • Upgrade de Postgresql
Con tecnología de GitBook
En esta página
  • Configuración en Circle CI
  • Agregar el script en .circleci/setup-rubygems.sh
  • Agregar el job "deploy" en .circleci/config.yml
  • Agregar el job deploy al workflow
  • Publicación
  1. Deployment

Ruby Gems

AnteriorRailsSiguienteBrowser and Node (Open Source)

Última actualización hace 2 años

Las gemas deben ser publicadas en . Las publicaremos con nuestro usuario personal pero debemos agregar como owner al usuario de .

# Agregar un owner a una gem
gem owner GEM_NAME --add rubygems@platan.us

Configuración en Circle CI

Para hacer el deploy usando CircleCI, necesitamos agregar el archivo de configuración en la gema. Puedes ver un ejemplo de configuración , pero en resumen lo que se hizo fue:

Agregar el script en .circleci/setup-rubygems.sh

mkdir ~/.gem
echo -e "---\\r\\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
chmod 0600 /home/circleci/.gem/credentials

Para poder utilizar la api key de rubygems al hacer el deploy.

Agregar el job "deploy" en .circleci/config.yml

deploy:
  executor: main-executor
    steps:
      - setup
      - run:
          name: Setup rubygems
          command: bash .circleci/setup-rubygems.sh
      - run:
          name: Publish to rubygems
          command: |
            gem build power_api.gemspec
            version_tag=$(git describe --tags)
            gem push power_api-${version_tag#v}.gem

Esto:

  • Ejecuta el setup básico del proyecto.

  • Ejecuta el script para copiar la api key en un archivo que se utilizará para el deploy de la gema.

  • Crea el archivo .gem

  • Crea la nueva versión en rubygems.

Agregar el job deploy al workflow

workflows:
  version: 2
  main:
    jobs:
      - lint:
          context: org-global
      - test:
          matrix:
            parameters:
              ruby-version: ["2.6", "2.7"]
      - deploy:
          context: org-global
          filters:
            tags:
              only: /.*/
            branches:
              ignore: /.*/

Lo que se hace aquí es ejecutar el job deploy siempre que se cree un nuevo tag en github.

org-global es un contexto que tiene definido la variable de entorno RUBYGEMS_API_KEY que necesitamos para hacer el deploy.

Publicación

Una vez configurado CircleCI en la gema tenemos que:

  1. Cambiar VERSION en lib/my_new_gem/version.rb para que apunte a la nueva versión.

  2. Cambiar el título Unreleased a la versión nueva en el CHANGELOG.md.

  3. Correr bundle install.

  4. Hacer commit (directo en master) de un nuevo release. Por ejemplo: Releasing v0.1.0.

  5. Crear el tag. Por ejemplo: git tag v0.1.0.

  6. Hacer push del tag. Por ejemplo: git push origin v0.1.0.

¡Listo!

rubygems.org
platanus
aquí