Estoy usando GitHub Actions para construir mi proyecto TypeScript. Cada vez que ejecuto una acción, espero 3 minutos para que se instalen todas las dependencias.
¿Hay alguna forma de almacenar en caché las dependencias de hilo, por lo que el tiempo de compilación será más rápido?
Intenté esto:
- name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v1 id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Install yarn run: npm install -g yarn - name: Install project dependencies run: yarnpero el tiempo de compilación sigue siendo el mismo.
No estoy seguro de por qué otra respuesta no menciona la forma simple de almacenar en caché las dependencias de hilos y npm con la forma integrada de acciones/setup-node@v2, así que solo agregaré los documentos, que es mucho más simple.
Como dice el archivo Léame del paquete de github :
steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: '14' cache: 'npm' # or yarn - run: npm install - run: npm testEste es un caché de 1 línea específicamente para Yarn: https://github.com/c-hive/gha-yarn-cache
- uses: actions/checkout@v2 - name: Setup Node.js uses: actions/setup-node@v1 with: node-version: 12.x - uses: c-hive/gha-yarn-cache@v1 - name: Install JS dependencies run: yarn install - name: Test run: yarn testRealiza el almacenamiento en caché según lo recomendado por GitHub. Admite Yarn v1 y v2.
- name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v1 id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- El código de almacenamiento en caché anterior solo almacena en caché y restaura el directorio de caché de hilo, no almacena en caché el directorio node_modules . Entonces, si usa este código (respuesta de @Edric),
- name: Install project dependencies if: steps.yarn-cache.outputs.cache-hit != 'true' # Over here! run: yarn node_modules no se crea y recibirá errores de dependencias no encontradas.
En su lugar, puedes usar esto:
- name: Install project dependencies run: yarn --prefer-offline Esto le dice a yarn que siempre se ejecute, pero use descargas en caché (en el directorio de caché mencionado anteriormente) siempre que sea posible en lugar de descargar desde el servidor.
También puede almacenar en caché el directorio node_modules directamente y omitir el paso de instalación cuando el caché esté disponible. Esto en realidad NO se recomienda (ver comentarios). Ejemplo:
- name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - name: Cache yarn cache uses: actions/cache@v2 id: cache-yarn-cache with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Cache node_modules id: cache-node-modules uses: actions/cache@v2 with: path: node_modules key: ${{ runner.os }}-${{ matrix.node-version }}-nodemodules-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-${{ matrix.node-version }}-nodemodules- - run: yarn if: | steps.cache-yarn-cache.outputs.cache-hit != 'true' || steps.cache-node-modules.outputs.cache-hit != 'true'Como se menciona en el comentario junto al campo de id para el paso de almacenamiento en caché:
Use esto para verificar el acierto de
cache-hit(steps.yarn-cache.outputs.cache-hit != 'true')
Te falta una propiedad condicional if que determina si se debe ejecutar el paso:
- name: Install yarn run: npm install -g yarn - name: Install project dependencies if: steps.yarn-cache.outputs.cache-hit != 'true' # Over here! run: yarnPD Probablemente deberías usar la acción Configurar NodeJS GitHub que además configura Yarn para ti:
- uses: actions/setup-node@v1 with: node-version: '10.x' # The version spec of the version to use. Consulte el archivo action.yml para obtener una lista completa de entradas válidas.
EDITAR: Resulta que Yarn está incluido en la lista de software instalado en el corredor Ubuntu 18.04.4 LTS ( ubuntu-latest / ubuntu-18.04 ) alojado en GitHub , por lo que no es necesario incluir un paso para instalar Yarn globalmente.