There are few notes need you pay attention to:
When using GitHub-hosted runner to run jobs in the workflow, each jobs can run for up to 6 hours （360 minutes） of execution time, , but this limit does not apply to self-hosted runners.
Each workflow run is limited to 72 hours. If a workflow run reaches this limit, the workflow run is cancelled. This limit also applies to self-hosted runners.
According above two points, the below situations (including but not limited to) will let the workflow run be matked as timed out after 72 hours:
When using GitHub-hosted runners to run some performed sequentially jobs (at least 12) in the workflow, and the total run time of the jobs reaches 72 hours.
When using self-hosted runners to run jobs (at least 1) in the workflow, one of the job run is stuck and finally make the run time of the workflow run reaches 72 hours.
More details about the limits of time-out, you can reference here: https://help.github.com/en/actions/getting-started-with-github-actions/about-github-actions#usage-limits