Add unified versioning and changelog workflow

This commit is contained in:
2026-04-07 09:50:07 -05:00
parent 64e0757f3b
commit 408a9b4435
9 changed files with 104 additions and 47 deletions
+21
View File
@@ -0,0 +1,21 @@
# Changelog
## Versión actual
- Versión base: `1.0.1`
## Historial
### 1.0.1 - 2026-04-07
- Se unifica la versión inicial de `frontend`, `backend` y `android`.
- Se establece `1.0.1` como versión base de arranque del sistema.
- Se agrega el archivo `VERSION` como fuente única de versión.
- Se agrega el script `scripts/set-version.sh` para actualizar versiones de forma sincronizada.
## Cómo registrar una nueva versión
1. Ejecuta `./scripts/set-version.sh X.Y.Z`
2. Actualiza este archivo con la nueva versión y sus cambios principales.
3. Haz las pruebas normales del sistema.
4. Guarda cambios en git y despliega.
+17 -8
View File
@@ -1,26 +1,35 @@
# Deploy Android # Deploy Android
## Versión actual
- Base actual: `1.0.1`
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
## Pasos ## Pasos
1. Haz los cambios en `dev`. 1. Haz los cambios en `dev`.
2. Prueba la app: 2. Si corresponde, sube versión:
- `./scripts/set-version.sh X.Y.Z`
- actualiza `CHANGELOG.md`
3. Prueba la app:
- `source /etc/profile.d/android-sdk.sh` - `source /etc/profile.d/android-sdk.sh`
- `cd android` - `cd android`
- `GRADLE_USER_HOME=/home/mgonzalez/desarrollo/react/linkedsign/android/.gradle-home ./gradlew assembleDebug` - `GRADLE_USER_HOME=/home/mgonzalez/desarrollo/react/linkedsign/android/.gradle-home ./gradlew assembleDebug`
3. Si todo está bien, genera release: 4. Si todo está bien, genera release:
- `GRADLE_USER_HOME=/home/mgonzalez/desarrollo/react/linkedsign/android/.gradle-home ./gradlew assembleRelease` - `GRADLE_USER_HOME=/home/mgonzalez/desarrollo/react/linkedsign/android/.gradle-home ./gradlew assembleRelease`
4. Copia el APK release: 5. Copia el APK release:
- `cp android/app/build/outputs/apk/release/app-release.apk android/apk/LinkedSign-release.apk` - `cp android/app/build/outputs/apk/release/app-release.apk android/apk/LinkedSign-release.apk`
5. Guarda cambios en git: 6. Guarda cambios en git:
- `git add .` - `git add .`
- `git commit -m "mensaje"` - `git commit -m "mensaje"`
6. Sube a Gitea: 7. Sube a Gitea:
- `git push origin main` - `git push origin main`
7. Sube el APK a producción: 8. Sube el APK a producción:
- `scp -P 2203 android/apk/LinkedSign-release.apk deploy@192.168.222.3:/opt/apps/linkedsign/apk/` - `scp -P 2203 android/apk/LinkedSign-release.apk deploy@192.168.222.3:/opt/apps/linkedsign/apk/`
8. Limpia archivos `.md` en producción: 9. Limpia archivos `.md` en producción:
- `find /opt/apps/linkedsign -type f -iname '*.md' -delete` - `find /opt/apps/linkedsign -type f -iname '*.md' -delete`
9. Verifica descarga pública: 10. Verifica descarga pública:
- `https://sign.linkedcorp.net/api/downloads/android-apk` - `https://sign.linkedcorp.net/api/downloads/android-apk`
## Notas ## Notas
+20 -11
View File
@@ -1,41 +1,50 @@
# Deploy Web # Deploy Web
## Versión actual
- Base actual: `1.0.1`
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
## Pasos ## Pasos
1. Haz los cambios en `dev`. 1. Haz los cambios en `dev`.
2. Prueba local: 2. Si corresponde, sube versión:
- `./scripts/set-version.sh X.Y.Z`
- actualiza `CHANGELOG.md`
3. Prueba local:
- `cd frontend && npm run build` - `cd frontend && npm run build`
- `cd ../backend && node -e "require('./src/app')"` - `cd ../backend && node -e "require('./src/app')"`
3. Guarda cambios en git: 4. Guarda cambios en git:
- `git add .` - `git add .`
- `git commit -m "mensaje"` - `git commit -m "mensaje"`
4. Sube a Gitea: 5. Sube a Gitea:
- `git push origin main` - `git push origin main`
5. En el servidor app entra por SSH: 6. En el servidor app entra por SSH:
- `ssh deploy@192.168.222.3 -p 2203` - `ssh deploy@192.168.222.3 -p 2203`
6. Actualiza código: 7. Actualiza código:
- `cd /opt/apps/linkedsign/source` - `cd /opt/apps/linkedsign/source`
- `git fetch origin main` - `git fetch origin main`
- `git reset --hard origin/main` - `git reset --hard origin/main`
7. Recompila frontend: 8. Recompila frontend:
- `cd /opt/apps/linkedsign/source/frontend` - `cd /opt/apps/linkedsign/source/frontend`
- `npm ci` - `npm ci`
- `npm run build` - `npm run build`
8. Publica frontend: 9. Publica frontend:
- `rm -rf /opt/apps/linkedsign/frontend/*` - `rm -rf /opt/apps/linkedsign/frontend/*`
- `cp -r dist /opt/apps/linkedsign/frontend/` - `cp -r dist /opt/apps/linkedsign/frontend/`
- `cp server.js /opt/apps/linkedsign/frontend/` - `cp server.js /opt/apps/linkedsign/frontend/`
9. Publica backend: 10. Publica backend:
- `rm -rf /opt/apps/linkedsign/backend/*` - `rm -rf /opt/apps/linkedsign/backend/*`
- `cp -r /opt/apps/linkedsign/source/backend/* /opt/apps/linkedsign/backend/` - `cp -r /opt/apps/linkedsign/source/backend/* /opt/apps/linkedsign/backend/`
- `cd /opt/apps/linkedsign/backend` - `cd /opt/apps/linkedsign/backend`
- `npm ci --omit=dev` - `npm ci --omit=dev`
10. Reinicia servicios: 11. Reinicia servicios:
- `sudo systemctl restart linkedsign-frontend` - `sudo systemctl restart linkedsign-frontend`
- `sudo systemctl restart linkedsign-backend` - `sudo systemctl restart linkedsign-backend`
11. Limpia archivos `.md` en producción: 12. Limpia archivos `.md` en producción:
- `find /opt/apps/linkedsign -type f -iname '*.md' -delete` - `find /opt/apps/linkedsign -type f -iname '*.md' -delete`
12. Verifica: 13. Verifica:
- `curl -I http://127.0.0.1:3000` - `curl -I http://127.0.0.1:3000`
- `curl http://127.0.0.1:4000/health` - `curl http://127.0.0.1:4000/health`
+14 -24
View File
@@ -1,5 +1,11 @@
# Producción LinkedSign # Producción LinkedSign
## Versión actual
- Base actual: `1.0.1`
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
## Servidor de aplicación ## Servidor de aplicación
- Host: `192.168.222.3` - Host: `192.168.222.3`
@@ -55,25 +61,11 @@ No hace falta rewrite. El backend ya acepta `/api`.
- Base de datos: `linkedsign` - Base de datos: `linkedsign`
- Usuario: `linkedsign_user` - Usuario: `linkedsign_user`
## Bloqueo pendiente ## Estado base confirmado
MariaDB rechazó el acceso desde el servidor web: - MariaDB en `192.168.222.32` ya permite acceso desde `192.168.222.3`
- Tablas de producción ya fueron creadas y validadas
- Error: `Access denied for user 'linkedsign_user'@'192.168.222.3'` - El dominio público operativo es `https://sign.linkedcorp.net`
En el servidor MariaDB debes ejecutar:
```sql
GRANT ALL PRIVILEGES ON linkedsign.* TO 'linkedsign_user'@'192.168.222.3' IDENTIFIED BY 'INa*hkFanYa_zICF';
FLUSH PRIVILEGES;
```
Si quieres permitir desde más de un host del mismo segmento:
```sql
GRANT ALL PRIVILEGES ON linkedsign.* TO 'linkedsign_user'@'192.168.222.%' IDENTIFIED BY 'INa*hkFanYa_zICF';
FLUSH PRIVILEGES;
```
## Comandos útiles ## Comandos útiles
@@ -84,13 +76,11 @@ sudo journalctl -u linkedsign-frontend -n 100 --no-pager
sudo journalctl -u linkedsign-backend -n 100 --no-pager sudo journalctl -u linkedsign-backend -n 100 --no-pager
``` ```
## Pendiente después del GRANT ## Notas de versión
Cuando MariaDB permita acceso desde `192.168.222.3`, falta: 1. Toda nueva versión debe reflejarse en `VERSION`.
2. Toda nueva versión debe registrarse en `CHANGELOG.md`.
1. Crear/validar tablas en producción. 3. Producción no debe conservar archivos `.md` después del despliegue.
2. Probar login real.
3. Confirmar operación completa del sistema.
## Seguridad ## Seguridad
+1
View File
@@ -0,0 +1 @@
1.0.1
+2 -2
View File
@@ -18,8 +18,8 @@ android {
applicationId "net.linkedcorp.linkedsign" applicationId "net.linkedcorp.linkedsign"
minSdk 26 minSdk 26
targetSdk 35 targetSdk 35
versionCode 1 versionCode 10001
versionName "0.1.0" versionName "1.0.1"
buildConfigField "String", "API_BASE_URL", "\"${apiBaseUrl}\"" buildConfigField "String", "API_BASE_URL", "\"${apiBaseUrl}\""
} }
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "linkedsign-backend", "name": "linkedsign-backend",
"version": "0.1.0", "version": "1.0.1",
"private": true, "private": true,
"description": "Initial backend for LinkedSign", "description": "Initial backend for LinkedSign",
"main": "src/server.js", "main": "src/server.js",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "frontend", "name": "frontend",
"private": true, "private": true,
"version": "0.0.0", "version": "1.0.1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+27
View File
@@ -0,0 +1,27 @@
#!/usr/bin/env bash
set -euo pipefail
if [[ $# -ne 1 ]]; then
echo "Usage: $0 <version>"
exit 1
fi
VERSION="$1"
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Version must use semver format, for example: 1.0.1"
exit 1
fi
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
VERSION_CODE=$((MAJOR * 10000 + MINOR * 100 + PATCH))
printf '%s\n' "$VERSION" > VERSION
sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" frontend/package.json
sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" backend/package.json
sed -i "s/versionCode [0-9]\\+/versionCode $VERSION_CODE/" android/app/build.gradle
sed -i "s/versionName \"[^\"]*\"/versionName \"$VERSION\"/" android/app/build.gradle
echo "Version updated to $VERSION"
echo "Android versionCode: $VERSION_CODE"