name: Execute template to populate repository on: push: workflow_dispatch: jobs: setup-repo: if: ${{ github.repository != 'simonw/click-app-template-repository' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 ref: ${{ github.head_ref }} - name: Install cookiecutter run: pip3 install cookiecutter - uses: actions/github-script@v4 id: fetch-repo-and-user-details with: script: | const query = `query($owner:String!, $name:String!) { repository(owner:$owner, name:$name) { name description owner { login ... on User { name } ... on Organization { name } } } }`; const variables = { owner: context.repo.owner, name: context.repo.repo } const result = await github.graphql(query, variables) console.log(result) return result - name: Rebuild contents using cookiecutter env: INFO: ${{ steps.fetch-repo-and-user-details.outputs.result }} run: | export REPO_NAME=$(echo $INFO | jq -r '.repository.name') # Run cookiecutter pushd /tmp cookiecutter gh:simonw/click-app --no-input \ app_name=$REPO_NAME \ description="$(echo $INFO | jq -r .repository.description)" \ github_username="$(echo $INFO | jq -r .repository.owner.login)" \ author_name="$(echo $INFO | jq -r .repository.owner.name)" popd # Move generated content to root directory of repo mv /tmp/$REPO_NAME/* . # And .gitignore too: mv /tmp/$REPO_NAME/.gitignore . # Delete the setup.yml workflow, it has served its purpose rm .github/workflows/setup.yml - name: Force push new repo contents uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: "Initial library structure" push_options: --force