jupyter-naas/naas

Create function to generate Github CI/CD workflow

Dr0p42 opened this issue · 0 comments

Implement Github CI/CD Workflow for Naas Service

This issue aims to implement a Github CI/CD workflow generator for a Naas service. The workflow will be triggered when a new release/tag is created and managed by the semantic-release process.

Specifications

  • Implement the function naas.service.generate_ci(service_name, registry_name, dockerfile_path, docker_context, ci_type) in Python.
  • The CI/CD workflow should:
    1. Checkout the code
    2. Use a CI/CD variable/secret to authenticate on auth.naas.ai
    3. Ask for temporary credentials on service.naas.ai/registry/registry_name/credentials to be able to login and push the built container
    4. Docker login against the container registry
    5. Get the url of the service by calling service.naas.ai/registry/registry_name
    6. Build the container
    7. Tag the container
    8. Push the container
    9. Update the service version by calling PUT service.naas.ai/service/service_name

GPT4 - Helpers

Creating a Github CI/CD workflow that will be triggered on new tags

To create a Github CI/CD workflow that is triggered on new tags, include the following in your workflow YAML file:

on:
  push:
    tags:
      - '*'

This will ensure the workflow is only triggered on new tags, and not on every push to the repository.

Using Jinja2 with Python to template a file

Jinja2 is a popular templating engine for Python. To use Jinja2 to template a file, follow these steps:

  1. Install Jinja2: pip install jinja2
  2. Create a template file (e.g., template.j2) with placeholders for variable values, using the double curly brace syntax: {{ variable_name }}
  3. In your Python script, import Jinja2 and load the template file:
from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('.'))
template = env.get_template('template.j2')
  1. Render the template with the desired variable values:
rendered_template = template.render(variable_name=value)
  1. Save the rendered template to a new file:
with open('output_file.yaml', 'w') as output_file:
    output_file.write(rendered_template)

Replace output_file.yaml with the desired output file name, and ensure the variable names in the template match the variables passed to the render() function.

Estimate: 1
Priority: Medium