Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Synchronize SDK templates to separate repositories #24

Draft
wants to merge 37 commits into
base: rzadp/release-crates-1.9.0-without-workflows
Choose a base branch
from
Draft
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
187f423
templates
rzadp Apr 4, 2024
206c407
test
rzadp Apr 8, 2024
8f1fc3c
no fail fast
rzadp Apr 8, 2024
9df028f
test pr creation on failure
rzadp Apr 8, 2024
fc38799
reformat first
rzadp Apr 8, 2024
a507d2a
typo
rzadp Apr 8, 2024
727be44
release branch
rzadp Apr 8, 2024
da9b96f
add explanation comment
rzadp Apr 8, 2024
abc49fd
Revert "test pr creation on failure"
rzadp Apr 8, 2024
167bd5c
comments
rzadp Apr 8, 2024
0460382
refactor
rzadp Apr 8, 2024
c6e1976
add explanation
rzadp Apr 8, 2024
5f27960
structure and comments
rzadp Apr 8, 2024
df63e69
pr got merged
rzadp Apr 8, 2024
90083fc
comment push
rzadp Apr 8, 2024
dbbeed4
update commit name
rzadp Apr 8, 2024
d8712a2
free disk space
rzadp Apr 8, 2024
ace12e1
bump version
rzadp Apr 8, 2024
2928f3f
try to build it without the container
rzadp Apr 8, 2024
5205dc4
typo
rzadp Apr 8, 2024
b421a45
Revert "typo"
rzadp Apr 8, 2024
73e4350
Revert "try to build it without the container"
rzadp Apr 8, 2024
4534cb5
check instead of build?
rzadp Apr 8, 2024
d8db350
push
rzadp Apr 8, 2024
6d805df
restore disk
rzadp Apr 8, 2024
19acef8
out of container
rzadp Apr 8, 2024
72aa848
proto
rzadp Apr 8, 2024
a884000
install
rzadp Apr 8, 2024
7b9248f
rustup
rzadp Apr 8, 2024
0a5fafd
test
rzadp Apr 8, 2024
3dc818a
build all
rzadp Apr 8, 2024
2dee4de
todo comment
rzadp Apr 8, 2024
3bc0068
new approach with toml-cli
rzadp Apr 8, 2024
4947dfa
comment
rzadp Apr 8, 2024
6feb910
cleanup and rename
rzadp Apr 9, 2024
6027705
stg stuff
rzadp Apr 9, 2024
8ccb6ba
Update .github/workflows/publish-templates.yml
rzadp Apr 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 158 additions & 0 deletions .github/workflows/publish-templates.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
name: Synchronize templates


# This job is used to keep the repository templates up-to-date.
# The code of the templates exist inside the monorepo, and upon releases we synchronize the repositories:
# - https://github.com/paritytech/polkadot-sdk-minimal-template
# - https://github.com/paritytech/polkadot-sdk-parachain-template
# - https://github.com/paritytech/polkadot-sdk-solochain-template
#
# The job moves the template code out of the monorepo,
# replaces any references to the monorepo workspace using psvm and toml-cli,
# checks that it builds successfully,
# and commits and pushes the result to each respective repository.
# If the build fails, a PR is created instead for manual inspection.


on:
push:
# A manual dispatch for now - automatic on releases later.
workflow_dispatch:
inputs:
release_branch:
description: 'A branch to use, e.g. release-crates-io-v1.x.x'
required: true


jobs:
sync-templates:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
template: ["minimal", "solochain", "parachain"]
env:
template-path: "polkadot-sdk-${{ matrix.template }}-template"
polkadot-release-version: "1.9.0"
steps:

# 1. Prerequisites.

