pollx
pollx

Reputation: 699

Share a file between two workflows in CircleCI

In our repo build and deploy are two different workflows.

In build we call lerna to check for changed packages and save the output in a file saved to the current workspace.

  check_changes:
    working_directory: ~/project
    executor: node
    steps:
      - checkout
      - attach_workspace:
          at: ~/project
      - run:
          command: npx lerna changed > changed.tmp
      - persist_to_workspace:
          root: ./
          paths:
            - changed.tmp

I'd like to pass the exact same file from build workflow to deploy workflow and access it in another job. How do I do that?

read_changes:
working_directory: ~/project
executor: node
steps:
  - checkout
  - attach_workspace:
      at: ~/project
  - run:
      command: |
        echo 'Reading changed.tmp file'
        cat changed.tmp

According to this blog post

Unlike caching, workspaces are not shared between runs as they no longer exists once a workflow is complete

it feels that caching would be the only option.

But according to the CircelCI documentation, my case doesn't fit their cache defintions:

Use the cache to store data that makes your job faster, but, in the case of a cache miss or zero cache restore, the job still runs successfully. For example, you might cache NPM package directories (known as node_modules).

Upvotes: 3

Views: 1300

Answers (1)

yaningo
yaningo

Reputation: 523

I think you can totally use caching here. Make sure you choose your key template(s) wisely.

The caveat to keep in mind is that (unlike the job level where you can use the requires key), there's no *native *way to sequentially execute workflows. Although you could consider using an orb for that; for example the roopakv/swissknife orb.

So you'll need to make sure that the job (that needs the file) in the deploy workflow, doesn't move to the restore_cache step until the save_cache in the other job has happened.

Upvotes: 0

Related Questions