Archivo de proyecto (.warproj / .warpcfg)
Ver también la guía: Proyecto.
.warproj — @Project
| Clave | Descripción |
|---|---|
Name | Nombre del proyecto. |
Description | Descripción del proyecto. |
Version | Versión del proyecto (string libre, p.ej. 1.0). |
Default Profile | Nombre del @Profile (definido en el .warpcfg, ver más abajo) que usan generate/build/reverse/license-status cuando el CLI no recibe --profile. Opcional si el .warpcfg sólo declara un @Profile. |
@Generator (anidada en @Project)
| Clave | Descripción |
|---|---|
Name | Nombre del generador. |
Description | Descripción del generador. |
Language | Lenguaje de destino. Valores: RPGLE, RPG. |
@Paths (anidada en @Generator)
| Clave | Descripción |
|---|---|
Config | Ruta al .warpcfg de este proyecto. |
Output | Carpeta donde se escribe el DDS/RPG generado. |
.warpcfg — @GeneratorConfig
| Clave | Descripción | Valores |
|---|---|---|
Date Format | Formato de fecha nativo con el que se declara cada variable Date (p.ej. date(*dmy/) en vez de date a secas). | ISO, USA, EUR, JIS, MDY, DMY, YMD, JUL |
Date Separator | Carácter separador de fecha (p.ej. / en date(*dmy/)). Un solo carácter. | — |
Time Format | Formato de hora nativo con el que se declara cada variable Time (p.ej. time(*hms:) en vez de time a secas), y default para IsTime/StringToTime/TimeToString cuando se omite su argumento format. Usa es 12 horas con sufijo AM/PM, sin segundos — estructuralmente distinto de los otros 4 (24 horas hh:mm:ss). | Hms, Iso, Usa, Eur, Jis |
Time Separator | Carácter separador de hora (p.ej. : en time(*hms:), también usado por TIME()). Un solo carácter. No aplica a Usa (sin separador entre campos). | — |
Timestamp Format | Default para IsTimestamp/StringToTimestamp/TimestampToString cuando se omite su argumento format. El tipo timestamp no admite un formato en su declaración, a diferencia de date/time. Se recomienda usar Iso por su mayor compatibilidad. | Iso, Usa, Eur, Jis |
Print Mode | Qué pasa con el spool QPRINT que escribe cada Print("Block"): con Screen el programa lo muestra (DSPSPLF) y lo borra al salir; Printer/File sólo lo dejan spooleado. Default Printer. | Printer, File, Screen |
Commitment | Habilita control de compromiso para todo el proyecto: los programas generados declaran sus tablas modificadas commit usropn y las abren tras un STRCMTCTL best-effort (las tablas deben estar journaled). Un Program puede sobreescribirlo con @Properties/Commitment. Default False. | True, False |
Commit on Exit | Si los programas generados emiten un commit final antes de terminar. Sobreescribible por @Properties/Commit on Exit. Sólo efectivo si Commitment es True. Default False. | True, False |
DDS Name | Patrón para nombrar el DDS del display file de cada Screen a partir de su nombre de objeto — p.ej. <ObjectName>D agrega una D. Default <ObjectName> (sin cambio). Sólo afecta el DSPF; el programa RPG driver generado mantiene el nombre de objeto tal cual. El resultado siempre se pasa a mayúsculas y trunca a 10 caracteres (límite de nombre de objeto OS/400) — las variantes que agregan D truncan a 9 primero para que la D nunca sea lo que se trunca. | <ObjectName>, <ObjectName>D, D<ObjectName>, D<ObjectNameWithoutFirstChar> |
Las claves de nivel superior (Date Format, Print Mode, Commitment, etc.), @Screen/@FunctionKeys y los formatos de fecha/hora/timestamp son únicos a nivel de proyecto: no se repiten por perfil.
@Profile (anidada en @GeneratorConfig)
Un .warpcfg declara uno o más perfiles de despliegue (típicamente Dev, UAT, Prod, aunque el nombre es libre) dentro de @GeneratorConfig. Cada @Profile "Nombre" agrupa su propia @Connection, @Deployment y @License — así un mismo proyecto puede apuntar a servidores/bibliotecas/licencias distintos según el ambiente, sin tener que mantener varios .warpcfg.
@GeneratorConfig {
@Profile "Dev" {
@Connection { ... }
@Deployment { ... }
}
@Profile "Prod" {
@Connection { ... }
@Deployment { ... }
@License { ... }
}
}
Es obligatorio declarar al menos un @Profile: @Connection/@Deployment/@License sueltos directamente dentro de @GeneratorConfig (sin envolverlos en @Profile) ya no son válidos (error E00290). Un @GeneratorConfig sin ningún @Profile da error E00291.
Cómo se elige el perfil activo para generate/build/reverse/license-status (la acción validate ignora los perfiles):
- El flag
--profile <Nombre>del CLI, sin distinguir mayúsculas. - Si se omite,
Default Profilede@Project(sección.warproj — @Projectmás arriba). - Si tampoco hay
Default Profilepero el.warpcfgsólo declara un@Profile, se usa ese. - Si nada de lo anterior aplica y hay varios perfiles declarados, el compilador falla con error
E00293, listando los perfiles disponibles.
Pedir un perfil que no existe (--profile o Default Profile) falla con error E00292, también con la lista de perfiles disponibles.
@Screen (anidada en @GeneratorConfig)
| Clave | Descripción |
|---|---|
Rows | Cantidad de filas de pantalla. Numérico, default 24. |
Columns | Cantidad de columnas de pantalla. Numérico, default 80. |
@FunctionKeys (anidada en @Screen)
Una entrada F<n> : "Etiqueta" por línea (n de 1 a 24, p.ej. F3 : "Salir"). Se ata a un evento propio con Event 'Nombre' <n> ... EndEvent en el @Source de un Screen.
@Connection (anidada en @Profile)
Cómo llegar al IBM i:
| Clave | Descripción | Valores |
|---|---|---|
Host | Hostname o IP del IBM i. Requerida. | — |
User | Perfil de usuario para conectar. Requerida. | — |
Auth Method | Cómo autenticar. Requerida. password lee la contraseña de la variable de entorno WARPGATE_PASSWORD; interactive, al correr desde la extensión de VSCode, la pide con un cuadro de diálogo en cada Build & Deploy (corriendo el binario directo por consola, se comporta igual que password). | key, password, interactive |
Key File | Ruta al archivo de clave privada. Requerida sólo si Auth Method: key. | — |
Protocol | Protocolo de transporte. Requerida. ftp no puede combinarse con Auth Method: key. | ssh, sftp, ftp |
Port | Puerto TCP. Numérico, default 22. | — |
Timeout | Timeout de conexión en segundos. Numérico (-128 a 127), default 30. | — |
ssh/sftp/ftp usan clientes nativos: no hace falta tener instalado ningún cliente ssh/scp/sftp/ftp en la máquina donde corre el compilador.
Ejemplos por protocolo y método de autenticación
SSH o SFTP con llave (ssh/sftp son equivalentes: el cliente nativo usa el mismo transporte para ambos):
@Connection {
Host : MIHOST
User : MIUSUARIO
Auth Method : key
Key File : ~/.ssh/id_ed25519_ibmi
Protocol : ssh
Port : 22
Timeout : 30
}
SSH o SFTP con contraseña — la contraseña no se escribe en el .warpcfg; se lee de la variable de entorno WARPGATE_PASSWORD, que debe existir antes de abrir VSCode (o la terminal desde la que se corra el compilador):
@Connection {
Host : MIHOST
User : MIUSUARIO
Auth Method : password
Protocol : sftp
Port : 22
Timeout : 30
}
FTP con contraseña — FTP no tiene concepto de autenticación por llave (Auth Method: key con Protocol: ftp es un error de validación), así que sólo admite password/interactive, ambos leídos de la misma variable WARPGATE_PASSWORD:
@Connection {
Host : MIHOST
User : MIUSUARIO
Auth Method : password
Protocol : ftp
Port : 21
Timeout : 30
}
Generar el archivo de Key File
Para Auth Method: key hace falta un par de llaves SSH: una privada (la que apunta Key File) y una pública, que debe quedar autorizada en el perfil de usuario del IBM i.
- Generar el par de llaves (en la máquina donde corre el compilador/VSCode, no en el IBM i):
Esto creassh-keygen -t ed25519 -f ~/.ssh/id_ed25519_ibmi -N ""id_ed25519_ibmi(privada — la ruta que va enKey File) yid_ed25519_ibmi.pub(pública).-N ""deja la llave sin passphrase, requisito paraAuth Method: key. - Copiar el contenido de
id_ed25519_ibmi.pub(una sola línea) al final del archivo.ssh/authorized_keysdentro del directorio home IFS del usuario del IBM i (p.ej./home/MIUSUARIO/.ssh/authorized_keys) — crear el archivo y el directorio si no existen. El demonio SSH del IBM i (SSHD, del producto 5733-SC1) tiene que estar activo y configurado para aceptar autenticación por llave. - Verificar que
Key Fileen@Connectionapunte a la ruta de la llave privada en la máquina local (no la.pub), y queAuth Methodseakey.
@Deployment (anidada en @Profile)
Dónde/cómo desplegar y compilar en el IBM i:
| Clave | Descripción | Valores |
|---|---|---|
CL Source | Nombre del member de fuente CL generado (nombre de objeto OS/400, máx. 10 caracteres). Requerida. | — |
Cleanup | Si se elimina el fuente staged tras compilar exitosamente. | true, false |
Target Release | Release de OS/400 destino de la compilación (p.ej. V7R4M0). | — |
Optimization | Nivel de optimización del compilador. | — |
Debug | Si se compila con la vista de debug habilitada. | true, false |
Temp Path | Directorio staging del IFS usado durante el deploy. Requerida. | — |
Data Library | Biblioteca donde se crean los objetos físico/lógico de DDS compilados (nombre de objeto OS/400). Requerida. | — |
Objects Library | Biblioteca que contiene los members de fuente DDS/CL (QDDSSRC/QCLSRC) y donde se crea el objeto programa CL compilado (nombre de objeto OS/400). Requerida. | — |
Source Tables | Member de fuente que contiene el fuente DDS de físicos/lógicos (nombre de objeto OS/400). Requerida. | — |
Source Programs | Member de fuente que contiene el RPGLE/CL generado (nombre de objeto OS/400). | — |
Compile Library | Lista separada por comas de bibliotecas agregadas a la lista de bibliotecas del job de compilación, en orden, en vez de sólo Data Library — para programas cuyas tablas viven en varias bibliotecas. | — |
@License (anidada en @Profile)
Bloque opcional con la configuración de licenciamiento, propio de cada perfil — así Dev/UAT/Prod pueden consumir licencias o servicios de licenciamiento distintos. Las claves no distinguen mayúsculas. Ver la guía Licenciamiento.
| Clave | Descripción | Valores |
|---|---|---|
Host | Host del servicio de licencias. Con Host el modo es organización y File se ignora; sin Host, el modo es individual. | — |
Port | Puerto TCP del servicio. Por defecto 7443. | 1-65535 |
Fingerprint | Huella SHA-256 del certificado del servicio (acepta : y mayúsculas). | 64 hex |
SPN | Nombre de servicio Kerberos. Por defecto warpgate-license/<host>. | — |
File | Archivo de licencia individual. Por defecto ~/.config/warpgate/license.json (%APPDATA%\warpgate\license.json en Windows). | — |
@License {
Host : "servidor01.dominio.local"
Port : 7443
Fingerprint : "3f2a9c41d87b05e6a1c4f0937be2d5688a1f4c0d29e7b3a65c8d1f0e4b7a9c23"
}
Ejemplo completo
Ver Proyecto: .warproj y .warpcfg para un ejemplo completo con ambos archivos.