ci: first commit

This commit is contained in:
Jack Halford 2025-04-18 21:25:14 +02:00
parent f807011f79
commit 1361237168
No known key found for this signature in database
4 changed files with 25 additions and 18 deletions

13
.github/workflows/release.yaml vendored Normal file
View file

@ -0,0 +1,13 @@
on:
push:
branches: [main]
jobs:
release:
name: release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
- run: ./blind_chess.py
- run: gh release create --notes "" "$(date +%y-%m-%d)" blind_chess.apkg

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*.apkg

View file

@ -1,4 +1,7 @@
#!/usr/bin/env -S uv run --script #!/usr/bin/env -S uv run --script
#
# Generates the blind_chess.apkg Anki Deck
#
# /// script # /// script
# requires-python = ">=3.13" # requires-python = ">=3.13"
# dependencies = [ # dependencies = [
@ -12,14 +15,9 @@ import genanki
import chess import chess
import chess.svg import chess.svg
deck = genanki.Deck( deck = genanki.Deck(2059400110, 'Blind Chess')
2059400110,
'Blind Chess'
)
model= genanki.Model( model = genanki.Model(1120858226, 'Chess Model',
1120858226,
'Chess Model',
fields=[ fields=[
{'name': 'guid'}, {'name': 'guid'},
{'name': 'Question'}, {'name': 'Question'},
@ -38,7 +36,6 @@ model= genanki.Model(
class ChessNote(genanki.Note): class ChessNote(genanki.Note):
@property @property
def guid(self): def guid(self):
# slug-square-piece
return genanki.guid_for(self.fields[0]) return genanki.guid_for(self.fields[0])
def square_color(sq_name): def square_color(sq_name):
@ -58,25 +55,21 @@ def knight_moves(sq_name):
board.set_piece_at(sq_id, chess.Piece(chess.KNIGHT, chess.WHITE)) board.set_piece_at(sq_id, chess.Piece(chess.KNIGHT, chess.WHITE))
attacks = board.attacks(sq_id) attacks = board.attacks(sq_id)
guid = f'{sq_name}-knight-moves' #guid guid = f'{sq_name}-knight-moves'
question = f'Where can the knight move from square {sq_name}?' question = f'Where can the knight move from square {sq_name}?'
answer = ', '.join(chess.SQUARE_NAMES[sq] for sq in list(attacks)) answer = ', '.join(chess.SQUARE_NAMES[sq] for sq in list(attacks))
board_svg = chess.svg.board(board, fill=dict.fromkeys(attacks, "#cc0000cc")) board_svg = chess.svg.board(board, fill=dict.fromkeys(attacks, "#cc0000cc"))
# return ChessNote(model, [guid, question, answer, board_svg]) return ChessNote(model, [guid, question, answer, board_svg])
return ChessNote(model, [guid,question,answer,board_svg])
def notes(): def notes():
# square colors
for sq_name in chess.SQUARE_NAMES: for sq_name in chess.SQUARE_NAMES:
yield square_color(sq_name) yield square_color(sq_name)
yield knight_moves(sq_name) yield knight_moves(sq_name)
notes = list(notes())
# randomize the order of the notes # randomize the order of the notes
random.shuffle(notes) for note in random.shuffle(list(notes()))
for note in notes:
deck.add_note(note) deck.add_note(note)
genanki.Package(deck).write_to_file('chess.apkg') out = 'blind_chess.apkg'
print(f'Created deck chess.apkg with {len(deck.notes)} notes') genanki.Package(deck).write_to_file(out)
print(f'Created deck {out} with {len(deck.notes)} notes')

Binary file not shown.