-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrelease.yml
More file actions
157 lines (129 loc) · 6.48 KB
/
release.yml
File metadata and controls
157 lines (129 loc) · 6.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
name: Build and Release
on:
release:
types: [published]
jobs:
build-linux:
name: Build Linux (AppImage)
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: '6.5.3' # Puedes ajustar la versión de Qt 6 que necesites
modules: 'qtbase qttools'
aqt-tool-concurrency: '4'
- name: Install Linux dependencies
run: |
sudo apt-get update
sudo apt-get install -y libgl1-mesa-dev
- name: Configure CMake
run: cmake -B build -DCMAKE_BUILD_TYPE=Release
- name: Build with CMake
run: cmake --build build --config Release --parallel
- name: Download linuxdeployqt
run: |
wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
chmod a+x linuxdeployqt-continuous-x86_64.AppImage
- name: Build AppImage
run: |
# linuxdeployqt necesita que las traducciones (.qm) estén en el lugar correcto
mkdir -p build/translations
cp build/translations/*.qm build/
# Ejecutar linuxdeployqt
./linuxdeployqt-continuous-x86_64.AppImage build/ElegooRemoteControl -appimage -bundle-non-qt-libs
- name: Upload AppImage to Release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./ElegooRemoteControl-x86_64.AppImage
asset_name: ElegooRemoteControl-Linux-x86_64.AppImage
asset_content_type: application/x-appimage
build-windows:
name: Build Windows (MSVC)
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: '6.5.3'
host: 'windows'
target: 'desktop'
arch: 'win64_msvc2019_64'
aqt-tool-concurrency: '4'
- name: Configure CMake
run: cmake -B build -DCMAKE_BUILD_TYPE=Release
- name: Build with CMake
run: cmake --build build --config Release --parallel
- name: Package Windows build
run: |
# Crear un directorio para el paquete
mkdir release
# Copiar el ejecutable
cp build/Release/ElegooRemoteControl.exe release/
# Copiar las traducciones
cp -r build/translations release/
# Usar windeployqt para copiar todas las DLLs de Qt necesarias
windeployqt.exe --release --dir release release/ElegooRemoteControl.exe
# Crear un archivo ZIP
7z a -tzip ElegooRemoteControl-Windows-x64.zip ./release/*
- name: Upload Windows ZIP to Release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./ElegooRemoteControl-Windows-x64.zip
asset_name: ElegooRemoteControl-Windows-x64.zip
asset_content_type: application/zip
build-macos:
name: Build macOS
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: '6.5.3'
host: 'mac'
target: 'desktop'
aqt-tool-concurrency: '4'
- name: Configure CMake
run: cmake -B build -DCMAKE_BUILD_TYPE=Release
- name: Build with CMake
run: cmake --build build --config Release --parallel
- name: Package macOS build
run: macdeployqt build/ElegooRemoteControl.app -dmg
- name: Upload macOS DMG to Release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: build/ElegooRemoteControl.dmg
asset_name: ElegooRemoteControl-macOS.dmg
asset_content_type: application/x-apple-diskimage
```
### ¿Cómo funciona este workflow?
1. **Activador (`on: release: types: [published]`)**: El workflow se ejecuta solo cuando publicas una nueva release en la interfaz de GitHub.
2. **Trabajos (`jobs`)**: Se definen tres trabajos (`build-linux`, `build-windows`, `build-macos`) que se ejecutan en paralelo en máquinas virtuales con los sistemas operativos correspondientes.
3. **Pasos (`steps`)**:
* **Checkout code**: Descarga tu código fuente.
* **Install Qt**: Usa una acción de la comunidad (`jurplel/install-qt-action`) muy popular para instalar la versión de Qt que necesitas.
* **CMake & Build**: Ejecuta los comandos de CMake y `make` (o su equivalente en Windows/macOS) para compilar tu aplicación, igual que lo haces localmente.
* **Empaquetado**:
* **Linux**: Descarga `linuxdeployqt`, lo hace ejecutable y lo usa para crear el `.AppImage`. Este comando empaqueta tu ejecutable, las librerías de Qt, las traducciones y otras dependencias en un solo archivo.
* **Windows**: Usa la herramienta `windeployqt.exe` (que viene con Qt) para copiar todas las DLLs necesarias junto a tu `.exe` y luego lo comprime todo en un `.zip`.
* **macOS**: Usa `macdeployqt` para crear un paquete `.app` autocontenido y luego lo empaqueta en una imagen de disco `.dmg`.
* **Upload Release Asset**: Sube el archivo final (`.AppImage`, `.zip`, `.dmg`) a la release de GitHub que activó el workflow.
### Próximos Pasos
1. Sube tu código a un nuevo repositorio en GitHub.
2. Crea el archivo `.github/workflows/release.yml` con el contenido que te he proporcionado.
3. Haz commit y push de este nuevo archivo a tu repositorio.
4. En la interfaz de GitHub, ve a "Releases" y crea una nueva release. Dale un número de versión (ej. `v1.0.0`), un título y una descripción.
5. Al hacer clic en "Publish release", GitHub Actions se pondrá en marcha. Podrás ver el progreso en la pestaña "Actions" de tu repositorio. Si todo va bien, en unos minutos los archivos compilados aparecerán adjuntos a tu release.
Espero que esta guía te sea de gran ayuda. ¡Es un paso muy profesional para tu proyecto! Si tienes alguna duda sobre los pasos, no dudes en preguntar.
<!--
[PROMPT_SUGGESTION]¿Cómo puedo añadir pruebas unitarias a mi proyecto Qt y ejecutarlas en el workflow de GitHub Actions?[/PROMPT_SUGGESTION]
[PROMPT_SUGGESTION]Explícame cómo puedo firmar digitalmente mis ejecutables de Windows y macOS dentro del workflow de GitHub Actions.[/PROMPT_SUGGESTION]