Add unified versioning and changelog workflow
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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,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,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",
|
||||||
|
|||||||
Executable
+27
@@ -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"
|
||||||
Reference in New Issue
Block a user