Skip to content

Commit

Permalink
Add a script to allow users to create a private fork
Browse files Browse the repository at this point in the history
Add a script to allow users to create a private fork on GitHub which automatically looks for updates in the GitHub repo and updates a main and a devel branch.

See merge request gysela-developpers/gyselalibxx!776

--------------------------------------------
  • Loading branch information
EmilyBourne committed Nov 20, 2024
1 parent bbc5e81 commit 62ace52
Show file tree
Hide file tree
Showing 87 changed files with 5,904 additions and 7 deletions.
164 changes: 164 additions & 0 deletions bin/create_private_fork
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
#!/bin/bash
# SPDX-License-Identifier: MIT

# Check for the gh command
if ! command -v gh 2>&1 >/dev/null
then
echo "This script uses GitHub's command line tool 'gh' but it does not seem to be installed."
echo "The installation instructions can be found at https://github.com/cli/cli?tab=readme-ov-file#installation"
exit 1
fi

# Check that the gh command has been initialised
if ! gh auth status -h github.com >/dev/null
then
echo "Please run:"
echo "gh auth login -h github.com"
echo "To authenticate on GitHub for the first time. This will allow you to use the GitHub CLI to create new repositories"
exit 1
fi

# Create the directory for the new repository
set -e
echo "Please provide the path to the folder where you want to create the new repository:"

read directory

directory=$(realpath ${directory})

if [ -d "${directory}" ]; then
echo "The specified folder already exists."
fi

# Clone the repository into the new folder
git clone [email protected]:gyselax/gyselalibxx.git --single-branch --branch main ${directory}

echo "Created ${directory}"

cd ${directory}

git remote rename origin gyselalibxx

# Create the new private repository
echo "What would you like to call your private repository ? [Default: gyselalibxx]"

read repo_name

if [ -z "${repo_name}" ]; then
repo_name=gyselalibxx
fi
echo ${repo_name}

git_user=$(python3 -c "import subprocess; import json; p=subprocess.run(['gh', 'api', 'user'], capture_output=True, universal_newlines=True); d = json.loads(p.stdout); print(d['login'])")

gh repo create --private ${repo_name} -r origin -s .

# Setup the branches and default settings on the new private repository
gh repo set-default ${git_user}/${repo_name}
git push -u origin main

git checkout -b devel
git push -u origin devel

gh repo edit --default-branch devel --delete-branch-on-merge --enable-squash-merge --allow-update-branch
gh label create "Ready to review" -c "#F2DD28" -d "Label to be automatically added to a PR when it is ready to be reviewed"
gh label create "Ready to merge" -c "#A9F543" -d "Label to be automatically added to a PR when it is approved and tests are passing"
gh api \
--method PUT \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${git_user}/${repo_name}/actions/permissions/workflow \
-f "default_workflow_permissions=write" -F "can_approve_pull_request_reviews=true"

# Create the CI to update the main and devel branches
cat >.github/workflows/mirror_files.yml <<EOL
name: mirror
on:
schedule:
- cron: '00 03 * * *' # Run every day at 03:00
jobs:
Update_branches:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: main
fetch-depth: 0
- run: |
git config user.name 'github-actions[bot]'
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
MAIN_SHA=\$(git log -1 --pretty=%H)
echo "MAIN_SHA=\${MAIN_SHA}" >> \$GITHUB_OUTPUT
git checkout devel
set +e
./bin/update_branches
SUCCESS=\$?
echo
set -e
existing_issue=\$(gh issue list -S "Update repository" --json number)
if [[ \${SUCCESS} != 0 ]]
then
if [[ "\${existing_issue}" == "[]" ]]
then
gh issue create -t "Update repository" -b "This repository has conflicts with the main repository. Please run ./bin/update_branches and fix rebase conflicts manually"
fi
else
if [[ "\${existing_issue}" != "[]" ]]
then
issue_id=\$(python -c "import json; print(json.loads('\${existing_issue}'[1:-1])['number'])")
gh issue close \${issue_id} -r completed -c "Fixed as of \$(date)"
fi
fi
shell: bash
env:
GH_TOKEN: \${{ github.token }}
EOL