- name: Configure git identity
run: |
git config --global user.name "Template Bot"
git config --global user.email "163130811+polkadot-sdk-template-bot-stg[bot]@users.noreply.github.com"
- uses: actions/checkout@v3
with:
path: polkadot-sdk
ref: "${{ github.event.inputs.release_branch }}"
- name: Generate token
id: app_token
uses: actions/[email protected]
with:
app-id: ${{ secrets.TEMPLATE_APP_ID }}
private-key: ${{ secrets.TEMPLATE_APP_KEY }}
- uses: actions/checkout@v3
with:
repository: "paritytech-stg/polkadot-sdk-${{ matrix.template }}-template"
path: "${{ env.template-path }}"
token: ${{ steps.app_token.outputs.token }}
- name: Install toml-cli
run: cargo install --git https://github.com/gnprice/toml-cli --rev ea69e9d2ca4f0f858110dc7a5ae28bcb918c07fb # v0.2.3
- name: Install Polkadot SDK Version Manager
run: cargo install --git https://github.com/paritytech/psvm --rev c41261ffb52ab0c115adbbdb17e2cb7900d2bdfd psvm # master
- name: Rust compilation prerequisites
run: |
sudo apt update
sudo apt install -y \
protobuf-compiler
rustup target add wasm32-unknown-unknown
rustup component add rustfmt clippy rust-src

# 2. Yanking the template out of the monorepo workspace.

- name: Use psvm to replace git references with released creates.
run: find . -type f -name 'Cargo.toml' -exec psvm -o -v ${{ env.polkadot-release-version }} -p {} \;
working-directory: polkadot-sdk/templates/${{ matrix.template }}/
- name: Create a new workspace Cargo.toml
run: |
cat << EOF > Cargo.toml
[workspace.package]
license = "MIT-0"
authors = ["Parity Technologies <[email protected]>"]
homepage = "https://substrate.io"

[workspace]
members = [
"node",
"pallets/template",
"runtime",
]
resolver = "2"
EOF
shell: bash
working-directory: polkadot-sdk/templates/${{ matrix.template }}/
- name: Update workspace configuration
run: |
set -euo pipefail
# toml-cli has no overwrite functionality yet, so we use temporary files.
# We cannot pipe the output straight to the same file while the CLI still reads and processes it.

toml set templates/${{ matrix.template }}/Cargo.toml 'workspace.package.repository' "https://github.com/paritytech/polkadot-sdk-${{ matrix.template }}-template.git" > Cargo.temp
mv Cargo.temp ./templates/${{ matrix.template }}/Cargo.toml

toml set templates/${{ matrix.template }}/Cargo.toml 'workspace.package.edition' "$(toml get --raw Cargo.toml 'workspace.package.edition')" > Cargo.temp
mv Cargo.temp ./templates/${{ matrix.template }}/Cargo.toml

toml get Cargo.toml 'workspace.lints' --output-toml >> ./templates/${{ matrix.template }}/Cargo.toml

toml get Cargo.toml 'workspace.dependencies' --output-toml >> ./templates/${{ matrix.template }}/Cargo.toml
working-directory: polkadot-sdk
- name: Print the result Cargo.tomls for debugging
if: runner.debug == '1'
run: find . -type f -name 'Cargo.toml' -exec cat {} \;
working-directory: polkadot-sdk/templates/${{ matrix.template }}/

- name: Clean the destination repository
run: rm -rf ./*
working-directory: "${{ env.template-path }}"
- name: Copy over the new changes
run: |
cp -r polkadot-sdk/templates/${{ matrix.template }}/* "${{ env.template-path }}/"

# 3. Verify the build. Push the changes or create a PR.

# We've run into out-of-disk error when compiling Polkadot in the next step, so we free up some space this way.
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # 1.3.1
with:
android: true # This alone is a 12 GB save.
# We disable the rest because it caused some problems. (they're enabled by default)
# The Android removal is enough.
dotnet: false
haskell: false
large-packages: false
swap-storage: false

- name: Check if it compiles
id: check-compilation
run: cargo check && cargo test
working-directory: "${{ env.template-path }}"
timeout-minutes: 90
- name: Create PR on failure
if: failure() && steps.check-compilation.outcome == 'failure'
uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5 # v5
with:
path: "${{ env.template-path }}"
token: ${{ steps.app_token.outputs.token }}
add-paths: |
./*
title: "[Don't merge] Update the ${{ matrix.template }} template"
body: "The template has NOT been successfully built and needs to be inspected."
branch: "update-template/${{ github.event_name }}"
- name: Push changes
run: |
git add -A .
git commit --allow-empty -m "Update template triggered by ${{ github.event_name }}"
git push
working-directory: "${{ env.template-path }}"
Loading