#github-actions (2021-10)
Discussions related to GitHub Actions
2021-10-12
has anyone had much luck creating dynamic matrixes?
Error when evaluating 'strategy' for job 'scaling-jobs'. .github/workflows/on_manual_scale.yaml (Line: 48, Col: 17): Error reading JToken from JsonReader. Path '', line 0, position 0.,.github/workflows/on_manual_scale.yaml (Line: 48, Col: 17): Unexpected value ''
my matrix looks like:
echo "Matrix set to :"
echo "[$joined]"
["1","2","3","4","5","6","7","8","9","10"]
my output looks like
echo "::set-output name=matrix::[$joined]"
and my strategy on my downstream job looks like:
strategy:
matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }}
Got it, output was wrong. Its still a bit magic to me though
2021-10-15
Hi all, I’m trying to figure out if Github Actions is a good fit. So I have built out a POC with a single application and it works great! However I’m dealing with some issues, we basically have a monorepo with a ton of different applications and different namespaces. It’s creating a bit of pain in trying to figure out how Github actions would work.
Basically say we have PR and it’s testing and building a few packages, x/javaAppA, y/javaAppB and z/frontendAppA. Would GitHub actions be able to handle things dynamically like this? I’m having some trouble in figuring this out, so far I have a list of changes with the different paths to things, and am able to build one app individually but not all three together. Any suggestions?
Our current setup uses Jenkins with build.properties files in each app folder to define what sort of language it uses and where it deploys to. I.e java app that deploys to kubernetes, reactJS app that deploys via terraform to AWS s3 / Cloudfront
It can support it, but it’s really hard to be able to provide good insights into how to solve that riddle without explicit knowledge of the teams acceptance criteria.
I will say that generally you can trigger a GitHub Actions for criteria like paths
(files that changed in the PR) and match those to a Java build line, or a Node build line, etc. But you might find that this is too limiting and you need to first run an initial pipeline that runs a script in your language of choice and then triggers a second pipeline, to do this you can use repository-dispatch.
You can have multiple workflows that are triggered simultaneously within a repo too which might work well for you, but if you need them in a particular sequence then you might need to look at repo dispatch again. I’m sure others have solved this riddle other ways too.
I will say that personally I like GA a ton more than Jenkins, but it’s definitely not as full featured. Jenkins has been around for 15 years where GA has only been around for like 2 years so there’s still a lot to be desired but the trade off of managed worker nodes is well worth it to me.
One other word of caution, be careful a bout what GitHub Actions you use from the Marketplace. There’s a fair amount of abandoned projects out there, even sometimes the one with the most stars isn’t the one you really want.
Hey! Wow, thanks for the detailed reply! I really appreciate it! As for what you said it indeed is somewhat of a puzzle but I really want to move away from our aging Jenkins stuff which is on life support at this point.
For pathing, I already have something set up, where it actually will check for certain kinds of files that match the criteria, i.e all of our java builds have dockerfiles in them, all of our react builds have package.json, so that’s handled. Building and testing criteria is handled by flags in a build.properties file that already exists in each subfolder which we use to determine if it’s buildable, testable and deployable.
My only concern right now is how a repository dispatch would work, would I be able to call it from anywhere inside the job? Similar to how Jenkins pipelines can spin off another job?
disclaimer: I could be wrong about this
You can do that, but it’s async so you can’t do something like:
- step 1
- step 2
- <repo dispatch>
- step 3
Hmm…that makes it a little more complicated as I need to retrieve all the changed files and determine which job goes where. I’ll dig into it.
Though based on what you sent me before, it looks like a regular step, doesn’t look async to me
it’s just that you can’t trigger a child pipeline and wait for the result before continuing within a single pipeline
that’s all I was trying to represent with that
Ah, I wouldn’t need that single pipeline to continue, all it needs to do is hand off to the other workflows
Cause those are the ones that will pass / fail
I.e master workflow determines all changes, starts handing it off to the pipelines that will build / test / deploy the Java, or react code. Master workflow can then stop.
you should be able to achieve that with GA just fine
Thanks for your help!
I thiiink I have a better idea of how to handle this.
Also, I would check out the composite actions -that can DRY it up a lot
Composite actions? I’m somewhat of an Actions newbie haha, got any docs / refs for it?
In this guide, you’ll learn how to build a composite action.