cat >bin/update_branches <<EOL
#!/bin/bash
# SPDX-License-Identifier: MIT
git checkout main
MAIN_SHA=\$(git log -1 --pretty=%H)
if ! git config remote.gyselalibxx.url > /dev/null; then
git remote add gyselalibxx [email protected]:gyselax/gyselalibxx.git
fi
git merge gyselalibxx/main
git checkout devel
git rebase --onto main \${MAIN_SHA} devel
SUCCESS=\$?
if [[ \${SUCCESS} == 0 ]]
then
git push -f --all
echo "Main and devel branch updated successfully"
else
git status
exit 1
fi
EOL
chmod +x bin/update_branches
git add bin/update_branches .github/workflows/mirror_files.yml
git commit -m "Set up repository mirroring"
git push

# Output explanations to user
RED='\033[0;31m'
NC='\033[0m' # No Color

echo -e "The new repository was created successfully."
echo -e "This repository contains 2 branches:"
echo -e "- main"
echo -e "- devel"
echo -e ""
echo -e "The main branch is a duplicate of the main branch in the gyselax/gyselalibxx repository."
echo -e "${RED}The main branch should not be modified manually.${NC}"
echo -e "The devel branch contains clean commits which can be added to the main branch in the gyselax/gyselalibxx repository when the developments in this branch become public."
echo -e "In order to develop in this repository you should create a third branch for your developments. When you are happy with the changes you can create a pull request and merge them cleanly into the devel branch."
echo -e "At 3:00 every morning a CI will run on GitHub to update the main branch and rebase the devel branch onto the main branch. This will ensure that your developments remain up to date with the gyselax/gyselalibxx repository. If the rebase fails then an issue will be created to warn you to fix this problem manually."
echo -e "This repository is private and can only be accessed by other developers if you give them permission in the settings."
echo -e "If you need to make general changes to gyselalibxx which are not private and could be useful for other users please try to create issues directly in the gyselax/gyselalibxx repository. Once the pull request has been merged there you can update your branches (without waiting for 3:00 am by running ./bin/update_branches"
2 changes: 2 additions & 0 deletions simulations/geometryXVx/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@

add_subdirectory(landau)
add_subdirectory(bump_on_tail)
add_subdirectory(neutrals)
add_subdirectory(sheath)
4 changes: 2 additions & 2 deletions simulations/geometryXVx/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

This folder constains the following simulations:

- Landau
- Bump-On-Tail
- [sheath](./sheath/README.md) - A Boltzmann-Poisson system is solved for the electric field and the distribution function for both electrons and ions species.
- [neutrals](./neutrals/README.md) - Executables for the study of plasma-neutral interactions on a single magnetic field line.
32 changes: 32 additions & 0 deletions simulations/geometryXVx/neutrals/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# SPDX-License-Identifier: MIT

foreach(GEOMETRY_VARIANT IN LISTS GEOMETRY_XVx_VARIANTS_LIST)

add_executable(neutrals_${GEOMETRY_VARIANT} neutrals.cpp)
target_link_libraries(neutrals_${GEOMETRY_VARIANT}
PUBLIC
DDC::DDC
DDC::PDI_Wrapper
gslx::advection
gslx::boltzmann_${GEOMETRY_VARIANT}
gslx::fluidinitialization_${GEOMETRY_VARIANT}
gslx::fluidsolver_${GEOMETRY_VARIANT}
gslx::moments
gslx::initialization_${GEOMETRY_VARIANT}
gslx::interpolation
gslx::paraconfpp
gslx::poisson_${GEOMETRY_VARIANT}
gslx::reactionrates_${GEOMETRY_VARIANT}
gslx::rhs_${GEOMETRY_VARIANT}
gslx::speciesinfo
gslx::time_integration_hybrid_${GEOMETRY_VARIANT}
gslx::io
gslx::utils

paraconf::paraconf
PDI::pdi
)

install(TARGETS neutrals_${GEOMETRY_VARIANT})

endforeach()
9 changes: 9 additions & 0 deletions simulations/geometryXVx/neutrals/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Neutral simulations

## Description
The `neutral` executable allows the study of plasma-neutral interactions on a single magnetic field line. The magnetic field line is connected at both of its ends to a solid wall. A Boltzmann-Poisson system is solved for the electric field and the distribution function for both electrons and ions species. The model is one dimensional in space and velocity (1D1V).

The wall region is treated using immersed boundary condition (or penalization). Electrons and ions are absorbed inside this region. The inertia difference between the two species drives the appearance of a positively charged layer (the sheath) at the plasma boundary. The neutrals are treated using a simple fluid model (advective, pressure-diffusion, etc.)

## Usage
After building the code, run the executable located in `build/simulations/neutral/`. To use the default simulation parameters the user can provide the `--dump-config` option when launching the executable.
Loading

0 comments on commit 62ace52

Please sign in to comment.