Si posee o mantiene un repositorio de GitHub y alguna vez envió un paquete desde él a PyPI y/o Fedora, sabe que requiere un trabajo adicional utilizando la infraestructura de Fedora.
Buenas noticias:hemos desarrollado una herramienta llamada release-bot que automatiza el proceso. Todo lo que necesita hacer es registrar un problema en su repositorio ascendente y release-bot se encarga del resto. Pero no nos adelantemos. Primero, veamos qué debe configurarse para que se produzca esta automatización. He elegido la familia de meta-pruebas repositorio ascendente como ejemplo.
Archivos de configuración para release-bot
Hay dos archivos de configuración para release-bot:conf.yaml y release-conf.yaml .
conf.yaml
conf.yaml debe ser accesible durante la inicialización del bot; especifica cómo acceder al repositorio de GitHub. Para mostrar eso, he creado un nuevo repositorio git llamado mtf-release-bot , que contiene conf.yaml y los otros archivos secretos.
repository_name: name
repository_owner: owner
# https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
github_token: xxxxxxxxxxxxxxxxxxxxxxxxx
# time in seconds during checks for new releases
refresh_interval: 180
Para el caso de la familia de metapruebas, el archivo de configuración se ve así:
repository_name: meta-test-family
repository_owner: fedora-modularity
github_token: xxxxxxxxxxxxxxxxxxxxx
refresh_interval: 180
release-conf.yaml
release-conf.yaml debe almacenarse en el propio repositorio; especifica cómo hacer lanzamientos de GitHub/PyPI/Fedora.
# list of major python versions that bot will build separate wheels for
python_versions:
- 2
- 3
# optional:
changelog:
- Example changelog entry
- Another changelog entry
# this is info for the authorship of the changelog
# if this is not set, person who merged the release PR will be used as an author
author_name: John Doe
author_email: [email protected]
# whether to release on fedora. False by default
fedora: false
# list of fedora branches bot should release on. Master is always implied
fedora_branches:
- f27
Para el caso de la familia de metapruebas, el archivo de configuración se ve así:
python_versions:
- 2
fedora: true
fedora_branches:
- f29
- f28
trigger_on_issue: true
Archivo de configuración de PyPI
El archivo .pypirc , almacenado en su mtf-release-bot Se necesita un repositorio privado para cargar la nueva versión del paquete en PyPI:
[pypi]
username = phracek
password = xxxxxxxx
Clave SSH privada, id_rsa , que configuró en FAS.
La estructura final del repositorio git, con conf.yaml y los demás, se ve así:
$ ls -la
total 24
drwxrwxr-x 3 phracek phracek 4096 Sep 24 12:38 .
drwxrwxr-x. 20 phracek phracek 4096 Sep 24 12:37 ..
-rw-rw-r-- 1 phracek phracek 199 Sep 24 12:26 conf.yaml
drwxrwxr-x 8 phracek phracek 4096 Sep 24 12:38 .git
-rw-rw-r-- 1 phracek phracek 3243 Sep 24 12:38 id_rsa
-rw------- 1 phracek phracek 78 Sep 24 12:28 .pypirc
Requisitos
Más recursos de Python
- ¿Qué es un IDE?
- Hoja de trucos:Python 3.7 para principiantes
- Los principales marcos de GUI de Python
- Descargar:7 bibliotecas esenciales de PyPI
- Desarrolladores de Red Hat
- Contenido más reciente de Python
El lanzamiento a PyPI requiere el paquete de ruedas para Python 2 y Python 3, así que instale requirements.txt con ambas versiones de pip. También debe configurar sus datos de inicio de sesión de PyPI en $HOME/.pypirc , como se describe en la documentación de PyPI. Si está lanzando a Fedora, debe tener un ticket de Kerberos activo mientras se ejecuta el bot, o especificar la ruta al archivo keytab de Kerberos con -k/–keytab
. Además, fedpkg requiere que tenga una clave SSH en su conjunto de claves que cargó en FAS.
Cómo implementar el bot de liberación
Hay dos formas de usar release-bot:como una imagen de Docker o como una plantilla de OpenShift.
Imagen acoplable
Construyamos la imagen usando el s2i
comando:
$ s2i build $CONFIGURATION_REPOSITORY_URL usercont/release-bot app-name
donde $CONFIGURATION_REPOSITORY_URL
es una referencia al repositorio de GitHub, como https://
Veamos las imágenes de Docker:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mtf-release-bot latest 08897871e65e 6 minutes ago 705 MB
docker.io/usercont/release-bot latest 5b34aa670639 9 days ago 705 MB
Ahora intentemos ejecutar el mtf-release-bot imagen con este comando:
$ docker run mtf-release-bot
---> Setting up ssh key...
Agent pid 12
Identity added: ./.ssh/id_rsa (./.ssh/id_rsa)
12:21:18.982 configuration.py DEBUG Loaded configuration for fedora-modularity/meta-test-family
12:21:18.982 releasebot.py INFO release-bot v0.4.1 reporting for duty!
12:21:18.982 github.py DEBUG Fetching release-conf.yaml
12:21:37.611 releasebot.py DEBUG No merged release PR found
12:21:38.282 releasebot.py INFO Found new release issue with version: 0.8.5
12:21:42.565 releasebot.py DEBUG No more open issues found
12:21:43.190 releasebot.py INFO Making a new PR for release of version 0.8.5 based on an issue.
12:21:46.709 utils.py DEBUG ['git', 'clone', 'https://github.com/fedora-modularity/meta-test-family.git', '.']
12:21:47.401 github.py DEBUG {"message":"Branch not found","documentation_url":"https://developer.github.com/v3/repos/branches/#get-branch"}
12:21:47.994 utils.py DEBUG ['git', 'config', 'user.email', '[email protected]']
12:21:47.996 utils.py DEBUG ['git', 'config', 'user.name', 'Release bot']
12:21:48.009 utils.py DEBUG ['git', 'checkout', '-b', '0.8.5-release']
12:21:48.014 utils.py ERROR No version files found. Aborting version update.
12:21:48.014 utils.py WARNING No CHANGELOG.md present in repository
[Errno 2] No such file or directory: '/tmp/tmpmbvb05jq/CHANGELOG.md'
12:21:48.020 utils.py DEBUG ['git', 'commit', '--allow-empty', '-m', '0.8.5 release']
[0.8.5-release 7ee62c6] 0.8.5 release
12:21:51.342 utils.py DEBUG ['git', 'push', 'origin', '0.8.5-release']
12:21:51.905 github.py DEBUG No open PR's found
12:21:51.905 github.py DEBUG Attempting a PR for 0.8.5-release branch
12:21:53.215 github.py INFO Created PR: https://github.com/fedora-modularity/meta-test-family/pull/243
12:21:53.216 releasebot.py INFO I just made a PR request for a release version 0.8.5
12:21:54.154 github.py DEBUG Comment added to PR: I just made a PR request for a release version 0.8.5
Here's a [link to the PR](https://github.com/fedora-modularity/meta-test-family/pull/243)
12:21:54.154 github.py DEBUG Attempting to close issue #242
12:21:54.992 github.py DEBUG Closed issue #242
Como puede ver, release-bot cerró automáticamente el siguiente problema y solicitó una nueva versión ascendente de meta-test-family:https://github.com/fedora-modularity/meta-test-family/issues/243.
Además, release-bot creó un nuevo PR con registro de cambios. Puede actualizar el PR, por ejemplo, squash changelog, y una vez que lo fusione, se lanzará automáticamente a GitHub y PyPI y Fedora se iniciarán.
Ahora tiene una solución funcional para publicar fácilmente versiones anteriores de su paquete en PyPi y Fedora.
Plantilla OpenShift
Otra opción para entregar lanzamientos automatizados usando release-bot es implementarlo en OpenShift.
La plantilla de OpenShift tiene el siguiente aspecto:
kind: Template
apiVersion: v1
metadata:
name: release-bot
annotations:
description: S2I Relase-bot image builder
tags: release-bot s2i
iconClass: icon-python
labels:
template: release-bot
role: releasebot_application_builder
objects:
- kind : ImageStream
apiVersion : v1
metadata :
name : ${APP_NAME}
labels :
appid : release-bot-${APP_NAME}
- kind : ImageStream
apiVersion : v1
metadata :
name : ${APP_NAME}-s2i
labels :
appid : release-bot-${APP_NAME}
spec :
tags :
- name : latest
from :
kind : DockerImage
name : usercont/release-bot:latest
#importPolicy:
# scheduled: true
- kind : BuildConfig
apiVersion : v1
metadata :
name : ${APP_NAME}
labels :
appid : release-bot-${APP_NAME}
spec :
triggers :
- type : ConfigChange
- type : ImageChange
source :
type : Git
git :
uri : ${CONFIGURATION_REPOSITORY}
contextDir : ${CONFIGURATION_REPOSITORY}
sourceSecret :
name : release-bot-secret
strategy :
type : Source
sourceStrategy :
from :
kind : ImageStreamTag
name : ${APP_NAME}-s2i:latest
output :
to :
kind : ImageStreamTag
name : ${APP_NAME}:latest
- kind : DeploymentConfig
apiVersion : v1
metadata :
name: ${APP_NAME}
labels :
appid : release-bot-${APP_NAME}
spec :
strategy :
type : Rolling
triggers :
- type : ConfigChange
- type : ImageChange
imageChangeParams :
automatic : true
containerNames :
- ${APP_NAME}
from :
kind : ImageStreamTag
name : ${APP_NAME}:latest
replicas : 1
selector :
deploymentconfig : ${APP_NAME}
template :
metadata :
labels :
appid: release-bot-${APP_NAME}
deploymentconfig : ${APP_NAME}
spec :
containers :
- name : ${APP_NAME}
image : ${APP_NAME}:latest
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
parameters :
- name : APP_NAME
description : Name of application
value :
required : true
- name : CONFIGURATION_REPOSITORY
description : Git repository with configuration
value :
required : true
La forma más fácil de implementar el mtf-release-bot repositorio con archivos secretos en OpenShift es usar los siguientes dos comandos:
$ curl -sLO https://github.com/user-cont/release-bot/raw/master/openshift-template.yml
En su instancia de OpenShift, implemente la plantilla ejecutando el siguiente comando:
oc process -p APP_NAME="mtf-release-bot" -p CONFIGURATION_REPOSITORY="git@<git_lab_path>/mtf-release-conf.git" -f openshift-template.yml | oc apply
Resumen
Consulte el ejemplo de solicitud de incorporación de cambios en el repositorio ascendente de meta-test-family, donde encontrará información sobre qué release-bot lanzó. Una vez que llega a este punto, puede ver que release-bot puede enviar nuevas versiones ascendentes a GitHub, PyPI y Fedora sin una gran intervención del usuario. Automatiza todos los pasos para que no tenga que cargar y crear manualmente nuevas versiones anteriores de su paquete.