Create function to generate Github CI/CD workflow
Dr0p42 opened this issue · 0 comments
Dr0p42 commented
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:
- Checkout the code
- Use a CI/CD variable/secret to authenticate on
auth.naas.ai
- Ask for temporary credentials on
service.naas.ai/registry/registry_name/credentials
to be able to login and push the built container - Docker login against the container registry
- Get the url of the service by calling
service.naas.ai/registry/registry_name
- Build the container
- Tag the container
- Push the container
- 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:
- Install Jinja2:
pip install jinja2
- Create a template file (e.g.,
template.j2
) with placeholders for variable values, using the double curly brace syntax:{{ variable_name }}
- 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')
- Render the template with the desired variable values:
rendered_template = template.render(variable_name=value)
- 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